개요

HTTP Header Injection은 사용자 입력을 기반으로 동적 생성될 때 발생하는 일반적인 웹 응용프로그램 보안 취약점입니다.
일반적으로 프록시/방화벽을 이용해서 request 정보를 컨트롤해서 원하는 response 값을 공격 대상에게 보내는 공격을 말합니다.

공격

이 공격의 핵심은 CR/LF 즉, 줄바꿈 문자열입니다.
간단한 CR/LF 구문을 입력하여 서버로 요청을 하게 되면 응답 패킷에는 URL 의 파라미터 부분의 lang 매개변수에 en%0D%0A 값이 필터링되지 않고 그대로 삽입됩니다.
서버측에서는 CR/LF 문자열을 필터링하지 않는 것입니다. 이를 통해 HTTP 패킷의 헤더 속성들을 변조할 수 있게 됩니다.

대응방안

◆ HTTP header 분리 방지
HTTP 헤더에 입력되는 값에 대하여 개행문자(CR/LF)를 제거 또는 치환 하는 등 입력에 대한 유효성 검사를 실시함으로써 헤더가 두 대 이상으로 나뉘어지는 것을 방지해야 합니다.
String test = test.replaceAll(‘\r”,””).replaceAll(“\n”,””);