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가 설정되어 세션 고정 공격이 가능해집니다.