피드로 돌아가기
Hacker NewsSecurity
원문 읽기
반복적 SVG Sanitization 실패를 통한 Sandbox 설계의 필연성 증명
The Woes of Sanitizing SVGs
AI 요약
Context
사용자 생성 SVG를 메인 Document에 직접 Append 하여 Bounding Box를 측정하는 설계 구조. 정규표현식과 라이브러리 기반의 블랙리스트 필터링을 통한 Sanitization 시도가 지속적인 XSS 및 HTTP Leak 취약점을 노출함.
Technical Solution
- Regex 기반 script 태그 제거를 통한 초기 XSS 대응 시도 및 Case-sensitive 제약으로 인한 우회 경로 발생
- DOMPurify 도입을 통한 마크업 기반 Sanitization 및 커스텀 Hook을 통한 Remote URL href 속성 제거
- CSS @import 차단을 위한 JavaScript 기반 CSS Parser(css-tree) 도입 및 스타일시트 구문 분석을 통한 위험 요소 제거
- Paper.js 등 서드파티 라이브러리로 전달되는 데이터 경로에 대한 Sanitization 누락 지점 식별
- Browser Parser와 CSS Parser(css-tree) 간의 구문 해석 불일치(Relaxed Syntax)로 인한 Sanitization Bypass 현상 분석
- 블랙리스트 방식의 한계를 극복하기 위한 구조적 격리(SVG Sandbox) 방식의 대안 제시
실천 포인트
- 외부 입력 데이터(SVG, HTML)를 DOM에 직접 삽입하는 행위를 원천 차단하고 Iframe 기반 Sandbox 활용 검토 - Sanitization 라이브러리와 실제 Browser Engine 간의 Parsing 불일치 가능성을 고려한 방어 설계 적용 - 정규표현식 기반의 필터링보다 정교한 AST(Abstract Syntax Tree) 분석 도구 사용 및 화이트리스트 정책 수립 - 데이터가 처리되는 전체 파이프라인(Editor -> Renderer -> Third-party Lib) 내의 모든 진입점에 동일한 보안 정책 적용