DOM기반 XSS (DOM-based Cross-Site Scripting)

정보보안학
한 줄 정의: 서버를 거치지 않고 브라우저에서 실행되는 자바스크립트가 사용자 입력값을 그대로 페이지 구조(DOM)에 반영하면서 악성 스크립트가 실행되는 취약점입니다.

쉽게 풀면

DOM기반 XSS는 편지를 우체국(서버)을 거치지 않고 받는 사람이 직접 봉투를 열어 안의 내용을 그대로 벽에 붙이는 것과 비슷합니다. 웹페이지 안의 자바스크립트 코드가 주소창의 값이나 사용자 입력을 아무 검증 없이 화면에 바로 반영할 때, 공격자가 그 입력값 안에 악성 스크립트를 심어두면 사용자의 브라우저에서 그대로 실행됩니다. 서버로 전송되는 데이터를 검사해도 이 문제는 잡히지 않는데, 공격이 순전히 브라우저 내부에서만 벌어지기 때문입니다.

왜 중요한가

DOM기반 XSS는 자바스크립트 중심의 단일 페이지 애플리케이션(SPA)이 늘어나면서 더욱 빈번해진 취약점 유형이기 때문에 클라이언트 측 보안 연구에서 중요하게 다뤄집니다. 서버 로그에는 공격의 흔적이 남지 않는 경우가 많아 탐지와 대응이 까다로운 사례로도 자주 언급됩니다.

논문에서는 이렇게 쓰입니다

"분석 대상 페이지는 URL 프래그먼트 값을 검증 없이 innerHTML에 삽입하여 DOM기반 XSS에 취약한 것으로 나타났다."

구체적인 취약 코드 패턴을 통해 DOM기반 XSS 발생 원인을 설명하는 문장입니다.

"본 연구는 정적 분석을 통해 사용자 제어 가능한 소스와 위험한 싱크 함수 사이의 데이터 흐름을 추적하여 DOM기반 XSS를 자동으로 탐지하는 기법을 제안한다."

소스-싱크 흐름 분석 기반의 DOM기반 XSS 탐지 연구를 소개하는 문장입니다.

조금 더 깊게 보면

DOM기반 XSS는 사용자가 제어할 수 있는 입력 지점인 소스(source)와, 그 값을 실제로 페이지에 실행 가능한 형태로 반영하는 위험한 함수인 싱크(sink) 사이의 흐름으로 설명됩니다. innerHTML, document.write, eval 같은 함수가 대표적인 싱크로 꼽히며, 이러한 흐름을 자동으로 추적해 취약점을 찾아내는 정적·동적 분석 도구들이 연구되고 있습니다.

주의할 점

서버 측에서 입력값을 아무리 철저히 검증하더라도 브라우저 내부에서만 처리되는 DOM기반 XSS는 막을 수 없으므로, 클라이언트 측 코드에서도 별도의 입력값 처리와 안전한 API 사용이 필요합니다.

관련 용어