🇰🇷 한글 설명
Browserslist 4.28.7 미만 버전에서 normalizeStats() 함수가 신뢰할 수 없는 데이터를 처리할 때 발생합니다. unguarded for...in 루프와 객체 브래킷 접근 방식을 사용하여 __proto__와 같은 상속된 Object.prototype 키를 처리함으로써 TypeError를 유발하거나 반환된 객체의 프로토타입을 수정할 수 있습니다.
💡 쉬운 설명
브라우저 설정 도구인 Browserslist가 잘못된 데이터를 읽을 때 프로그램이 멈추거나 시스템의 기본 동작을 변조할 수 있는 취약점입니다. 공격자가 조작된 설정 파일을 통해 웹 개발 도구의 실행을 방해하거나 예기치 않은 동작을 유도할 수 있습니다.
🇺🇸 원문 (English)
Browserslist is a configuration tool for sharing target browsers and Node.js versions between front-end tools. Prior to 4.28.7, normalizeStats() in node.js, reached unconditionally through getStat() and loadStat() on every browserslist() call, processes untrusted browserslist-stats.json, opts.stats, and CLI --stats data with an unguarded for...in loop and plain-object bracket access and assignment, allowing inherited Object.prototype keys including __proto__, toString, valueOf, constructor, hasOwnProperty, and isPrototypeOf to cause an uncaught TypeError or modify the prototype of the returned normalized object. This issue is fixed in version 4.28.7.
📍 영향받는 시스템
Browserslist versions prior to 4.28.7
⚔️ 공격 벡터
조작된 browserslist-stats.json 파일, opts.stats 데이터 또는 CLI --stats 인자를 통한 프로토타입 오염 공격
🛡️ 대응 방법
Browserslist를 4.28.7 버전 이상으로 업데이트하십시오.
🔧 검증 코드
출력 결과에 현재 설치된 browserslist 버전이 4.28.7 미만으로 표시되면 취약한 상태입니다.
npm list browserslist | grep -E 'browserslist@([0-4]\.[0-9]{2}\.[0-7]?[0-9]?|4\.2[8-9]\.[0-9]+)'