HTTP 응답 분할(HTTP Response Splitting) 취약점
Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Response Splitting')
설명
HTTP 응답 분할(HTTP Response Splitting) 취약점은 애플리케이션이 사용자 입력을 HTTP 응답 헤더에 포함할 때, 캐리지 리턴() 및 라인 피드() 문자가 포함된 경우 발생합니다. 공격자는 이러한 문자를 삽입하여 응답을 조작할 수 있으며, 이를 통해 캐시 중독(Cache Poisoning), Cross-Site Scripting(XSS) 등의 공격을 수행할 수 있습니다.
일부 Java 애플리케이션 서버(Tomcat 등)는 자동으로 응답 헤더 값을 필터링하지만, 모든 환경에서 적용되는 것은 아니므로 사용자 입력을 검증해야 합니다.
잠재적 영향
HTTP 응답 조작: 공격자가 추가적인 HTTP 응답을 삽입하여 브라우저의 동작을 조작할 수 있습니다.
캐시 중독(Cache Poisoning): 악성 응답을 캐시에 저장하여 사용자에게 악성 콘텐츠를 제공할 수 있습니다.
Cross-Site Scripting(XSS): 공격자가 HTTP 응답 본문을 변조하여 악성 스크립트를 실행할 수 있습니다.
해결 방법
HTTP 응답 헤더에 사용자 입력을 직접 포함하지 않기
응답 헤더 값은 미리 정의된 값으로 제한해야 합니다.
입력값 검증 및 필터링 수행
(CR), (LF) 및 기타 비허용 문자(
",;\0x7f등)를 차단합니다.
Apache Commons Text 등의 문자열 이스케이프 라이브러리 활용
StringEscapeUtils.escapeJava()을 사용하여 입력값을 안전하게 처리합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드:
사용자 입력을
setHeader()에 직접 전달하여 공격자가\r을 삽입할 경우 HTTP 응답을 조작할 수 있음.
안전한 코드:
isValidHeaderValue()를 사용하여 허용된 문자만 포함하도록 검증.StringEscapeUtils.escapeJava()를 사용하여 입력값을 이스케이프 처리.
참조
Last updated