🇰🇷 한글 설명
Seroval은 JSON.stringify의 기능을 넘어서는 복잡한 구조를 포함한 JavaScript 값의 문자열화를 지원합니다. 1.6.0부터 1.6.11 이전 버전까지, JavaScript 출력 API가 typed array의 생성자 이름을 값의 속성에서 가져오는데, 이 속성은 own constructor 속성으로 대체될 수 있습니다. 애플리케이션이 신뢰할 수 없는 속성을 typed array에 복사한 후 serialize 계열 함수에 전달하면, 공격자가 제어하는 이름이 실행 가능한 JavaScript로 기록되어 출력을 받는 페이지에서 실행될 수 있습니다.
💡 쉬운 설명
Seroval이라는 데이터 변환 라이브러리의 취약점으로, 외부 입력이 잘못 처리되면 악성 코드가 웹페이지에서 실행될 수 있습니다. 버전 1.6.11 이상으로 업데이트하면 해결됩니다.
🇺🇸 원문 (English)
Seroval facilitates JavaScript value stringification, including complex structures beyond JSON.stringify capabilities. From 1.6.0 until 1.6.11, the JavaScript-output APIs derive a typed array's constructor name from a property on the value that can be replaced by an own constructor property. When application code copies untrusted properties onto a typed array and then passes it to serialize, serializeAsync, crossSerialize, crossSerializeAsync, crossSerializeStream, Serializer, or compileJSON, the attacker-controlled name is written as executable JavaScript and can run in the page receiving the output. This issue is fixed in version 1.6.11.
📍 영향받는 시스템
Seroval 1.6.0 이상 1.6.11 미만 버전을 사용하는 Node.js/JavaScript 애플리케이션
⚔️ 공격 벡터
공격자가 신뢰되지 않은 속성을 typed array에 주입하여 직렬화 출력에 악성 JavaScript가 포함되도록 유도하고, 이를 웹페이지에서 실행시킴(XSS 유사)
🛡️ 대응 방법
seroval 패키지를 1.6.11 이상 버전으로 업그레이드하고, 외부 입력을 typed array 속성에 직접 복사하지 않도록 코드를 점검
🔧 검증 코드
출력된 버전이 1.6.11 이상이면 취약하지 않고, 1.6.0 이상 1.6.11 미만이면 취약한 버전이며, 결과가 없으면 해당 패키지가 설치되지 않은 것입니다.
npm ls seroval 2>/dev/null | grep seroval