🇰🇷 한글 설명
mysql2 패키지의 nestTables 옵션 사용 시 사용자 입력이 제대로 검증되지 않아 프로토타입 오염 공격에 취약합니다. 공격자가 악의적인 데이터베이스 필드명(__proto__, constructor 등)을 통해 애플리케이션의 프로토타입 체인을 오염시킬 수 있습니다.
💡 쉬운 설명
mysql2 라이브러리에서 데이터베이스로부터 받은 필드명을 검증하지 않아, 특수한 필드명이 포함된 악의적 데이터가 애플리케이션의 기본 동작을 변조할 수 있습니다. 이를 통해 인증 우회나 권한 상승이 가능합니다.
🇺🇸 원문 (English)
Versions of the package mysql2 before 3.9.8 are vulnerable to Prototype Pollution due to improper user input sanitization passed to fields and tables when using nestTables.
📍 영향받는 시스템
Node.js 환경의 mysql2 패키지 3.9.7 이하 버전 (nestTables 옵션 사용 시)
⚔️ 공격 벡터
nestTables를 사용하는 쿼리에서 데이터베이스로부터 반환되는 필드명에 __proto__, constructor, prototype 등을 삽입하여 프로토타입 오염 수행
🛡️ 대응 방법
mysql2를 3.9.8 이상으로 즉시 업그레이드하고, 데이터베이스 접근 권한을 최소화하며, 입력 검증 강화
🔧 검증 코드
출력된 버전이 3.9.8 이상이면 안전, 3.9.7 이하면 업그레이드 필요
npm list mysql2 2>/dev/null | grep mysql2 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+'