
PostgreSQL CVE-2025-1094 — quoting API SQL Injection 취약점 분석 및 대응
1️⃣ 개요
CVE-2025-1094는 PostgreSQL 클라이언트 라이브러리(libpq)의 quoting 관련 API에서 발생한 SQL Injection 취약점입니다. 해당 취약점은 문자열 인코딩 검증 실패 시 따옴표(quoting) 구문이 제대로 중화되지 않아 악성 입력이 SQL 명령으로 해석될 수 있는 문제로, PostgreSQL 프로젝트는 이를 Critical 수준(점수 8.1 / AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)으로 분류했습니다.
2️⃣ 영향 범위
- 취약 함수:
PQescapeLiteral()PQescapeIdentifier()PQescapeString()PQescapeStringConn()
- 영향 컴포넌트: client (libpq, psql 등)
- 공격 조건: BIG5 → EUC_TW 또는 MULE_INTERNAL 인코딩 조합 환경
- 보고자: Stephen Fewer (Rapid7, Principal Security Researcher)
3️⃣ 취약점 세부 내용
인코딩 검증에 실패한 문자열이 quoting 함수로 전달될 경우, PostgreSQL의 문자열 이스케이프 로직이
일부 인코딩(BIG5/EUC_TW/MULE_INTERNAL) 조합에서 중화 처리를 건너뛰는 현상이 발생합니다.
이로 인해 공격자는 특정 입력값을 통해 SQL 문장을 변조할 수 있으며,
특히 애플리케이션이 psql 인터랙티브 터미널에 직접 명령을 전달하는 구조라면
원격 코드 실행이나 데이터 조작(SQL Injection)이 가능합니다.
영향 함수 예시:
char *PQescapeLiteral(PGconn *conn, const char *str, size_t length);
char *PQescapeIdentifier(PGconn *conn, const char *str, size_t length);
char *PQescapeStringConn(PGconn *conn, const char *from, char *to, size_t to_length, int *error);
4️⃣ 영향 버전 및 수정 버전
| 버전 | 영향 받음 | 수정 버전 | 배포일 |
|---|---|---|---|
| 17 | 17.2 이하 | 17.3 | 2025-02-13 |
| 16 | 16.6 이하 | 16.7 | 2025-02-13 |
| 15 | 15.10 이하 | 15.11 | 2025-02-13 |
| 14 | 14.15 이하 | 14.16 | 2025-02-13 |
| 13 | 13.18 이하 | 13.19 | 2025-02-13 |
5️⃣ 점검 및 확인 방법
-- PostgreSQL 버전 확인
psql --version
# 또는
SELECT version();
-- libpq 버전 확인 (Linux 예시)
ldd /usr/bin/psql | grep libpq
출력된 libpq 버전이 17.3 / 16.7 / 15.11 / 14.16 / 13.19 미만이면 업데이트가 필요합니다.
6️⃣ 조치 및 복구 절차
- PostgreSQL 공식 리포지터리에서 최신 버전으로 업데이트:
sudo apt update && sudo apt install postgresql-client postgresql -y - 패치 적용 후 서비스 재시작:
sudo systemctl restart postgresql - 애플리케이션에서 quoting 관련 API 사용 코드 점검:
PQescapeLiteral()또는PQescapeString()호출 후 입력 검증 절차 추가- 외부 인자(환경변수, 사용자입력)를 그대로 psql에 전달하지 않도록 수정
7️⃣ 기본 오류 대응 4단계
- 외부 노출 확인 — libpq 기반 앱이 외부 네트워크로부터 직접 호출되는지 점검
- 역할 비활성화 — 불필요한 DB 접속 계정 권한 축소
- 포트 차단 — PostgreSQL 포트(5432)에 대한 외부 접근 제한
- 로그 모니터링 — 인코딩 오류, quoting 관련 예외 로그 탐지 강화
8️⃣ 보고 및 감사
취약점이 실제로 악용된 정황(비정상 SQL 실행, 의도치 않은 quoting 오류 로그 등)이 확인될 경우, 내부 CERT팀 또는 PostgreSQL 보안팀(security@postgresql.org)에 보고해야 합니다. PostgreSQL 프로젝트는 이 이슈를 Rapid7의 Stephen Fewer 연구자에게 감사를 표했습니다.
