CVE-2026-17346 in pgAdmin
요약
\~에 의해 VulDB • 2026. 07. 31.
CVE-2026-12044의 수정 사항에서 pgAdmin 4 9.16은 qtLiteral을 강화하고 COMMENT ON / pgstattuple / pgstatindex 템플릿 16개를 해당 방식으로 전환했지만, 브라우저 트리를 통해 pg_catalog에서 소스를 가져온 스키마, 테이블, 게시물 및 구독 이름에는 아포스트로피가 절대 포함될 수 없다는 잘못된 가정 하에 test_sql_string_literal_lint.py의 ALLOWLIST에 배치된 여러 싱크를 누락했습니다. PostgreSQL은 인용된 식별자 내에서 임의의 문자를 허용하므로, CREATE TABLE, CREATE PUBLICATION 또는 CREATE SUBSCRIPTION을 수행할 수 있는 낮은 권한 사용자는 아포스트로피가 포함된 객체 이름을 심어둘 수 있으며, 이는 다른 모든 사용자(더 높은 권한을 가진 사용자 포함)가 해당 객체의 Statistics 또는 Dependencies 탭을 열 때 즉시 비처리된 '{{ name }}' 템플릿 보간에서 벗어나 임의의 SQL 문 주입을 허용합니다.
영향을 받는 싱크: 전체 인덱스 목록에 대한 Index Statistics 쿼리(coll_stats.sql, 16_plus 및 기본 PostgreSQL 버전 템플릿 변형 모두 -- CVE-2026-12044에서 이미 수정된 단일 인덱스 stats.sql 경로와 다름) 및 게시물 및 구독 dependencies.sql / get_position.sql 템플릿(게시물에 대한 pg 및 ppas/EPAS 구문 변형 모두).
수정 사항에서는 이름 보간에 대해 모든 템플릿을 qtLiteral(conn)으로 전환하고, publications/__init__.py 및 subscriptions/__init__.py를 업데이트하여 dependencies.sql render_template 호출 시 conn=self.conn를 전달하도록 하여 qtLiteral 필터가 인용 대상 연결을 가질 수 있도록 합니다. 이제 이러한 싱크들이 단순히 안전하다고 가정되는 것이 아니라 적절하게 이스케이프 처리되므로 test_sql_string_literal_lint.py의 해당 ALLOWLIST 항목이 제거됩니다. 동작적 회귀 테스트는 각 수정된 템플릿에 스택드 문 아포스트로피 페이로드를 렌더링하고, 객체 이름이 qtLiteral-이스케이프된 대로 정확히 나타나는지 및 렌더링된 SQL이 정확히 하나의 문으로 구문 분석되는지를 확인하여 이 주장이 패치 전 원시 보간 형태에 대해 실제로 실패함을 검증합니다.
본 이슈는 pgAdmin 4의 Index Statistics 싱크(1.0부터)와 Publications/Subscriptions 싱크(5.0부터), 모두 9.17 이전 버전에 영향을 미칩니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.