특징

  • 브라우저가 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>');
  1. 사용자 입력의 신뢰성 문제
    • 코드에서 lang 변수는 document.location.href에서 직접 추출된 값을 사용
    • 이 값은 URL 파라미터로 전달되므로 사용자가 직접 제어 가능
  2. 출력 전 사용자 입력에 대한 검증 없음
    • 추출된 lang 값을 document.write()를 사용하여 HTML에 직접 삽입
    • 공격자가 default 파라미터에 악의적인 JavaScript 코드를 삽입하면, 코드는 그대로 실행

대응방안

  1. JavaScript 내에서 데이터에 접근하는 방식을 변경하기
    • URL의 값을 직접 document.write()로 출력하는 대신, URLSearchParams API와 같은 안전한 방법으로 URL 파라미터에 접근하고 사용
  2. JavaScript의 안전한 메서드 사용
    • document.write()는 XSS 공격에 취약한 메서드 중 하나
    • 안전한 DOM 조작 메서드(예: createElement, appendChild, textContent 등)를 사용하여 DOM을 동적으로 변경
  3. 출력하기 전에 모든 사용자 입력 인코딩
    • HTML, JavaScript, CSS, URL 등 다양한 컨텍스트에서 사용자 입력을 출력할 때 적절한 인코딩을 사용
      • HTML 컨텍스트: HTML 엔티티 인코딩
      • JavaScript 컨텍스트: JavaScript 이스케이프
      • CSS 컨텍스트: CSS 이스케이프
      • URL 컨텍스트: URL 인코딩
  4. 콘텐츠 보안 정책(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

+ Recent posts