🇰🇷 한글 설명
Seroval은 JSON.stringify로 표현할 수 없는 복잡한 자바스크립트 구조까지 직렬화하는 라이브러리입니다. 1.0.0 이전 및 1.5.5~1.6.10 버전에서는 RegExp 소스에 포함된 '<' 문자를 HTML script 요소에 맞게 이스케이프하지 않아, 조작된 정규식 소스로 스크립트 요소를 종료하고 다른 사용자 페이지에서 스크립트가 실행될 수 있습니다. 1.6.10 버전에서 수정되었습니다.
💡 쉬운 설명
이 라이브러리는 자바스크립트 데이터를 문자열로 바꾸는 도구인데, 특정 조건에서 악성 스크립트가 섞여 들어갈 수 있는 문제가 있습니다. 사용자 입력으로 정규식을 만들어 HTML에 넣는 애플리케이션이라면 다른 사람의 브라우저에서 악성 코드가 실행될 수 있습니다.
🇺🇸 원문 (English)
Seroval facilitates JavaScript value stringification, including complex structures beyond JSON.stringify capabilities. Prior to 1.0.0 and from 1.5.5 until 1.6.10, the JavaScript-output APIs serialize a RegExp source containing a less-than character without the escaping needed for an HTML script element. An application is affected when it builds regular expression syntax from untrusted input, serializes that RegExp through serialize, serializeAsync, crossSerialize, crossSerializeAsync, crossSerializeStream, Serializer, or compileJSON, and embeds the result in an HTML script element. The crafted source can terminate the element and execute script in the page received by another user. This issue is fixed in version 1.6.10.
📍 영향받는 시스템
Seroval 1.0.0 미만 및 1.5.5 이상 1.6.10 미만 버전을 사용하며, 신뢰할 수 없는 입력으로 정규식을 생성해 HTML script 요소에 직렬화 결과를 삽입하는 애플리케이션
⚔️ 공격 벡터
공격자가 정규식 소스에 '</script>' 같은 문자열을 포함시킨 입력을 제공하면, 직렬화된 결과가 script 요소를 조기 종료시켜 다른 사용자 브라우저에서 임의 스크립트가 실행됨 (저장형/반사형 XSS)
🛡️ 대응 방법
seroval 패키지를 1.6.10 이상으로 업그레이드하고, 사용자 입력으로 정규식을 만드는 로직을 검토하며, 직렬화 결과를 HTML에 삽입하기 전 추가 이스케이프를 적용
🔧 검증 코드
출력된 버전이 1.6.10 이상이면 취약점이 해결된 것이며, 1.5.5~1.6.9 또는 1.0.0 미만이면 즉시 업그레이드가 필요하고, 출력이 없으면 해당 프로젝트에서 seroval을 사용하지 않는 것입니다.
npm ls seroval 2>/dev/null | grep seroval