Hi Scott,
Thank you for your message!
HTTP request smuggling leverages the differences in how web servers handle HTTP request headers. Specifically, it targets the Content-Length and Transfer-Encoding headers, which indicate the length of the HTTP message body. When these headers are manipulated, servers might process the request differently, causing desynchronization between the front-end (proxy) and back-end servers.
Example ScenarioConsider a scenario with a front-end proxy server and a back-end application server:
Normal Request Handling:- The client sends a request to the proxy server.
- The proxy server forwards the request to the back-end server.
- The back-end server processes the request and sends the response back to the client via the proxy.
HTTP Request Smuggling Attack:- The attacker crafts a malicious request with conflicting Content-Length and Transfer-Encoding headers.
- The front-end proxy server interprets the request in one way (e.g., using the Transfer-Encoding header), while the back-end server interprets it differently (e.g., using the Content-Length header).
Detailed ExampleAttacker's Malicious Request:
POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 13
Transfer-Encoding: chunked
0
GET /admin HTTP/1.1
Host: vulnerable-website.com
Front-End Proxy Interpretation:- The proxy sees Transfer-Encoding: chunked and processes the request as chunked.
- It interprets 0 as the end of the request body and forwards the remaining part (GET /admin HTTP/1.1) as a new request to the back-end server.
Back-End Server Interpretation:- The back-end server uses the Content-Length: 13 header to determine the length of the request body.
- It processes the POST request with a body of 0\r\nGET /admin and treats GET /admin HTTP/1.1 as a separate request.
Differences in ResponseNormal Response:HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 123
(HTML content for /home)
Smuggled Response:First Response (to the POST request):
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 45
(HTML content indicating the POST request is processed)
Second Response (to the smuggled GET request):
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 67
(HTML content for /admin)
Explanation of DifferencesNormal Request Processing:- The server processes each request individually as expected.
- The response corresponds directly to the requested resource.
Smuggled Request Processing:- The front-end proxy interprets the malicious request as two separate requests due to the smuggled content.
- The back-end server also processes what it thinks are two legitimate requests.
- The first response is for the POST / request, which may be benign or cause minor disruptions.
- The second response is for the GET /admin request, which could expose sensitive information or unauthorized content.
I hope this makes sense. I can only give you an idea or explain how this works but doing a false positive analysis is out of the scope of my technical support duties. Based on this explanation and your own false positive analysis, if you think that the issue is most likely a false positive, then you can mark it as false positive and it won't be shown in the report of the scan.