가. 취약점 개요
사례1 : HTTP 응답분할
공격자가 HTTP 요청에 삽입한 인자 값이 HTTP 응답헤더에 포함되어 사용자에게 다시 전달될 때 개행문자를 이용하여 첫 번째 응답을 종료시키고 두 번째 응답에 악의적인 코드가 주입되어 XSS공격 등이 가능해진다.
사례2 : 신뢰되지 않은 URL로 자동 접속연결
사용자의 입력값을 외부 사이트의 주소로 사용하여 자동으로 연결하는 서버 프로그램에서는 공격자가 사용자를 피싱(Phishing)사이트 등 위험한 URL으로 접속하도록 유도할 수 있게 된다.
나. 설계시 고려사항
① 외부 입력값을 쿠키 및 HTTP 헤더정보로 사용하는 경우, HTTP 응답분할 취약점을 가지지 않도록 필터링해서 사용해야 한다.
₩r₩n 문자는 HTTP응답에서 헤더와 바디를 구분하는 구분자로 사용되기 때문에 HTTP응답 헤더에 삽입되는 외부입력값은 반드시 ₩r₩n 문자를 제거하여 사용할 수 있도록 시큐어코딩 규칙을 정의한다.
프로그램에서 Cookie 설정, 응답 헤더 설정, 페이지 리다이렉트를 위한 Location정보 삽입 등 응답헤더에 외부 입력값이 삽입되는 경우 HTTP 응답 분할을 일으킬 수 있는 문자(₩r₩n)을 필터링 하도록 검증절차를 적용한다.
② 외부입력값이 페이지 이동(리다이렉트 또는 포워드)을 위한 URL로 사용되어야 하는 경우, 해당 값은 시스템에서 허용된 URL목록의 선택자로 사용되도록 해야 한다.
페이지 이동을 허용하는 URL목록을 소스코드에 하드코딩 하거나, 설정파일(XML, properties)에 저장하여 허용된 URL로만 이동할 수 있도록 설계한다.
[테스트 문제]
문제: 페이지 이동을 허용하는 URL목록을 소스코드에 하드코딩 하거나, 설정파일(XML, properties)에 저장하여 허용된 URL로만 이동할 수 있도록 설계한다.
정답: O
문제: 보안대책을 서술하시오.
정답:
① 개행 등 HTTP 응답 분할을 일으킬 수 있는 문자는 필터링 처리한다.
② 페이지 이동을 허용하는 URL 목록을 소스코드에 하드코딩 하거나 설정 파일에 저장하여 허용된 URL로만 이동 가능하도록 처리
문제: 빈칸을 채우시오.
공격자가 HTTP 요청에 삽입한 인자 값이 HTTP 응답헤더에 포함되어 사용자에게 다시 전달될 때 (ㄱ)를 이용하여 첫 번째 응답을 종료시키고 두 번째 응답에 악의적인 코드가 주입되어 (ㄴ) 등이 가능해진다.
사용자의 입력값을 외부 사이트의 주소로 사용하여 자동으로 연결하는 서버 프로그램에서는 공격자가 사용자를 (ㄷ) 등 위험한 URL으로 접속하도록 유도할 수 있게 된다.
나. 설계시 고려사항
① 외부 입력값을 (ㄹ)로 사용하는 경우, HTTP 응답분할 취약점을 가지지 않도록 (ㅁ)해서 사용해야 한다.
(ㅅ) 문자는 HTTP응답에서 (ㅇ)를 구분하는 구분자로 사용되기 때문에 HTTP응답 헤더에 삽입되는 외부입력값은 반드시 (ㅅ) 문자를 제거하여 사용할 수 있도록 시큐어코딩 규칙을 정의한다.
프로그램에서 Cookie 설정, 응답 헤더 설정, 페이지 리다이렉트를 위한 Location정보 삽입 등 응답헤더에 외부 입력값이 삽입되는 경우 HTTP 응답 분할을 일으킬 수 있는 문자(₩r₩n)을 필터링 하도록 검증절차를 적용한다.
② 외부입력값이 페이지 이동(리다이렉트 또는 포워드)을 위한 URL로 사용되어야 하는 경우, 해당 값은 시스템에서 허용된 URL목록의 선택자로 사용되도록 해야 한다.
페이지 이동을 허용하는 URL목록을 소스코드에 하드코딩 하거나, 설정파일(XML, properties)에 저장하여 (ㅈ)로만 이동할 수 있도록 설계한다.
정답:
ㄱ: 개행문자
ㄴ: XSS공격
ㄷ: 피싱
ㄹ: 쿠키 및 HTTP 헤더정보
ㅁ: 필터링
ㅅ: \r\n(개행)
ㅇ: 헤더와 바디
ㅈ: 설정
HTTP 프로토콜 유효성 검증 | |
입력데이터 검증 및 표현 | HTTP 응답분할 |
입력데이터 검증 및 표현 | 신뢰되지 않은 URL주소로 자동접속 연결 |