1. HTTP request smuggling (aka HTTP Desync Attacks) 소개

2005년 최초 발견되고 주목을 받지 못하다가,

2019년 Black Hat USA 에서 PortSwigger Web Security’s director of research James Kettle 분이 HTTP Desync Attacks 발표 후 주목받기 시작함.

HTTP Desync Attacks

HTTP Desync Attacks 는 프론트와 백엔드가 나뉘어 동작하는 웹서버에서 각 서버가 받아들이는 Request의 내용이 다를 때 발생하는 취약점을 말합니다.

그림 출처: https://portswigger.net/web-security/request-smuggling

그림 출처: https://portswigger.net/web-security/request-smuggling

HTTP body 길이

HTTP body 길이를 알려주기 위해서 HTTP 헤더에 Content-Length 혹은 Transfer-Encoding 를 사용하게 됩니다.

  1. Content-Length(=CL) 사용

  2. Transfer-Encoding(=TE) 사용

다수 body 길이 알려주는 헤더를 사용하여 WAF(웹 방화벽) 우회

body 길이를 알려주는 헤더를 중복해서 사용한다.

아래 처럼 CL 헤더를 2개를 사용하는 경우 WAF가 안쪽 'Content-Length: 1' 로 길이를 판단할 경우 body에 내용을 다 보지 못하고 오리진 서버로 전달하게 됩니다.

이후 서버는 바깥쪽 'Content-Length: 13' 을 보고 길이를 판단하여 /etc/passwd/ 를 반환합니다.

출처 https://bit.ly/37U81iX

출처 https://bit.ly/37U81iX

웹 보안 전문 회사(Imperva)의 2주 기간 동안 위처럼 Content-Length 중복 헤더 요청이 8만개 정도 모니터링 되었음.

그림 출처 https://bit.ly/37U81iX

그림 출처 https://bit.ly/37U81iX