
PostgreSQL(오픈소스 관계형 데이터베이스)에서 2014년부터 존재해 온 12년 된 보안 취약점(CVE-2026-6471)이 발견되어 패치가 배포되었습니다. REPLICATION(복제) 권한을 가진 계정이 데이터베이스 서버를 운영 중인 운영체제 사용자(postgres) 권한으로 임의 코드를 실행할 수 있으며, 백업 도구·CDC 파이프라인·모니터링 시스템처럼 해당 권한을 일상적으로 사용하는 시스템이 모두 잠재적 피해 대상입니다. 공격에 성공하면 PostgreSQL 슈퍼유저 권한 탈취와 서버 재시작 후에도 살아남는 지속성 메커니즘 설치까지 가능합니다. PostgreSQL 18.6, 17.11, 16.15, 15.19, 14.24 버전으로 즉시 업데이트하고, 비기본 출력 플러그인(wal2json, decoderbufs 등)을 사용하는 경우 `output_plugin_libraries` 설정을 반드시 조정해야 합니다. 패치 적용 전에는 불필요한 REPLICATION 속성 제거, pg_hba.conf 접근 제한, SMB·NFS 아웃바운드 트래픽 차단으로 노출을 최소화할 수 있습니다.
PostgreSQL 논리 디코딩(logical decoding) 경로에서 플러그인 라이브러리 로딩 시 경로 제한이 적용되지 않는 취약점(CVE-2026-6471, CVSS 7.2)이 공개되었으며, 2014년 PostgreSQL 9.4에서 논리 디코딩 기능이 도입된 이래 12년간 존재해 왔다.
REPLICATION 권한 계정을 통해 공격자가 데이터베이스 서버 OS 사용자(postgres) 권한으로 임의 코드를 실행할 수 있으며, PostgreSQL 슈퍼유저 권한 탈취 및 서버 재시작 후에도 유지되는 3가지 지속성 메커니즘 설치가 실증되었다.
CREATE_REPLICATION_SLOT 명령에 전달되는 플러그인 이름이 라이브러리 로더에 그대로 넘어가며, 복제 경로에서는 비슈퍼유저에게 적용되는 경로 제한이 호출되지 않아 ../를 포함한 전체 파일시스템 경로나 Windows에서는 SMB 네트워크 경로까지 로더에 전달되었다.
PostgreSQL 18.6/17.11/16.15/15.19/14.24 패치 배포(2026년 8월 13일); output_plugin_libraries 서버 파라미터를 통한 허용 플러그인 화이트리스트 도입; Amazon RDS, Debian, SUSE, Ubuntu 패키지 제공.
업데이트 전 'SELECT DISTINCT plugin FROM pg_replication_slots WHERE plugin IS NOT NULL;'으로 현재 사용 중인 플러그인을 먼저 확인해야 한다. wal2json·decoderbufs 등 비기본 플러그인은 output_plugin_libraries에 수동으로 추가하고 pg_reload_conf()를 실행해야 하며, 재시작 없이 적용된다. pg_createsubscriber의 --dry-run 우회 버그는 아직 미해결 상태로 주의가 필요하다.
본문
PostgreSQL이 REPLICATION 속성을 가진 계정이 데이터베이스 서버를 실행 중인 운영체제 사용자로 임의 코드를 실행할 수 있게 하는 보안 결함을 해결하는 업데이트를 배포했습니다.
CVE-2026-6471(CVSS 점수: 7.2)로 추적되는 이 결함은 2014년 PostgreSQL 9.4에서 논리 디코딩(logical decoding)이 도입된 이래 존재해 왔습니다. PostgreSQL 18.6, 17.11, 16.15, 15.19, 14.24 이전 버전이 영향을 받습니다.
악용하려면 REPLICATION 속성을 가진 계정과 wal_level = logical로 실행 중인 서버가 필요합니다. 백업 도구, 스탠바이 서버, CDC(변경 데이터 캡처) 파이프라인, 모니터링 시스템은 해당 속성을 일상적으로 보유합니다.
8월 13일에 배포된 수정 사항은 논리 디코딩 출력 플러그인으로 로딩할 수 있는 라이브러리를 나열하는 output_plugin_libraries라는 서버 파라미터를 추가하며, 기본값은 'pgoutput, test_decoding'입니다.
wal2json, decoderbufs 등 다른 출력 플러그인을 사용하는 설치 환경은 업데이트 후 관리자가 해당 라이브러리를 목록에 추가하고 서버 설정을 리로드하기 전까지 논리 디코딩이 거부됩니다.
PostgreSQL Global Development Group은 18.6 릴리스 노트에서 다음과 같이 밝혔습니다. "기존에는 복제 사용자가 논리 디코딩에 임의의 로드 가능한 라이브러리를 선택할 수 있어 다양한 방식의 악용이 가능했습니다. 기존에 정상 동작하던 설정을 깨지 않으면서 이를 잠글 수 있도록, 허용된 출력 플러그인의 화이트리스트를 도입합니다."
PostgreSQL 프로젝트는 이 문제를 보고한 Vladimir Tokarev와 Yu Kunpeng에게 공을 돌렸습니다.
Tokarev는 9월 1일 데이터 보안 기업 Cyera Research의 분석 문서에서 이 결함을 PostGREShell이라고 명명하며 상세히 설명했습니다.
Cyera에 따르면 CREATE_REPLICATION_SLOT 명령에 전달되는 플러그인 이름은 라이브러리를 로드하는 함수에 그대로 전달됩니다.
비슈퍼유저를 관리자가 제어하는 단일 디렉터리로 제한하는 PostgreSQL의 기존 플러그인 경로 제한은 복제 경로에서는 호출되지 않습니다. 복제 프로토콜 파서는 큰따옴표로 묶인 플러그인 이름 안에 경로 구분자와 ../ 디렉터리 탐색을 포함한 거의 모든 문자를 허용하므로, 전체 파일시스템 경로가 그대로 로더에 전달됩니다.
Windows에서 서버는 SMB(Server Message Block)를 통해 네트워크 경로를 처리하고 공격자가 제어하는 머신에서 라이브러리를 가져오는데, 이때 대상 시스템에 아무것도 쓰지 않아도 됩니다. Cyera는 이같이 밝혔습니다.
Linux와 macOS에서는 동일한 결과를 위해 NFS(Network File System) 자동 마운트(automounting)를 활성화해야 합니다. 그 외 환경에서는 공격자가 서버 디스크에 파일을 쓸 수 있는 기존 방법이 필요합니다. 이렇게 로드된 코드는 postgres 운영체제 사용자로 데이터베이스 백엔드 프로세스 내에서 실행됩니다.
Cyera의 테스트 플러그인은 역할 카탈로그를 직접 수정해 복제 계정을 PostgreSQL 슈퍼유저로 만들었습니다. 또한 서버 재시작 후에도 살아남는 3가지 지속성 메커니즘을 설치했습니다.
Cyera는 REPLICATION 속성을 낮은 권한의 백업 자격증명으로 설명했지만, PostgreSQL은 Privileges Required를 High로 설정해 이 결함을 점수화했으며, SUSE의 자체 평가에서도 동일하게 재현되었습니다.
PostgreSQL은 기존의 LOAD 제한을 복제 경로에 적용하는 방안을 거부했습니다.
수정 사항을 작성한 Jacob Champion은 커밋 메시지에서 다음과 같이 밝혔습니다. "REPLICATION 사용자는 이전에 출력 플러그인 경로에 대한 제한을 받지 않았으므로, 논리 디코딩 중 LOAD 시점 보호를 우회할 수 있었습니다. 안타깝게도 지금 표준 LOAD 제한을 추가하면 모든 서드파티 출력 플러그인이 $libdir/plugins 디렉터리 아래에 설치되도록 소급 적용이 필요해집니다."
파라미터 문서에 따르면 로딩 실패 시 서버 로그에 ERROR: library "..." may not be used as an output plugin이 표시되며, 해당 설정을 안내하는 힌트도 함께 출력됩니다.
관리자에게는 다음 조치를 취할 것이 권고됩니다:
- 업데이트 전에
SELECT DISTINCT plugin FROM pg_replication_slots WHERE plugin IS NOT NULL;을 실행해 사용 중인 출력 플러그인을 확인합니다. 이 쿼리는 어느 시점에 성공적으로 사용된 플러그인만 표시합니다. - 18.6, 17.11, 16.15, 15.19, 또는 14.24 버전이나 동등한 배포판 패키지로 업데이트합니다.
- 비기본 플러그인을
output_plugin_libraries에 추가하고pg_ctl reload또는SELECT pg_reload_conf()로 설정을 리로드합니다. 재시작은 필요하지 않습니다. - 버전 17 이상에서 마이그레이션 시
pg_upgrade --check를 실행하기 전에 새 클러스터의output_plugin_libraries를 설정합니다. 목록이 기존 클러스터의 슬롯 플러그인을 허용하지 않으면 검사가 실패합니다.
수정 패키지는 5개 브랜치 모두에 대해 Amazon RDS와 Debian, SUSE, Ubuntu에서 제공됩니다.
PostgreSQL의 보안 권고는 지원 브랜치 14~18을 다루며 이전 버전은 해당하지 않습니다. PostgreSQL 14는 2026년 11월 12일에 수정 지원이 종료된다고 프로젝트는 릴리스 공지에서 밝혔습니다.
Debian의 권고는 업스트림 수정이 "일부 확장 사용 시 추가 설정 변경이 필요하다"고 경고하며 wal2json과 decoderbufs 패키지를 명시했습니다.
8월 20일에 22.04, 24.04, 26.04 LTS용 수정을 배포한 Ubuntu의 USN-8653-1은 해당 파라미터에 대한 언급 없이 업데이트 후 PostgreSQL을 재시작하라고만 안내합니다.
9월 4일 기준으로 wal2json 프로젝트는 CVE를 인용하며 사용자에게 output_plugin_libraries에 플러그인을 추가하도록 문서를 업데이트했습니다.
수정 사항에는 아직 열려 있는 허점이 있습니다. pg_createsubscriber가 새 파라미터를 확인하지 않고 pgoutput을 사용해 복제 슬롯을 생성하므로, --dry-run은 성공하지만 실제 변환은 실패합니다.
후지쯔의 Hayato Kuroda는 pgsql-hackers 메일링 리스트에 올린 메시지에서 다음과 같이 말했습니다. "pg_createsubscriber 명령이 GUC를 확인하지 않고 플러그인 pgoutput으로 복제 슬롯을 생성합니다. 이로 인해 파라미터에 플러그인 이름이 지정되지 않은 경우 --dry-run 모드는 통과하지만 실제 변환은 실패합니다. 이는 사용자에게 매우 당혹스러운 상황이며 반드시 수정되어야 합니다."
패치는 검토 중이었으며 9월 4일 기준으로 아직 커밋되지 않은 상태였습니다. CVE-2026-6471는 9월 4일 기준으로 CISA의 알려진 악용 취약점(KEV) 카탈로그에 등재되지 않은 상태였습니다.
The Hacker News는 같은 날 공개 저장소에서 개념 증명(PoC) 코드를 찾지 못했습니다.
업데이트를 적용하기 전까지는 Cyera의 권고에 따라 REPLICATION 속성이 필요하지 않은 계정에서 해당 속성을 제거하고, pg_hba.conf의 복제 항목을 알려진 주소로만 제한하며, 데이터베이스 서버에서 SMB(포트 445) 및 NFS(포트 2049) 아웃바운드 트래픽을 차단하고, 필요하지 않은 곳에서는 autofs를 비활성화하는 방식으로 노출을 줄일 수 있습니다.
관련 투런 솔루션
이 뉴스의 취약점·위협, 투런 솔루션으로 대응하세요.






