특징
- 브라우저가 html 페이지를 분석하여 DOM을 생성할 때 악성 스크립트가 DOM의 일부로 구성되어 생성되는 공격
- 서버의 응답 내에는 악성 스크립트가 포함되지 않지만 브라우저의 응답 페이지에 정상적인 스크립트가 실행되고 악성 스크립트가 추가적으로 실행
DOM
- HTML 문서 구조를 객체로 표현한 것
- HTML로 구성된 웹 페이지와 스크립트 및 프로그래밍 언어를 연결시켜주는 역할
DVWA 실습
- DOM XSS 탭에서 english를 선택하니 URL이 변경되는것을 확인 할 수 있음
- 임의로 URL에 특정 문자를 입력하고 전송하니 웹페이지가 변경 -> hacking 을 입력하니 hacking 탭이 생성
- URL로 HTML 조작이 가능하다는걸 추정
- 웹페이지를 분석하니 URL에 입력한 값이 스크립트로 그대로 전달 되는 것을 확인
- 스크립트에 단순 알림창 생성부터 쿠키정보를 알림 까지 가능
소스코드 분석
if (document.location.href.indexOf("default=") >= 0) {
var lang = document.location.href.substring(document.location.href.indexOf("default=") + 8);
document.write('<option value="' + lang + '" selected="selected">' + decodeURI(lang) + '</option>');
}
document.write('<option value="English">English</option>');
document.write('<option value="French">French</option>');
document.write('<option value="Spanish">Spanish</option>');
document.write('<option value="German">German</option>');
- 사용자 입력의 신뢰성 문제
- 코드에서 lang 변수는 document.location.href에서 직접 추출된 값을 사용
- 이 값은 URL 파라미터로 전달되므로 사용자가 직접 제어 가능
- 출력 전 사용자 입력에 대한 검증 없음
- 추출된 lang 값을 document.write()를 사용하여 HTML에 직접 삽입
- 공격자가 default 파라미터에 악의적인 JavaScript 코드를 삽입하면, 코드는 그대로 실행
대응방안
- JavaScript 내에서 데이터에 접근하는 방식을 변경하기
- URL의 값을 직접 document.write()로 출력하는 대신, URLSearchParams API와 같은 안전한 방법으로 URL 파라미터에 접근하고 사용
- JavaScript의 안전한 메서드 사용
- document.write()는 XSS 공격에 취약한 메서드 중 하나
- 안전한 DOM 조작 메서드(예: createElement, appendChild, textContent 등)를 사용하여 DOM을 동적으로 변경
- 출력하기 전에 모든 사용자 입력 인코딩
- HTML, JavaScript, CSS, URL 등 다양한 컨텍스트에서 사용자 입력을 출력할 때 적절한 인코딩을 사용
- HTML 컨텍스트: HTML 엔티티 인코딩
- JavaScript 컨텍스트: JavaScript 이스케이프
- CSS 컨텍스트: CSS 이스케이프
- URL 컨텍스트: URL 인코딩
- HTML, JavaScript, CSS, URL 등 다양한 컨텍스트에서 사용자 입력을 출력할 때 적절한 인코딩을 사용
- 콘텐츠 보안 정책(CSP) 설정 강화
- Content Security Policy (CSP)는 웹 애플리케이션에서 실행할 수 있는 콘텐츠의 유형을 정의하는 웹 표준
- CSP를 통해 인라인 스크립트의 실행을 방지하고, 신뢰할 수 있는 스크립트 소스만을 허용하도록 설정
'CERT' 카테고리의 다른 글
웹 모의해킹: Reflected XSS (0) | 2024.10.05 |
---|---|
웹 모의해킹: Stored XSS (0) | 2024.10.05 |
웹 모의해킹: Weak Session IDs (2) | 2024.10.05 |
웹 모의해킹: Insecure CAPTCHA (0) | 2024.10.05 |
웹 모의해킹: File Upload (2) | 2024.10.05 |