[PostgreSQL] CVE-2025-1094 — quoting API SQL Injection

반응형
PostgreSQL CVE-2025-1094 — quoting API SQL Injection 취약점 분석 및 대응

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️⃣ 영향 버전 및 수정 버전

버전영향 받음수정 버전배포일
1717.2 이하17.32025-02-13
1616.6 이하16.72025-02-13
1515.10 이하15.112025-02-13
1414.15 이하14.162025-02-13
1313.18 이하13.192025-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️⃣ 조치 및 복구 절차

  1. PostgreSQL 공식 리포지터리에서 최신 버전으로 업데이트:
    sudo apt update && sudo apt install postgresql-client postgresql -y
  2. 패치 적용 후 서비스 재시작:
    sudo systemctl restart postgresql
  3. 애플리케이션에서 quoting 관련 API 사용 코드 점검:
    • PQescapeLiteral() 또는 PQescapeString() 호출 후 입력 검증 절차 추가
    • 외부 인자(환경변수, 사용자입력)를 그대로 psql에 전달하지 않도록 수정

7️⃣ 기본 오류 대응 4단계

  1. 외부 노출 확인 — libpq 기반 앱이 외부 네트워크로부터 직접 호출되는지 점검
  2. 역할 비활성화 — 불필요한 DB 접속 계정 권한 축소
  3. 포트 차단 — PostgreSQL 포트(5432)에 대한 외부 접근 제한
  4. 로그 모니터링 — 인코딩 오류, quoting 관련 예외 로그 탐지 강화

8️⃣ 보고 및 감사

취약점이 실제로 악용된 정황(비정상 SQL 실행, 의도치 않은 quoting 오류 로그 등)이 확인될 경우, 내부 CERT팀 또는 PostgreSQL 보안팀(security@postgresql.org)에 보고해야 합니다. PostgreSQL 프로젝트는 이 이슈를 Rapid7의 Stephen Fewer 연구자에게 감사를 표했습니다.

반응형
LIST