2005년 발견된 HTTP Request Smuggling은 다양한 웹 서버와 프록시 서버 구성 상의 차이로 인해 발생하는 취약점이다. Content-Length와 Transfer-Encoding Header의 모호성을 악용해서 다수의 사용자로부터 수신된 HTTP Request를 처리하는 것을 방해해서 민감한 데이터에 무단 접근하거나 다른 어플리케이션 사용자를 공격할 수 있다.
Front-end가 Content-Length Header를 우선시하는 반면, Back-end는 Transfer-Encoding 헤더를 우선시하는 경우 Front-end 서버와 Back-end 서버 간의 불일치를 이용해 추가적인 Request를 삽입할 수 있게 된다.
HTTP Request Smuggling은 HTTP/1.1 프로토콜의 설계와 구현의 차이를 이용하기 때문에 로드 밸런서, 프록시, 캐시 서버 등과 같은 중간의 경유 서버에서 주로 발생되기 때문에 대규모 사용자 요청을 처리하는 환경일수록 공격의 영향도가 높다. 일반적으로 HTTP/1.1에서 발생하지만 HTTP/2를 지원하는 웹 사이트도 Back-end의 아키텍처에 따라서 공격에 취약할 수 있다.
HTTP Request Smuggling은 웹 애플리케이션 보안에서 매우 중요한 취약점 중 하나이다. 이 취약점은 웹 서버 또는 프록시 서버가 HTTP 요청을 처리하는 방식의 차이를 악용하여 발생한다. 공격자는 이를 통해 서버 간의 요청을 의도적으로 잘못 해석하게 만들고 이를 통해 권한 상승(Privilege Escalation), 세션 하이재킹(Session Hijacking), 민감한 정보 노출(Critical Info Leak) 등의 심각한 보안 문제를 유발할 수 있다. 따라서 이번 호에서는 HTTP Request Smuggling이 발생하는 원인과 이를 대응하기 위한 다양한 방안에 대해서 제시해보고자 한다.
[그림 1]은 정상적인 요청 처리를 나타낸다. 여러 사용자가 웹 서버에 HTTP 요청을 보낼 때 Front-end 서버는 요청을 올바르게 수신한 다음 Back-end 서버로 전달한다.
[그림 1] 정상적인 요청 처리
① ****사용자가 Front-end 서버에 HTTP Request를 보낸다.
② Front-end 서버는 HTTP Request를 받아서 올바르게 Back-end 서버에 전달한다.
③ Back-end 서버는 Front-end 서버에서 받은 Request를 순차적으로 처리 후 정상적인 Response를 반환한다.
④ 최종적으로 Front-end 서버는 Back-end 서버의 Response를 사용자에게 반환한다.