Web 취약점 진단 - 크로스사이트 스크립팅

1. 크로스사이트 스크립팅(XS)

 

 

2. 취약점 개요 

 

크로스사이트 스크립팅은 악성 스크립트를 웹 페이지에 삽입하여, 사용자가 해당 페이지를 열람할 경우 브라우저에서 실행되는 취약점을 말한다. 이를 이용해 공격자는 세션이나 쿠키 탈취나 악성 사이트로 리다이렉트가 발생할 수 있다.

 

3. 진단 결과 

 

1) 사용자 입력 값을 전달받는 애플리케이션(회원정보 변경, 게시판, 댓글, 자료실 등)에 스크립트 입력 후 실행되는지 확인

First name : <script>alert(document.cookie)</script>

Last name : <h1>hacked is leegyumin</h1>

※ document.cookie는 브라우저에 저장 쿠키정보를 말함 - 악성 스크립트로 쿠키정보를 탈취하기 위한 시나리오

스크립트 삽입

 

2) 게시판 페이지를 포함한 웹 인터페이스에서 사용자 의도와 무관하게 악성 프로그램이 강제 다운로드되거나 자동 실행되거나, 사용자를 악성 사이트로 리다이렉트하는 행위가 발생하는지 확인

XSS 공격 성공

 

악성 사이트로 리다이렉트된 결과

4. 권고사항

 

1) 웹 사이트 내 사용자 입력값이 저장 및 출력되는 모든 페이지에서 스크립트 실행에  악용될 수 있는 태그 및 특수문자 사용을 사전에 차단해야 함

2) 게시판, 댓글, 검색, 회원정보 변경, URL 파라미터 등 모든 사용자 입력 폼과 파라미터에 대해 신뢰하지 않고 필터링 로직을 일관되게 적용해야 함

3) 입력값 검증 시 서버 측에서 반드시 공백 제거(trim), 문자열 치환(replace) 함수를 사용해 불필요한 공백 및 위험 문자를 제거

4) URL 인코딩 우회 공격을 방지하기 위해, 서버 측에서 URLDecoder 클래스의 decode 메소드를 활용해 인코딩된 입력값을 정상적으로 디코딩한 후 필터링을 수행해야 됨

5) 웹 방화벽 룰셋어 모든 사용자 입력 폼을 대상으로 스크립트 태그 및 특수문자에 대한 필터링 규칙을 적용해 자동 차단 및 탐지를 강화 함

6) 상세 오류 정보의 일반화 및 외부 노출을 차단해야 함

필터링 조치 대상 입력 값

스크립터 정의어 : <SCRIPT>, <OBJECT>, <APPLET>, <EMBED>, <FORM>, <IFRAME>등

특수문자 : <, >, ", ', &, %, %00 (null 문자) 등