🇰🇷 한글 설명
pgx는 Go 기반 PostgreSQL 드라이버인데, 단일 쿼리나 바인드 메시지가 4GB를 초과할 때 정수 오버플로우가 발생하여 SQL injection이 가능합니다. 공격자가 큰 메시지를 자신이 제어하는 여러 개의 작은 메시지로 분할하여 전송할 수 있으므로 데이터베이스가 손상될 수 있습니다. v4.18.2와 v5.5.4에서 이 문제가 해결되었습니다.
💡 쉬운 설명
pgx 라이브러리에서 매우 큰 데이터를 처리할 때 프로그래밍 오류로 인해 공격자가 데이터베이스를 해킹할 수 있습니다. 크기 계산이 잘못되어 공격자가 원하는 대로 데이터를 조작할 수 있게 되는 것입니다.
🇺🇸 원문 (English)
pgx is a PostgreSQL driver and toolkit for Go. SQL injection can occur if an attacker can cause a single query or bind message to exceed 4 GB in size. An integer overflow in the calculated message size can cause the one large message to be sent as multiple messages under the attacker's control. The problem is resolved in v4.18.2 and v5.5.4. As a workaround, reject user input large enough to cause a single query or bind message to exceed 4 GB in size.
📍 영향받는 시스템
pgx v4.18.2 이전, v5.0.0~v5.5.3 버전 (Go 기반 PostgreSQL 드라이버)
⚔️ 공격 벡터
공격자가 4GB 이상의 대용량 쿼리나 바인드 메시지를 주입하여 정수 오버플로우를 유발하고 SQL injection 실행
🛡️ 대응 방법
pgx를 v4.18.2 또는 v5.5.4 이상으로 업그레이드하거나 사용자 입력의 메시지 크기를 4GB 미만으로 제한
🔧 검증 코드
pgx 버전이 v4.18.2 이상 또는 v5.5.4 이상이면 패치됨, 그 이하 버전이면 취약함
go list -m all 2>/dev/null | grep 'github.com/jackc/pgx'