🇰🇷 한글 설명
psqlODBC의 업데이트 가능한 커서(기본 활성화)는 쿼리에 숨겨진 ctid 및 OID 컬럼을 추가하며, 서버가 보낸 길이를 검증하지 않고 32바이트 스택 버퍼에 복사합니다. 이로 인해 32바이트 이상의 값이 전달되면 버퍼 오버플로우가 발생하며, 18.00.0006 이전 버전이 영향을 받습니다.
💡 쉬운 설명
데이터베이스 드라이버가 받은 데이터의 크기를 확인하지 않아 메모리가 넘쳐 쓰이는 취약점입니다. 악의적인 서버나 특정 권한을 가진 데이터베이스 사용자가 이를 악용할 수 있습니다.
🇺🇸 원문 (English)
For updatable cursors, which are enabled by default, psqlODBC adds hidden ctid and, for tables with OIDs, oid columns to the query. It copies each value into a 32-byte stack buffer using the length the server sent, without checking it against the buffer size, so a value of 32 bytes or more writes past the buffer. A server not trusted under current SSL settings can send such a value. So can any database user who can create a view with its own column named ctid that the application reads with an updatable cursor. Builds with _FORTIFY_SOURCE abort; other builds overwrite adjacent stack memory. Versions before psqlODBC 18.00.0006 are affected.
📍 영향받는 시스템
psqlODBC 18.00.0006 미만 버전 (PostgreSQL ODBC 드라이버를 사용하는 모든 애플리케이션)
⚔️ 공격 벡터
신뢰할 수 없는 서버가 긴 ctid/oid 값을 전송하거나, ctid 컬럼을 가진 뷰를 생성할 수 있는 DB 사용자가 업데이트 가능한 커서를 통해 오버플로우를 유발
🛡️ 대응 방법
psqlODBC를 18.00.0006 이상 버전으로 업데이트하고, 필요 시 업데이트 가능한 커서 기능을 비활성화
🔧 검증 코드
출력된 psqlODBC 버전이 18.00.0006 미만이면 취약하며, 이상이면 패치가 적용된 것입니다 (설치 정보가 없으면 드라이버가 설치되지 않은 것).
odbcinst -j 2>/dev/null; dpkg -l | grep -i psqlodbc 2>/dev/null; rpm -qa | grep -i psqlodbc 2>/dev/null
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
💻 영향받는 소프트웨어
IBM WebSphere Application Server