F5 용어집

HTTP 헤더 삽입

HTTP 헤더 주입이란 무엇인가요?

HTTP 헤더 주입은 웹 애플리케이션의 취약점을 악용하는 공격 방법입니다. 공격자는 웹 서버로 전송되는 HTTP 요청에 캐리지 리턴 및 줄 바꿈(CRLF) 문자 등의 악성 문자열을 삽입하여 HTTP 응답을 조작할 수 있습니다. 사용자가 제공한 매개변수를 정제하지 않고 HTTP 응답 헤더에 직접 저장하는 웹 애플리케이션은 이러한 유형의 공격에 특히 취약합니다.

예를 들어, 브라우저가 매개변수와 함께 다음 요청을 보내는 시나리오를 생각해 보세요.

http://f5.com/index.html?status=1

웹 애플리케이션이 세션 관리를 위해 status=1 매개변수를 사용하려는 경우 다음과 같은 HTTP 응답을 반환할 수 있습니다.

HTTP/1.1 200 확인
...
쿠키 설정:상태=1

이제 요청이 다음과 같은 작성된 입력으로 수정되었다고 가정해 보겠습니다.

http://f5.com/index.html?status=1<CRLF><CRLF><html><body><script>~</script></body></html>

웹 애플리케이션의 HTTP 응답은 다음과 같이 변경됩니다.

HTTP/1.1 200 확인
...
쿠키 설정:상태=1
<빈 줄>
<html><body><script>~</script></body></html>

HTTP 응답에서 두 개의 CRLF 문자(빈 줄) 뒤에 있는 모든 내용은 응답 본문으로 처리되어 브라우저에서 렌더링됩니다. 응답 본문에 악성 JavaScript가 포함되어 있는 경우 브라우저가 이를 실행하여 잠재적인 보안 침해가 발생할 수 있습니다. 또한 공격자는 다음과 같이 헤더 콘텐츠를 삽입하기 위한 입력을 조작할 수 있습니다.

<CRLF>쿠키 설정: PHPSESSID=abc

이렇게 하면 브라우저에서 특정 세션 ID가 설정되어 세션 고정 공격이 가능해집니다.

HTTP 헤더 삽입을 방지하는 방법:

  • 살균: 악성 문자열을 무력화하기 위해 HTTP 요청 헤더에서 수신된 매개변수를 검증하고 정리합니다.
  • 웹 애플리케이션 방화벽(WAF): 모든 웹 애플리케이션을 일관되게 정리하는 것은 어렵기 때문에 WAF를 배포하는 것이 효과적인 솔루션입니다. WAF는 애플리케이션 계층 트래픽을 모니터링하고 공격으로 간주되는 요청을 차단하여 HTTP 헤더 주입 위험을 완화할 수 있습니다.