HTTP 헤더 인젝션
HTTP 헤더 인젝션이란 무엇인가요?
HTTP 헤더 인젝션은 웹 애플리케이션의 취약점을 악용하는 공격 기법입니다. 공격자는 웹 서버로 전송되는 HTTP 요청에 캐리지 리턴 및 라인 피드(CRLF) 문자를 비롯한 악성 문자열을 삽입하여 HTTP 응답을 조작할 수 있습니다. 사용자가 제공한 매개변수를 별도의 정제 과정 없이 HTTP 응답 헤더에 직접 저장하는 웹 애플리케이션은 이러한 유형의 공격에 특히 취약합니다.
예를 들어, 브라우저가 매개변수와 함께 다음 요청을 전송하는 상황을 살펴보겠습니다:
http://f5.com/index.html?status=1
웹 애플리케이션에서 세션 관리에 status=1 매개변수를 사용하려는 경우 다음과 같은 HTTP 응답을 반환할 수 있습니다:
HTTP/1.1 200 OK
...
Set-Cookie:status=1
이제 요청이 다음과 같이 조작된 입력으로 수정되었다고 가정해 보겠습니다:
http://f5.com/index.html?status=1<CRLF><CRLF><html><body><script>~</script></body></html>
웹 애플리케이션의 HTTP 응답은 다음과 같이 변경됩니다:
HTTP/1.1 200 OK
...
Set-Cookie:status=1
<빈 줄>
<html><body><script>~</script></body></html>
HTTP 응답에서는 두 개의 CRLF 문자(빈 줄) 뒤에 오는 모든 콘텐츠가 응답 본문으로 처리되어 브라우저에 렌더링됩니다. 응답 본문에 악성 JavaScript가 포함되어 있으면 브라우저가 이를 실행하므로 보안 침해로 이어질 수 있습니다. 또한 공격자는 다음과 같은 헤더 콘텐츠를 삽입하도록 입력을 조작할 수 있습니다:
<CRLF>Set-Cookie:PHPSESSID=abc
이렇게 하면 브라우저에 특정 세션 ID가 설정되어 세션 고정 공격이 가능해집니다.
HTTP 헤더 인젝션을 방지하는 방법:
- 정제: HTTP 요청 헤더로 전달된 매개변수를 검증하고 정제하여 악성 문자열을 무력화합니다.
- 웹 애플리케이션 방화벽(WAF): 모든 웹 애플리케이션에 일관되게 입력값 정제 조치를 적용하기는 어렵기 때문에 WAF를 도입하는 것이 효과적인 해결책입니다. WAF는 애플리케이션 계층의 트래픽을 모니터링하고 공격으로 판단되는 요청을 차단하여 HTTP 헤더 인젝션 위험을 완화할 수 있습니다.

