🇰🇷 한글 설명
Mermaid는 마크다운 형식의 텍스트로 다이어그램과 차트를 생성하고 수정하는 자바스크립트 도구입니다. 10.9.8 및 11.16.1 이전 버전에서는 mermaid.initialize, mermaidAPI.setConfig, mermaidAPI.updateSiteConfig 설정 함수가 assignWithDepth 깊은 병합 함수를 사용하여 프로토타입 오염 취약점에 노출됩니다. 이는 애플리케이션이 신뢰할 수 없는 데이터를 이러한 설정 진입점에 직접 전달하는 비문서화 사용 방식에서만 악용 가능하며, 다이어그램 내부 설정(%%{init: {}}%% 또는 YAML 프론트매터)은 영향을 받지 않습니다.
💡 쉬운 설명
Mermaid라는 다이어그램 도구의 설정 기능에 결함이 있어, 외부에서 입력된 값이 프로그램의 기본 설정을 몰래 바꿀 수 있습니다. 개발자가 사용자 입력을 설정 함수에 그대로 넘기는 특수한 경우에만 문제가 됩니다.
🇺🇸 원문 (English)
Mermaid is a JavaScript tool that uses Markdown-inspired text to create and modify diagrams and charts. Prior to 10.9.8 and 11.16.1, Mermaid's configuration setters (mermaid.initialize, mermaidAPI.setConfig, and mermaidAPI.updateSiteConfig) merge caller-supplied configuration into Mermaid's internal config using the assignWithDepth deep-merge helper, which is vulnerable to prototype pollution. This is only exploitable if an application forwards untrusted data directly into one of these configuration entry points, which is outside their documented usage; diagram-supplied configuration (e.g. %%{init: {}}%% or YAML frontmatter) is not affected. This issue is fixed in versions 10.9.8 and 11.16.1.
📍 영향받는 시스템
Mermaid 10.9.8 미만 및 11.16.1 미만 버전을 사용하는 애플리케이션
⚔️ 공격 벡터
애플리케이션이 신뢰할 수 없는 입력을 mermaid.initialize 등 설정 함수에 직접 전달할 때, 프로토타입 오염을 유발하는 키(__proto__ 등)를 포함한 설정 객체로 전역 객체 속성을 변조
🛡️ 대응 방법
Mermaid를 10.9.8 또는 11.16.1 이상으로 업그레이드하고, 설정 함수에 외부 입력을 직접 전달하지 않도록 코드를 점검
🔧 검증 코드
출력된 mermaid 버전이 10.9.8 미만(10.x 계열) 또는 11.16.1 미만(11.x 계열)이면 취약하며, 해당 버전 이상이면 패치가 적용된 것입니다.
npm ls mermaid 2>/dev/null | grep mermaid