
자체 포함형 Docker 랩으로, PostgreSQL의 pgcrypto 확장 프로그램에서 발생하는 힙 버퍼 오버플로우인 CVE-2026-2005 악용을 실습할 수 있도록 설계되었으며, 권한 상승 및 컨테이너 코드 실행을 가능하게 합니다.
CVE-2026-2005 악용을 연습하기 위한 독립형 Docker 랩입니다. 이 취약점은 PostgreSQL의 pgcrypto 확장 프로그램에 있는 힙 버퍼 오버플로우로, 슈퍼유저 권한 없이 원격 코드 실행을 가능하게 합니다.
영향을 받는 버전: PostgreSQL ≤ 17.7 / 16.11 / 15.15 / 14.20 / 18.1
수정된 버전: 18.2, 17.8, 16.12, 15.16, 14.21 (2026-02-12 릴리스)
요구 사항: Docker, Docker Compose
git clone <this-repo>
cd CVE-2026-2005
docker compose up -d
PostgreSQL은 127.0.0.1:5433에서 수신 대기합니다.
애플리케이션 구성 파일에서 데이터베이스 자격 증명을 획득했습니다:
| 매개변수 | 값 |
|---|---|
| 호스트 | 127.0.0.1 |
| 포트 | 5433 |
| 데이터베이스 | targetdb |
| 사용자 이름 | pentester |
| 비밀번호 | pentester123 |
연결하여 접근 권한을 확인합니다:
psql -h 127.0.0.1 -p 5433 -U pentester -d targetdb
이 계정은 public 스키마에 대해 CREATE 권한을 가지고 있습니다. 슈퍼유저가 아닙니다.
랩을 완료하려면 두 플래그를 모두 획득하세요.
플래그 1 — 데이터베이스 권한 상승
SELECT * FROM flag_db;
-- DB 세션 내에서 슈퍼유저로 승격한 후에만 읽을 수 있음
플래그 2 — 컨테이너 코드 실행
/var/lib/postgresql/flag.txt
-- 컨테이너 내부에서 postgres OS 사용자로 명령을 실행한 후에만 읽을 수 있음
범위 참고:
COPY TO PROGRAM은 호스트가 아닌 Docker 컨테이너 내부에서 실행됩니다. 실제 환경에서의 주요 영향은 전체 데이터베이스 읽기 접근(모든 테이블, 모든 데이터베이스)입니다. Docker 호스트에 도달하려면 별도의 컨테이너 탈출 기술이 필요합니다.
결함은 pgcrypto/pgp-pubenc.c의 pgp_parse_pubenc_sesskey()에 있습니다.
공개 키로 암호화된 세션 키 패킷을 복호화할 때, 이 함수는 공격자가 제어하는 RSA/ElGamal 페이로드에서 세션 키 길이를 msglen - 3으로 도출하고 경계 검사 없이 고정된 32바이트 버퍼(PGP_MAX_KEY)에 복사합니다. 공격자는 버퍼 경계를 넘어 수백 바이트를 쓸 수 있습니다.
익스플로잇은 세 단계로 진행됩니다:
dst 구조체를 손상시켜 .data의 CurrentUserId를 10(BOOTSTRAP_SUPERUSERID)으로 덮어씁니다COPY (SELECT '') TO PROGRAM '<cmd>'가 컨테이너 내부에서 postgres 사용자로 OS 명령을 실행합니다. Docker가 없는 실제 배포 환경에서는 데이터베이스 호스트에서 OS 수준 접근을 의미합니다.ASLR 레이아웃은 동일한 postmaster 프로세스에 대한 모든 연결에서 동일하므로, 한 연결에서 유출된 주소는 다음 연결에서도 유효합니다.
pgcrypto/pgp-pubenc.cobjdump -t $(which postgres) | grep CurrentUserIddocker compose down -v
이 랩은 승인된 보안 연구 및 교육 목적으로만 사용됩니다. 소유한 시스템 또는 명시적 테스트 허가를 받은 시스템에서만 실행하세요.