🇰🇷 한글 설명
Highcharts JS의 DataTable 단일 셀 쓰기 함수가 신뢰할 수 없는 컬럼 ID를 키로 사용하면서 __proto__와 constructor를 거부하지 않아, 공격자가 Object.prototype이나 Object 생성자에 값을 기록할 수 있습니다. 이로 인해 페이지 전체의 배열 및 객체 읽기와 for-in 열거에 영향을 주어 애플리케이션 제어 흐름 변경이나 렌더링 장애가 발생할 수 있습니다.
💡 쉬운 설명
차트 라이브러리가 데이터 항목 이름을 검사하지 않아, 악의적인 이름으로 자바스크립트의 기본 동작을 바꿀 수 있습니다. 그 결과 웹 페이지의 동작이 비정상적으로 바뀌거나 화면이 깨질 수 있습니다.
🇺🇸 원문 (English)
Highcharts JS is a JavaScript charting library based on SVG. From 1.0.0 until Dashboards 4.2.2, and from 2.0.0 until Grid Pro 3.2.0, Highcharts DataTable single-cell writers use an untrusted column ID as a key without rejecting __proto__ or constructor. DataTable.setCell, including Dashboards connector write-back and Grid Pro editing paths, can therefore write integer-indexed values onto Object.prototype or the Object constructor. In Dashboards releases with column aliases, a literal __proto__ ID is redirected by the alias map, while an alias targeting __proto__ reaches the unsafe write; later releases without aliases accept the unsafe ID directly. Those inherited values affect array and object reads and for-in enumeration throughout the page, which can alter application control flow or disrupt rendering. Exploitation requires control of the table or component column ID and a cell, point, or API write. This issue is fixed in Dashboards 4.2.2 and Grid Pro 3.2.0.
📍 영향받는 시스템
Highcharts Dashboards 4.2.2 미만(1.0.0 이후), Highcharts Grid Pro 3.2.0 미만(2.0.0 이후)
⚔️ 공격 벡터
테이블 또는 컴포넌트의 컬럼 ID를 제어할 수 있는 공격자가 셀, 포인트 또는 API 쓰기 경로를 통해 __proto__ 또는 constructor 키로 값을 기록
🛡️ 대응 방법
Highcharts Dashboards를 4.2.2 이상, Grid Pro를 3.2.0 이상으로 업그레이드
🔧 검증 코드
출력된 버전이 Dashboards 4.2.2 미만 또는 Grid Pro 3.2.0 미만이면 취약하며, 해당 이상이면 패치가 적용된 것입니다.
npm ls highcharts @highcharts/dashboards @highcharts/grid-pro 2>/dev/null | grep -E 'dashboards|grid-pro|highcharts@'