🇰🇷 한글 설명
PostgreSQL 10.x(10.1 이전), 9.6.x(9.6.6 이전), 9.5.x(9.5.10 이전)의 INSERT ... ON CONFLICT DO UPDATE 명령어가 권한 없는 테이블 내용을 공개하는 취약점입니다. 공격자가 SELECT 권한은 없지만 INSERT와 UPDATE 권한을 가진 테이블에서 행 수준 보안(RLS) 정책을 우회하여 민감한 데이터를 읽을 수 있습니다.
💡 쉬운 설명
PostgreSQL 데이터베이스에서 특정 권한이 없는 사람이 INSERT/UPDATE 권한을 이용해 비공개 데이터를 읽을 수 있는 보안 허점입니다. 데이터베이스의 보안 규칙을 우회해서 민감한 정보가 노출될 수 있습니다.
🇺🇸 원문 (English)
INSERT ... ON CONFLICT DO UPDATE commands in PostgreSQL 10.x before 10.1, 9.6.x before 9.6.6, and 9.5.x before 9.5.10 disclose table contents that the invoker lacks privilege to read. These exploits affect only tables where the attacker lacks full read access but has both INSERT and UPDATE privileges. Exploits bypass row level security policies and lack of SELECT privilege.
📍 영향받는 시스템
PostgreSQL 10.0 미만, 9.6.0-9.6.5, 9.5.0-9.5.9
⚔️ 공격 벡터
INSERT ... ON CONFLICT DO UPDATE 문법과 UPDATE 트리거를 이용해 RETURNING 절을 통해 읽을 권한 없는 행 데이터 추출
🛡️ 대응 방법
PostgreSQL을 안전한 버전으로 업그레이드 (10.1+, 9.6.6+, 9.5.10+)
🔧 검증 코드
반환된 PostgreSQL 버전이 10.1 이상, 또는 9.6.6 이상, 또는 9.5.10 이상이면 안전함
SELECT version(); | grep -oE '[0-9]+\.[0-9]+' | head -1