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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/kihara-1/postgresql-cve-2026-14662
Vulnerability AnalysisFuzzingPapers & ResearchLearning & EducationCurated ResourcesDatabase Security
GitHubkihara-1/postgresql-cve-2026-14662

postgresql-cve-2026-14662

PostgreSQL의 전문 검색(tsvector/tsquery)에서 발견된 범위 밖 쓰기 취약점 CVE-2026-14662를, 수정 전(18.4)과 수정 후(18.6)를 Docker로 나란히 실행하여 검증한 기록과 발표 자료

저장소 보기
14시간 22분 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-14662 추적 — PostgreSQL 전문 검색의 범위 밖 쓰기 취약점

PostgreSQL의 전문 검색 데이터 타입(tsvector / tsquery)에서 발견된 CVE-2026-14662에 대해, 수정 전(18.4)과 수정 후(18.6)를 Docker로 동시에 실행하여 동작 차이를 실제로 관측한 기록입니다.

보안 학습용으로 정리한 것으로, 발표 자료도 포함되어 있습니다.

이 취약점의 개요

항목내용
CVECVE-2026-14662
대상PostgreSQL의 tsvector / tsquery
종류정수 랩어라운드로 인한 할당 크기 부족 및 범위 밖 쓰기
CVSS8.8 / 10.0 (High)
공개일2026-08-13
수정 버전18.5, 17.11, 16.15, 15.19, 14.24

약점의 연쇄는 다음과 같은 형태입니다.

root@kitploit:~
CWE-190(정수 오버플로) → CWE-131(버퍼 크기의 잘못된 계산) → CWE-787(범위 밖 쓰기)
=근본 원인                                                        =최종적 영향

리포지토리 구성

root@kitploit:~
.
├── docs/
│   └── presentation.md   발표 자료(취약점 해설 + CWE 해설)
└── docker/
    ├── README.md         재현 환경 사용법
    ├── docker-compose.yml
    ├── init/             양쪽 버전에 적용하는 공통 초기화 SQL
    ├── test/             PoC 및 데모용 SQL
    └── run.sh            시작 → PoC 실행 → 결과 표시

시도 방법

Docker와 Docker Compose가 있으면 아래 명령만으로 재현할 수 있습니다.

root@kitploit:~
cd docker
./run.sh

18.4와 18.6의 컨테이너가 시작되고, 동일한 초기화 SQL을 적용한 뒤 같은 PoC를 양쪽에 실행하여 결과를 나란히 표시합니다. 자세한 내용은 docker/README.md를 참조하세요.

관측 결과

테스트PostgreSQL 18.4(수정 전)PostgreSQL 18.6(수정 후)
tsquery의 자기 OR 결합 반복18회까지 오류 없이 성공(최종 8,650,748 바이트)17회째에 ERROR: tsquery is too large
총 길이 1,200,000 바이트의 단어 배열성공해 버림ERROR: string is too long for tsvector (1200000 bytes, max 1048575 bytes)
3,000 바이트 단어 1개성공해 버림ERROR: word is too long (3000 bytes, max 2046 bytes)

수정 전에는 내부 표현의 상한(20비트 비트필드에서 유래하는 MAXSTRPOS = 1,048,575)을 초과하는 데이터를 오류 하나 없이 수용해 버립니다.

또한 18.6이 "정확히 17회째"에서 멈추는 이유는 계산으로 설명할 수 있으며, 이론값과 실측값이 바이트 단위로 일치함을 확인했습니다(자세한 내용은 발표 자료).

PostgreSQL 본체 소스에 대해

차이 확인에는 PostgreSQL 공식 리포지토리의 클론을 사용했지만, 용량이 크므로(각 185MB) 본 리포지토리에는 포함하지 않았습니다. 필요한 경우 다음과 같이 취득하세요.

root@kitploit:~
git clone --branch REL_18_4 --depth 1 https://github.com/postgres/postgres.git postgres-18.4
git clone --branch REL_18_6 --depth 1 https://github.com/postgres/postgres.git postgres-18.6

수정이 들어간 파일은 다음 3개입니다.

  • src/backend/utils/adt/tsquery_util.c
  • src/backend/utils/adt/tsvector.c
  • src/backend/utils/adt/tsvector_op.c

주의

  • 여기에 포함된 PoC는 이미 수정·공개된 취약점에 대해 수정 버전에서 경계 검사가 작동하는지 확인하기 위한 것입니다. 임의 코드 실행을 수행하는 익스플로잇은 포함되어 있지 않습니다.
  • 실행은 일회용 Docker 컨테이너 내에서 수행하세요. 프로덕션 환경에서 실행하지 마세요.
  • 본 리포지토리의 CWE 분류는 공식 권고문의 설명을 바탕으로 한 필자의 분석입니다 (공식 권고문에는 CWE 번호가 명시되어 있지 않습니다).

참고

  • CVE-2026-14662 공식 권고문
  • CWE-787: Out-of-bounds Write
  • CWE-190: Integer Overflow or Wraparound
  • CWE-131: Incorrect Calculation of Buffer Size
도구 다운로드