피드로 돌아가기
Dev.toSecurity
원문 읽기
justhtml 라이브러리가 Markdown 직렬화 시 backtick fence 길이 동적 계산 미지원으로 XSS 취약점 발생
GHSA-5VP3-3CG6-2RQ3: GHSA-5VP3-3CG6-2RQ3: Cross-Site Scripting via Markdown Serialization Breakout in justhtml
AI 요약
Context
justhtml 1.13.0 미만 버전에서 HTML의 <pre> 요소를 Markdown으로 직렬화할 때 backtick fence 길이를 고정 처리했다.
이로 인해 <pre> 내부의 backtick 문자가 Markdown 코드 블록의 종료 마커로 인식되어 코드 블록 탈출이 가능해졌다.
이 탈출을 통해 공격자는 GFM이나 CommonMark 같은 다운스트림 Markdown 렌더러에서 임의의 JavaScript 실행이 가능했다.
Technical Solution
- backtick fence 길이를 동적으로 계산:
<pre>태그 내 backtick 개수를 감지하여 그보다 긴 fence(예: 5개 이상)를 자동 생성 - Markdown 코드 블록 탈출 방지: 직렬화된 Markdown이 다운스트림 파서에서 올바른 코드 블록으로 해석되도록 보장
- 버전 1.13.0 이상으로 업그레이드: 고정된 backtick fence 처리를 동적 계산 방식으로 교체
Impact
CVSS v3.1 스코어 7.5(High)의 XSS 취약점 제거
Key Takeaway
Markdown 직렬화 시 메타 문자(backtick 등)의 개수를 사전에 검사하고 동적으로 이스케이프 처리해야 하며, HTML-to-Markdown 변환 라이브러리는 다운스트림 파서의 문법 규칙까지 고려한 설계가 필수다.
실천 포인트
HTML 콘텐츠를 Markdown으로 변환하는 Python 애플리케이션에서 justhtml을 사용 중이라면 즉시 버전
1.
1
3.0 이상으로 업그레이드하고, 추가적으로 다운스트림 Markdown 파서에서 raw HTML 렌더링을 명시적으로 비활성화하며, 콘텐츠 보안 정책(CSP)으로 인라인 JavaScript 실행을 제한하면 XSS 공격 벡터를 효과적으로 차단할 수 있다.