주요 내용
- PostgreSQL의 취약점은 SQL 인젝션, 권한 상승 및 코드 실행, 접근 제어 결함, 백업 도구 악용 등 네 가지 유형으로 분류됩니다.
- 2026년 8월 13일 출시된 업데이트를 통해 28건의 CVE가 한꺼번에 해결되었으며, 그중 절반은 8.8점을 기록했습니다.
- 최악의 결과는 테이블 유출이 아니라, 호스트 OS까지 도달하는 익스플로잇 체인입니다.
- 신속하게 패치를 적용하고, 권한을 제한하며, 매개변수를 바인딩하고, 지원이 종료된 버전을 패치 없이 실행하지 마십시오.
- PostgreSQL의 내장 이스케이프 함수가 SQL 인젝션 문제를 해결했다고 생각했다면, CVE-2025-1094 는 그렇지 않다고 말합니다.
PostgreSQL은 정말로 탄탄한 보안 실적을 자랑하며, 널리 배포된 다른 SQL 데이터베이스들과 마찬가지로 와 마찬가지로 예측 가능한 주기로 통합 보안 권고문을 배포하지만, 최근 발견된 몇 가지 버그는 심각했으며, 그중 일부는 호스트에서 코드 실행까지 이어지는 수준이었습니다.
2026년 2026년 보안 권고 에서는 그 속도가 누그러질 기미가 보이지 않습니다. 2월에는 5건의 CVE가, 5월에는 11건이 해결되었으며, 8월 13일에는 한 번에 28건이 통합 공개되었습니다. 이 중에는 핵심 서버, 기여 모듈, 클라이언트 툴 전반에 걸쳐 발견된 심각도 높은 버그들도 포함되어 있습니다. 다음은 실제로 마주치게 될 취약점 유형, 이를 방치할 경우 발생할 수 있는 문제, 그리고 이를 해결하는 방법에 대한 요약입니다.
PostgreSQL 취약점의 유형
아래 버전 범위에 대한 참고 사항: PostgreSQL의 보안 권고문에는 검증이 완료된 지원 대상 브랜치 목록이 기재되어 있으나, 이는 그보다 오래된 모든 버전에 대해 안전하다는 보장을 의미하지는 않습니다. 일부 코드는 여러 브랜치에서 공유되지만 그렇지 않은 경우도 있으므로, PostgreSQL 13과 같은 지원 종료(EOL) 릴리스는 취약하거나 안전하다고 단정 짓기보다는 별도로 평가해야 합니다. 확실한 점은, 이제 업스트림 측에서 더 이상 여러분을 대신해 그러한 평가를 수행해 주지 않는다는 것입니다. TuxCare의 CVE 트래커 는 EOL 버전에 대해 실제로 어떤 문제가 분류되었는지, 그리고 Endless Lifecycle Support를 통해 패치가 이미 존재하는지 확인하는 가장 빠른 방법입니다.
SQL 주입
아무리 많은 ORM이 그렇지 않다고 주장해도, 여전히 사라지지 않았습니다. Rapid7이 발견한 Rapid7이 발견한 고위험 SQL 인젝션 취약점인 CVE-2025-1094 2025년 2월에 패치된 이 취약점은, 올바르게 이스케이프 처리된 입력조차 잘못된 인코딩 조건 하에서는 SQL 인젝션으로 이어질 수 있음을 보여주었습니다. 근본적인 문제는 libpq의 쿼팅 함수(PQescapeLiteral, PQescapeIdentifier, PQescapeString 및 PQescapeStringConn)가 인코딩 유효성 검사를 통과하지 못한 텍스트 내의 쿼팅 구문을 무력화하지 못했다는 점에 있었습니다. 부주의한 웹 애플리케이션에서 흔히 볼 수 있는 것과 같은 종류의 버그였지만, 한 층 더 깊숙이 숨겨져 있었던 것입니다. 게다가 수정 과정 자체가 해당 함수들에 또 다른 문제를 일으켜, 문자열 길이 매개변수를 무시하게 만들고 일부 호출자의 프로그램을 중단시키는 결과를 낳았으며, 이를 해결하기 위해 일주일 후 또 다른 릴리스가 필요했습니다.
최근에는 CVE-2026-6637(CVSS 8.8)이 refint contrib 모듈에 스택 버퍼 오버플로우 취약점으로 발견되었는데, 이로 인해 권한이 없는 데이터베이스 사용자가 데이터베이스를 실행 중인 운영 체제 사용자로 위장하여 임의의 코드를 실행할 수 있게 됩니다.
동일한 버그에는 두 번째로, 더 제한적인 공격 경로가 있습니다. 애플리케이션이 사용자 제어 열을 refint 캐스케이드 기본 키로 선언한 경우, 해당 키에 대한 업데이트 값을 제공하는 사람은 누구나 SQL 인젝션에 노출됩니다. 두 경로 모두 버전 14부터 18까지에 영향을 미칩니다. CVE-2026-6638은 ALTER SUBSCRIPTION … REFRESH PUBLICATION 명령문의 테이블 이름을 통한 인젝션 경로를 추가하여, 구독자 측의 테이블 생성자가 게시자 측의 자격 증명을 사용하여 SQL을 실행할 수 있게 하지만, 실제로는 공격 범위가 훨씬 더 좁습니다(CVSS 3.7, 버전 16부터 18까지만 해당).
8월에는 또 하나 주목할 만한 취약점이 발견되었습니다. CVE-2026-15741(CVSS 8.8)은 EXTRACT() 디파싱 과정에서 발생하는 SQL 인젝션 취약점으로, 객체 소유자가 악의적인 객체 정의를 통해 슈퍼유저 권한으로 임의의 SQL을 실행할 수 있게 하며, 이 취약점은 pg_dump, \sf와 같은 psql 명령어, 그리고 동일한 기능을 수행하는 비핵심 도구 등 디파싱된 표현식이 사용되는 모든 곳에서 발생합니다. 이 모든 경우에서 나타나는 패턴은 동일합니다. 즉, 비활성 상태여야 할 입력이 결국 실행 가능한 상태가 되어 버리는 것입니다.
주의: CVE-2025-1094에는 두 가지 뚜렷한 발생 경로가 있습니다. libpq의 따옴표 처리 함수의 경우, 해당 함수의 출력이 psql에 입력으로 전달될 때 위험이 발생합니다. 명령줄 유틸리티의 경우, 서버 측에서 EUC_TW 또는 MULE_INTERNAL과 결합된 BIG5 클라이언트 인코딩이 구체적인 유발 요인입니다. 사용 중인 스택에서 인코딩이 혼합되어 있거나, 어디에서든 쿼리 출력을 psql로 파이프하는 경우, 클라이언트에 패치를 적용하십시오.
권한 상승 및 원격 코드 실행
절차형 언어 확장 기능은 강력하며, 바로 그 점이 공격의 표적이 되는 이유입니다. CVE-2024-10979(CVSS 8.8)는 권한이 없는 데이터베이스 사용자가 PL/Perl을 통해 PATH를 비롯한 민감한 프로세스 환경 변수를 변경할 수 있게 했으며, 이는 공격자가 해당 시스템에 운영 체제 계정을 가지고 있지 않은 경우에도 임의 코드 실행을 유도하기에 충분한 경우가 많습니다. 이 취약점은 12부터 17까지의 모든 브랜치에 영향을 미쳤기 때문에, 최신 버전을 사용한다고 해서 안전하다고 할 수 없었습니다. PL/Perl은 2026년 8월, CVE-2026-14670(CVSS 8.8)이라는 취약점으로 다시 등장했는데, 이는 바인딩된 해시의 반환 시 발생하는 힙 버퍼 오버플로우로, 함수 소유자가 조작된 함수 본문을 통해 데이터베이스 OS 사용자로 코드를 실행할 수 있게 합니다.
2026년 2월 분은 이 범주를 절차형 언어의 범위를 훨씬 넘어 확장했습니다. CVE-2026-2006(CVSS 8.8)은 핵심 텍스트 처리 과정에서 멀티바이트 문자 길이 검증이 누락된 데서 비롯된 것으로, 일반 데이터베이스 사용자가 조작된 쿼리를 실행하여 버퍼 오버플로우를 유발하고, 결국 OS 사용자 권한으로 코드를 실행하게 됩니다. 이 취약점의 경우 별도의 확장 프로그램이 필요하지 않습니다. CVE-2026-2005(CVSS 8.8)는 pgcrypto의 힙 버퍼 오버플로우로, 암호문을 전달할 수 있는 사용자라면 누구나 접근할 수 있습니다. 이는 겉보기보다 더 심각한 문제인데, pgcrypto는 신뢰되는 확장 모듈이기 때문입니다. 즉, 데이터베이스에 대한 CREATE 권한을 가진 비슈퍼유저도 CREATE EXTENSION을 통해 이를 설치할 수 있습니다. CVE-2026-2004(CVSS 8.8)는 선택성 추정기 입력에 대한 유형 검증이 누락되어 intarray에 영향을 미칩니다. 여기에 PostgreSQL 18에 영향을 미치는 8.2 버전의 pg_trgm 힙 오버플로우인 CVE-2026-2007까지 더하면, 5개의 CVE가 포함된 이번 릴리스에서 4개의 고위험 버그가 발견된 셈이며, 그중 3개는 기여 모듈에서 발생했습니다.
한 가지 주목할 점은, 하나의 CVSS 점수가 하나 이상의 실제 결과를 포괄할 수 있다는 것입니다. 5월 배치에 포함된 CVE-2026-6473은 정수 오버플로우 취약점으로, 권한이 없는 데이터베이스 사용자가 할당된 메모리 크기를 실제보다 작게 설정하여 범위를 벗어난 쓰기 작업을 수행할 수 있게 하는 것으로, CVSS 점수는 8.8점입니다. PostgreSQL 측에 따르면, 이로 인해 데이터베이스 OS 사용자로 임의의 코드가 실행될 수 있으며, 영향을 받는 함수에 기가바이트 규모의 입력을 전달하는 애플리케이션의 경우 입력 제공자에게 세그멘테이션 오류를 발생시킬 수 있다고 합니다. 점수만 보는 것보다 보안 권고문을 직접 읽어보는 것이 더 도움이 됩니다.
심각한 취약점들의 공통된 양상은 데이터베이스 수준의 접근 권한이 은밀하게 호스트 수준의 접근 권한으로 전환되는 것입니다. 이에 대한 방어 전략은 ‘최소 권한 원칙’을 적절히 적용하는 것으로, 이는 함수와 객체를 생성할 수 있는 사용자를 제한하고, 애플리케이션에서 절대 사용하지 않는 확장 기능을 제거하며, 노출되는 공격 표면을 최소화하는 것을 의미합니다. 다만 이러한 조치들을 패치 적용을 대체할 수 있는 것으로 오해해서는 안 됩니다. 왜냐하면 이 중 그 어떤 것도 핵심 텍스트 처리 기능의 메모리 안전성 결함을 막을 수 없기 때문입니다.
접근 제어 및 행 보안 결함
모든 버그가 눈에 띄는 것은 아닙니다. CVE-2024-10976은 행 수준 보안(row-level security)을 사용하는 테이블에 대한 추적이 불완전했기 때문에 발생한 것으로, 재사용된 쿼리 계획이 본래 처리해서는 안 되는 행을 반환하거나 수정하는 결과를 초래할 수 있습니다. 이 문제는 실제로 CREATE POLICY를 사용하는 데이터베이스에만 영향을 미치기 때문에, 어떤 애플리케이션이 해당 기능에 의존하고 있는지 떠올리기 전까지는 쉽게 간과하기 쉽습니다. CVE-2026-14666은 동일한 원리에 기반한 2026년 8월 버전의 취약점으로, 캐시된 행 수준 보안 정책이 역할 멤버십, 역할 속성 및 데이터베이스 소유권 변경보다 오래 유지되기 때문에, 사용자는 방금 전까지만 해도 허용되었으나 이제는 더 이상 허용되지 않는 읽기 및 쓰기 작업을 계속 수행하게 됩니다.
CVE-2024-10978도 이 범주에 속합니다. SET ROLE 또는 SET SESSION AUTHORIZATION을 사용하는 애플리케이션에서는 잘못된 사용자 ID가 쿼리에 적용되어, 권한이 낮은 사용자가 다른 사용자를 대상으로 한 행을 조회하거나 변경할 수 있게 될 수 있습니다. 코드 실행은 아니지만, 다중 테넌트 모델을 은밀하게 무너뜨리는 바로 그런 유형의 문제입니다. 이러한 문제는 눈에 띄지 않는 유형으로, 애플리케이션에 특화되어 있으며 시스템이 다운되지 않기 때문에 간과하기 쉽습니다. 데이터는 그저 뒷문으로 새어 나가는 셈입니다.
CVE-2026-6478 (CVSS 6.5)은 또 다른 유형의 취약점입니다. MD5 해시된 비밀번호를 비교하는 과정에서 발생하는 은밀한 타이밍 채널을 통해 공격자는 인증에 충분한 수준의 자격 증명을 복구할 수 있습니다. 이 취약점은 한동안 지원되는 모든 릴리스에서 기본값으로 사용되어 온 scram-sha-256에는 영향을 미치지 않지만, 여전히 많은 운영 중인 데이터베이스에는 PostgreSQL 13 또는 그 이전 버전에서 업그레이드할 때 물려받은 MD5 해시가 남아 있습니다. 바로 이 데이터베이스들이 실제로 위험에 처해 있습니다. 이 취약점은 14부터 18까지의 버전에 영향을 미치며, 2026년 5월 패치 묶음에서 수정되었습니다.
백업 및 복원 도구
이 사례는 데이터베이스 취약점에 대한 일반적인 인식과 맞지 않는데, 바로 그 이유 때문에 별도의 범주로 분류됩니다.
CVE-2025-8714 및 CVE-2025-8715(둘 다 CVSS 8.8)는 2025년 8월 pg_dump에서 발견되었습니다. CVE-2025-8714는 원본 서버의 악의적인 슈퍼유저가 덤프 파일에 psql 메타 명령을 삽입하도록 허용하며, 이 명령은 복원 과정에서 클라이언트 운영 체제 계정으로 실행됩니다. CVE-2025-8715는 특수하게 조작된 객체 이름 내의 줄 바꿈을 통해 유사한 방식으로 작동하며, 두 취약점 중 더 심각한 것으로 볼 수 있습니다. 슈퍼유저가 아닌 원본 서버의 일반 사용자만으로도 공격이 가능하며, 동일한 공격을 통해 복원 대상 시스템에서 슈퍼유저 권한으로 SQL 인젝션을 수행할 수도 있기 때문입니다. pg_dumpall, pg_restore 및 pg_upgrade가 모두 이 취약점의 적용 대상입니다. CVE-2012-0868을 통해 이미 한 번 이 유형의 버그가 수정된 바 있으나, 11.20 버전에서 이 문제가 조용히 재발생했습니다.
그러자 이 수정 사항 자체도 다시 수정해야 하는 상황이 발생했습니다. CVE-2026-18408(CVSS 8.8, 2026년 8월)은 CVE-2025-8714를 해결하기 위해 도입된 \restrict 보호 기능을 우회하는 또 다른 입력 확장 경로를 발견했으며, \unrestrict만으로도 원래의 복원 시점 공격이 다시 작동하게 만들기에 충분했습니다. 5월 패치에서는 이미 CVE-2026-6477(CVSS 8.8)이 추가된 상태였는데, 이 취약점은 서버 슈퍼유저가 libpq의 lo_read()를 통해 psql 또는 pg_dump의 스택 메모리를 덮어쓰는 방식입니다.
CVE-2026-6475 (CVSS 8.8)은 이 취약점의 범위를 pg_basebackup 및 pg_rewind로 확장합니다. 여기서 심볼릭 링크 추적(symlink following)을 통해 원본 슈퍼유저가 /var/lib/postgres/.bashrc와 같은 관련 없는 로컬 파일을 덮어쓰고, 운영 체제 계정을 탈취할 수 있습니다. PostgreSQL은 이 취약점에 대해 신중하게 적용 범위를 제한하고 있으며, 사용자도 마찬가지로 주의해야 합니다. 해당 명령어를 실행한 후 서버를 시작하면 shared_preload_libraries와 같은 메커니즘을 통해 원본 슈퍼유저가 암묵적으로 신뢰되므로, 실질적인 위험은 서버가 시작되기 전에 생성된 파일을 이동, 스냅샷 생성 또는 기타 방식으로 처리하는 워크플로우에서 발생합니다.
이 섹션 전체를 관통하는 핵심은, 공격 표면이 애플리케이션이나 연결 풀이 아니라 백업 작업이라는 점입니다. 백업 작업은 대개 높은 권한으로 실행되지만, 주요 데이터베이스 구성만큼 철저한 검토를 받는 경우는 드뭅니다. 또한 이러한 CVE 중 상당수가 클라이언트 측에 속한다는 점도 상기시켜 줍니다. PostgreSQL은 이를 클라이언트 구성 요소로 분류하며, 서버에 패치를 적용한다고 해서 이 문제들이 해결되지는 않습니다. psql, pg_dump, pg_basebackup 및 pg_createsubscriber를 실행하는 시스템 자체에 패치를 적용해야 합니다.
| CVE | 공개됨 | CVSS | 구성 요소 | 영향 | 영향을 미침 | 수정된 릴리스 |
| 18408 | 2026년 8월 | 8.8 | psql 및 pg_dump | \unrestrict로 인해 CVE-2025-8714 복원 공격이 다시 발생하게 됩니다 | 14-18 | 18.6, 17.11, 16.15, 15.19, 14.24 |
| 15741 | 2026년 8월 | 8.8 | 코어 서버 | EXTRACT() 디파싱을 통한 SQL 인젝션 | 14-18 | 18.6, 17.11, 16.15, 15.19, 14.24 |
| 14670 | 2026년 8월 | 8.8 | 코어 서버 (PL/Perl) | 동등한 해시 힙 오버플로우로 인해 임의의 코드가 실행됨 | 14-18 | 18.6, 17.11, 16.15, 15.19, 14.24 |
| 14666 | 2026년 8월 | 4.2 | 코어 서버 | 캐시된 행 보안 정책은 역할 변경 후에도 유지됩니다 | 14-18 | 18.6, 17.11, 16.15, 15.19, 14.24 |
| 6637 | 5월 2026 | 8.8 | refint 기여 | 스택 버퍼 오버플로우와 별도의 SQL 인젝션 경로 | 14-18 | 18.4, 17.10, 16.14, 15.18, 14.23 |
| 6477 | 5월 2026 | 8.8 | libpq, psql, pg_dump | 서버 슈퍼유저가 클라이언트 스택 메모리를 덮어씁니다 | 14-18 | 18.4, 17.10, 16.14, 15.18, 14.23 |
| 6475 | 5월 2026 | 8.8 | pg_basebackup, pg_rewind | 다음과 같은 심볼릭 링크를 통한 임의 파일 덮어쓰기 | 14-18 | 18.4, 17.10, 16.14, 15.18, 14.23 |
| 6473 | 5월 2026 | 8.8 | 코어 서버 | 범위 외 쓰기, 임의 코드 실행 가능성 | 14-18 | 18.4, 17.10, 16.14, 15.18, 14.23 |
| 6478 | 5월 2026 | 6.5 | 코어 서버 | 타이밍 채널을 통해 MD5 비밀번호 해시 복원이 가능 | 14-18 | 18.4, 17.10, 16.14, 15.18, 14.23 |
| 6638 | 5월 2026 | 3.7 | 코어 서버 | REFRESH PUBLICATION 테이블 이름을 통한 SQL 인젝션 | 16-18 | 18.4, 17.10, 16.14 |
| 2006 | 2026년 2월 | 8.8 | 코어 서버 | 멀티바이트 유효성 검사 누락으로 인해 임의의 코드가 실행됨 | 14-18 | 18.2, 17.8, 16.12, 15.16, 14.21 |
| 2005 | 2026년 2월 | 8.8 | pgcrypto 기여 | 힙 버퍼 오버플로우로 인해 임의의 코드가 실행됩니다. | 14-18 | 18.2, 17.8, 16.12, 15.16, 14.21 |
| 2004 | 2026년 2월 | 8.8 | intarray contrib | 유형 유효성 검사 누락으로 인해 임의의 코드가 실행됨 | 14-18 | 18.2, 17.8, 16.12, 15.16, 14.21 |
| 2007 | 2026년 2월 | 8.2 | pg_trgm contrib | 힙 버퍼 오버플로우, 권한 상승 가능성 배제할 수 없음 | 18 | 18.2 |
| 8715 | 2025년 8월 | 8.8 | pg_dump 및 psql | 객체 이름에 포함된 줄바꿈 문자가 코드를 실행하고 SQL을 삽입합니다. | 13-17 | 17.6, 16.10, 15.14, 14.19, 13.22 |
| 8714 | 2025년 8월 | 8.8 | pg_dump 및 psql | Origin 슈퍼유저가 클라이언트에서 임의의 코드를 실행합니다 | 13-17 | 17.6, 16.10, 15.14, 14.19, 13.22 |
| 1094 | 2025년 2월 | 8.1 | 코어 서버, libpq 따옴표 처리 | 인코딩 유효성 검사 우회를 통한 SQL 인젝션 | 13-17 | 17.3, 16.7, 15.11, 14.16, 13.19 |
| 10979 | 2024년 11월 | 8.8 | 코어 서버 (PL/Perl) | 환경 변수 변경으로 인해 임의의 코드가 실행됩니다. | 12-17 | 17.1, 16.5, 15.9, 14.14, 13.17, 12.21 |
| 10978 | 2024년 11월 | 4.2 | 코어 서버 | SET ROLE이 잘못된 사용자 ID로 재설정됩니다. | 12-17 | 17.1, 16.5, 15.9, 14.14, 13.17, 12.21 |
| 10976 | 2024년 11월 | 4.2 | 코어 서버 | 행 보안은 사용자 ID 변경을 고려하지 않습니다 | 12-17 | 17.1, 16.5, 15.9, 14.14, 13.17, 12.21 |
PostgreSQL 취약점을 해결하지 않을 경우의 위험
이건 “다음 스프린트에 처리하자”는 식의 결정이 아닙니다. 이로 인해 발생할 수 있는 문제점은 사소한 데이터 유출에서부터 호스트가 완전히 탈취되는 상황까지 다양합니다.
실제 금전적 손실을 초래하는 보안 침해
다음 2026년 IBM 데이터 유출 비용 보고서 에 따르면 전 세계 평균 비용은 499만 달러로, 이는 사상 최고치이자 전년 대비 12% 증가한 수치이며, 이 증가분의 대부분은 침해 탐지, 상황 악화 및 영업 손실에서 비롯된 것으로 나타났다. 패치 적용 주기가 느린 조직이라면 누구나 우려해야 할 수치는 바로 ‘시간’이다. 침해 사고를 파악하고 차단하는 데 걸리는 평균 시간은 247일로 늘어났으며, 이는 5년 연속 개선되던 추세를 뒤집은 것이다. 또한 200일을 넘긴 침해 사고는 조기에 해결된 사고보다 약 3분의 1 더 많은 비용을 초래했다.
예방, 탐지, 조사 및 대응 전 단계에 걸쳐 AI와 자동화 기술을 도입한 조직은 이를 도입하지 않은 조직에 비해 보안 침해 사고를 약 2개월 더 빨리 해결했으며, 비용도 193만 달러를 절감했습니다. 이러한 사실들은 취약점 관리, 즉 누군가가 그 허점을 악용하기 전에 취약점을 찾아내고 해결하는 업무에 자동화 기술을 적용해야 한다는 주장을 뒷받침해 줍니다.
단순한 데이터 유실만이 아닌, 서버 전체의 침해
CVE-2025-1094는 미국 재무부를 대상으로 한 대규모 공격에서 제로데이 취약점으로 악용되었던 BeyondTrust의 취약점 CVE-2024-12356과 직접적으로 연관되어 있습니다. Rapid7이 테스트한 모든 시나리오에서, BeyondTrust의 취약점을 성공적으로 악용하기 위해서는 CVE-2025-1094를 악용하여 원격 코드 실행. 일단 누군가가 데이터베이스 호스트에서 셸 명령을 실행하게 되면, 데이터베이스 자체는 더 이상 가장 큰 걱정거리가 아닙니다. 나머지 리눅스 시스템 전반에 걸친 횡방향 이동이 가능해지기 때문입니다.
다른 제품에 번들로 포함된 PostgreSQL을 운영하는 팀들은 종종 자신들이 보안 위협에 노출되어 있다는 사실조차 깨닫지 못합니다. PostgreSQL은 수많은 타사 소프트웨어의 종속성으로 제공되는데, CVE가 공개되면 자신도 모르게 가지고 있던 데이터베이스에 패치를 적용해야 하는 상황에 처할 수 있습니다.
패치가 적용되지 않은 EOL 버전을 실행하기
메이저 버전이 지원 종료(EOL)에 도달하면, 업스트림에서는 해당 버전에 대한 보안 패치 제공을 중단합니다. 새로운 CVE가 발견되는 것은 멈추지 않지만, 해당 브랜치에서는 더 이상 수정되지 않을 뿐입니다. 위에서 언급한 2026개의 버그 중 상당수는 14부터 18까지의 모든 지원 대상 브랜치에 영향을 미치며, 특히 PostgreSQL 14는 2026년 11월 12일부터 더 이상 패치를 제공받지 못하게 되므로, 현재 지원 중인 버전의 문제도 다음 분기에는 해결되지 않을 수 있습니다. PostgreSQL 13을 사용 중이라면, 이 권고 사항에 해당 버전이 포함되지 않을 뿐만 아니라 어쨌든 업스트림으로부터 수정 패치를 받을 수 없습니다.
바로 이것이 TuxCare의 Endless Lifecycle Support 가 바로 이를 위해 마련되었습니다. 이 서비스는 PostgreSQL 13용 CVE 수정 사항을 역포트하여 일반적인 패키지 관리자를 통해 적용해 주며, PostgreSQL 14에 대한 지원은 지원 종료(EOL)일 이전에 미리 공지되므로, 사용자는 현재 패치를 유지한 채로 실제 로드맵에 맞는 시점에 지원되는 버전으로 전환할 수 있습니다.
PostgreSQL 취약점으로부터 시스템을 보호하는 방법
PostgreSQL의 보안을 확보하는 것은 주로 철저한 관행에 달려 있으며, 일회성 과감한 조치가 아닙니다. 세 가지 습관만으로도 실질적인 위험의 상당 부분을 해결할 수 있습니다.
패치를 즉시 적용하고 CVE를 추적하십시오
PostgreSQL은 지원되는 모든 브랜치에 걸쳐 조정된 보안 업데이트를 한 번에 배포합니다. 2024년 11월 배치에서는 CVE-2024-10979 및 관련 취약점들을 17.1, 16.5, 15.9, 14.14, 13.17, 12.21 버전에서 같은 날에 수정했습니다. 2026년 5월 배치에서는 18.4, 17.10, 16.14, 15.18 및 14.23 버전에 11개의 수정 사항이 동시에 적용되었으며, 8월 13일 배치에서는 18.6, 17.11, 16.15, 15.19 및 14.24 버전에 28개의 수정 사항이 적용되었습니다. 보안 권고 사항을 구독하고, 마이너 버전 업데이트를 별도의 사업 타당성 검토가 필요한 프로젝트가 아닌 일상적인 유지보수 작업으로 취급하십시오.
전문가 팁: 소버전 업그레이드 후에는 다음 명령을 실행하세요. SELECT version(); 를 실행하여 서버가 예상한 릴리스 버전인지 실제로 확인하세요. 정상적으로 업그레이드되었지만 서비스를 재시작하지 않은 패키지는 계속해서 이전 버전을 보고할 수 있습니다. 그런 다음 클라이언트 측도 별도로 확인하세요. 왜냐하면 SELECT version() 는 해당 프로그램을 실행하는 시스템의 psql, pg_dump, pg_basebackup 또는 libpq에 대해서는 아무런 정보를 제공하지 않습니다. PostgreSQL 18에 특정한 주의 사항 하나: 18.5는 묶음 작업(wrap) 후 회귀 오류가 발견되어 출시되지 않았기 때문에, 8월 릴리스는 18.4에서 바로 18.6으로 넘어갑니다.
권한 및 확장 기능 생성에 대한 제한
여전히 많은 PostgreSQL 공격 경로는 데이터베이스 수준의 권한, 객체 생성 권한, 또는 특정 확장 기능에 대한 접근을 통해 이루어지기 때문에, 최소 권한 원칙은 여전히 그 가치를 인정받고 있습니다. PL/Perl 및 PL/Python에서 함수를 생성할 수 있는 사용자를 제한하고, 아무도 사용하지 않는 확장 기능은 삭제하며, 전반적으로 역할(role) 권한을 엄격하게 관리해야 합니다.
최근 refint, pgcrypto, intarray 및 pg_trgm에서 발견된 버그들은 해당 확장 기능 목록을 다음 분기가 아닌 이번 주에 검토해야 할 타당한 근거가 됩니다. 이러한 제한 조치들은 CVE-2024-10979의 공격 경로를 차단하고 다른 여러 경로도 좁혔을 것이지만, 코어 텍스트 처리 기능의 메모리 안전성 버그를 막을 수는 없으므로, 패치 작업을 대체하기보다는 패치와 병행하여 적용되어야 합니다.
입력값 검증 및 매개변수화된 쿼리 사용
탈출은 최후의 수단일 뿐, 그 자체로 전략이 될 수는 없습니다. 신뢰할 수 없는 입력에서 값이 들어오는 곳에서는 어디서나 매개변수화된 쿼리를 사용하여, 해당 입력이 실행 가능한 SQL이 될 기회를 절대 주지 않도록 해야 합니다. 매개변수로 바인딩할 수 없는 문장 부분, 즉 식별자, 테이블 이름, 정렬 방향 및 그 밖의 구조적 요소에 대해서는 대신 엄격한 허용 목록 방식을 적용하십시오. 이 두 가지 방법을 모두 에지에서의 유효성 검사와 병행해야 합니다.
PostgreSQL 취약점을 방지하기 위한 모범 사례
이러한 제어 수단은 개별 공격 경로를 차단합니다. 다음 단계는 문제 발견 및 해결 과정을 체계화하여, 누군가가 이를 악용하기 전에 문제를 파악하고 해결하는 것입니다.
지속적인 취약점 스캔 실행
보이지 않는 문제는 패치할 수 없는데, 번들로 제공되는 PostgreSQL 인스턴스는 심지어 이를 운영하는 사람조차 알아채기 어려울 정도로 잘 숨겨져 있습니다. 분기별로 스캔하는 대신 지속적으로 스캔하여, 새로운 CVE가 다음 감사 시점이 아니라 몇 시간 내에 레이더에 포착되도록 하세요. 스캐너가 무언가를 탐지했을 때는 당황하기 전에 실제 문제인지 확인하세요. 오탐을 쫓는 데 시간을 낭비하면 그 시간은 다시는 되찾을 수 없기 때문입니다.
패치 작업을 자동화하고 전체 스택을 포괄하세요
패치 작업에서 시간이 오래 걸리는 부분은 대개 수정 사항을 찾는 것이 아니라 유지보수 시간대입니다. 자동화된 패치 적용은 은 취약점 공개와 배포 사이의 간격을 줄여줍니다. 이 기간은 수정 프로그램이 이미 제공되었음에도 불구하고 알려진 취약점이 여전히 악용될 수 있는 기간을 의미합니다. 또한, TuxCare가 지원 대상인 EOL(지원 종료) PostgreSQL 릴리스와 함께 지원 대상인 직접 및 전이적 종속성에 대한 보안 수정 프로그램을 역포팅(backport)하므로, 지원이 종료된 버전도 계속해서 패치를 받을 수 있게 됩니다.
알아두면 좋은 팁: SLA 기간은 누군가가 우연히 취약점을 발견한 날짜가 아니라 CVE 공개일을 기준으로 설정하세요. 인터넷에 노출된 취약점은 공개 권고가 나온 직후부터 스캔 및 악용 시도가 집중되는 경향이 있으므로, 해당 시점이 바로 SLA 기간의 시작점이 되어야 합니다.
하든 구성 및 로그 모니터링
기본 설정은 시작점일 뿐, 완성된 구성이 아닙니다. 클라이언트 연결에 TLS를 강제 적용하고, 포괄적인 항목을 그대로 두지 말고 실제로 액세스가 필요한 데이터베이스, 역할, 네트워크 및 인증 방법을 명시하는 pg_hba.conf 규칙을 작성하십시오. 사용하지 않는 contrib 확장 기능은 제거하거나 설치를 건너뛰고, 로그를 주시하여 이상한 SQL 오류나 반복되는 인젝션 유형의 오류가 발생하는지 확인하십시오. 최근 버그 중 상당수가 특히 contrib에 집중되어 있다는 점을 고려할 때, 해당 목록을 정리하는 작업은 다음 정기 검토 시기가 아니라 지금 당장 수행하는 것이 좋습니다.
TuxCare를 통해 PostgreSQL을 취약점 악용으로부터 보호하세요
PostgreSQL의 취약점은 관리할 수 있지만, 이는 제때 패치를 적용하고 보안 지원이 종료된 버전을 보안 조치가 없는 상태로 운영 환경에 방치하지 않는 경우에만 가능합니다. PostgreSQL 13은 2025년 11월 13일에 커뮤니티 지원 종료 시점을 맞이하여 더 이상 공식 CVE 수정 프로그램을 제공받지 않으며, PostgreSQL 14도 2026년 11월 12일에 지원이 종료됩니다.
두 가지 중 하나라도 스택에 남아 있다면, TuxCare의 ‘Endless Lifecycle Support’는 가 해당 수정 사항을 자동으로 백포트하여, 별도의 패치 작업 흐름이 아닌 일반적인 패키지 관리자 업데이트를 통해 적용해 줍니다. 따라서 보안 취약점에 노출된 상태를 유지할지, 아니면 타인의 일정에 맞춰 마이그레이션할지 고민할 필요가 없습니다. 먼저 PostgreSQL 배포 환경의 실제 상태를 확인한 후, 패치 적용 범위의 공백을 메우십시오.





