
pgAdmin 개념 증명
pgAdmin 개념 증명
⚠️ 면책 조항
이 저장소는 pgAdmin 4 9.2 이전 버전에 존재하는 심각한 원격 코드 실행 취약점인 CVE-2025-2945에 대한 개념 증명 익스플로잇을 포함하고 있습니다. 이 코드는 오직 본인이 소유하거나 테스트를 위한 명시적 허가를 받은 환경에서만 사용하십시오. 저자는 이 소프트웨어로 인한 오용이나 손해에 대해 책임을 지지 않습니다.
이 저장소는 CVE-2025-2945에 대한 Metasploit 모듈의 기능을 재현하는 독립 실행형 Python 스크립트 pgadmin_rce.py를 제공합니다. 취약한 pgAdmin 4 인스턴스(버전 8.10~9.1)를 대상으로 실행하면 다음을 수행합니다.
query_commited 매개변수를 통해 악성 페이로드를 전송하여 서버에서 eval()을 트리거합니다.취약한 엔드포인트는 사용자 입력을 검증하지 않은 채 Python의 내장 eval()에 의존하므로, 인증된 사용자는 pgAdmin이 호스트 머신에서 임의의 Python 코드를 실행하도록 강제할 수 있으며, 이로 인해 완전한 RCE가 발생합니다.
query_commited (또는 Cloud Deployment 모듈의 high_availability) 매개변수를 서버의 eval() 호출에 전달하여 pgAdmin 서비스 계정으로 임의 코드 실행을 초래할 수 있습니다.Python 3.7+
Python 패키지(pip로 설치):
requestsfakerpip install requests faker
익스플로잇을 실행하려면 필수 인자와 함께 스크립트를 실행하면 됩니다.
python3 pgadmin_rce.py -t http://192.168.1.100 -u admin -p password --server-id 1 --group-id 1
python3 pgadmin_rce.py -t http://localhost:5050 -u [email protected] -p YourPassword --server-id 1 --group-id 1
익스플로잇이 성공하면 다음과 유사한 출력이 표시됩니다.
[+] Target: http://localhost:5050
[+] Authenticating...
[+] Obtained CSRF token: abc123def456
[+] Login successful
[+] Query Tool initialized successfully
[+] Discovered server-id: 1, group-id: 1
[+] Sending malicious payload...
[!] Received HTTP 500 - possible successful execution!
[+] Done.
query_commited 매개변수가 서버로 전송됩니다.eval()에 전달하며, 페이로드가 실행되면 500 오류를 반환하여 RCE를 확인합니다.query_commited 매개변수, 특히 Python 표현식, 산술 연산자 또는 base64로 인코딩된 데이터를 포함하는 HTTP 요청을 검사합니다.query_commited 값을 가진 요청을 차단하는 웹 애플리케이션 방화벽 규칙을 배포합니다.이 프로젝트는 MIT 라이선스 및 참조에 따라 라이선스가 부여됩니다:
| 인자 | 설명 | 필수 여부 |
|---|
-t, --target | pgAdmin 인스턴스의 기본 URL | 예 |
-u, --username | 인증용 사용자 이름 | 예 |
-p, --password | 인증용 비밀번호 | 예 |
--server-id | 엔드포인트 검색을 통해 얻은 서버 ID | 예 |
--group-id | 엔드포인트 검색을 통해 얻은 그룹 ID | 예 |
--timeout | HTTP 요청 시간 제한(초) | 아니요 |
--proxy | HTTP 프록시 URL (예: http://127.0.0.1:8080) | 아니요 |
--debug | 상세 디버그 로깅 활성화 | 아니요 |