Name |
HTTP Request Splitting |
|
Likelyhood of attack |
Typical severity |
Medium |
High |
|
Summary |
HTTP Request Splitting (also known as HTTP Request Smuggling) is an attack pattern where an attacker attempts to insert additional HTTP requests in the body of the original (enveloping) HTTP request in such a way that the browser interprets it as one request but the web server interprets it as two. There are several ways to perform HTTP request splitting attacks. One way is to include double Content-Length headers in the request to exploit the fact that the devices parsing the request may each use a different header. Another way is to submit an HTTP request with a "Transfer Encoding: chunked" in the request header set with setRequestHeader to allow a payload in the HTTP Request that can be considered as another HTTP Request by a subsequent parsing entity. A third way is to use the "Double CR in an HTTP header" technique. There are also a few less general techniques targeting specific parsing vulnerabilities in certain web servers. |
Prerequisites |
User-manipulateable HTTP Request headers are processed by the web server |
Execution Flow |
Step |
Phase |
Description |
Techniques |
1 |
Explore |
[Investigate Target Environment] Determine the technologies used in the target environment such as types of browsers, web servers, application firewalls, proxies, etc. |
- Investigation of the target environment to determine the types of technologies used to parse the incoming HTTP requests. Attempt to understand how HTTP Request headers are parsed
|
2 |
Exploit |
[Post a malicious HTTP Request] Post a malicious HTTP request that will be interpreted as multiple HTTP requests when parsed on the server |
- Post a malicious HTTP Request utilizing double CR/LF characters in HTTP header to cause request splitting
- Post a malicious HTTP Request utilizing "Transfer Encoding: chunked" in the request header to cause request splitting
- Post a malicious HTTP Request utilizing double Content-Length headers to cause request splitting
|
|
Solutions | Make sure to install the latest vendor security patches available for the web server. If possible, make use of SSL. Install a web application firewall that has been secured against HTTP Request Splitting Use web servers that employ a tight HTTP parsing process |
Related Weaknesses |
CWE ID
|
Description
|
CWE-444 |
Inconsistent Interpretation of HTTP Requests ('HTTP Request Smuggling') |
|
Related CAPECS |
CAPEC ID
|
Description
|
CAPEC-34 |
This attack uses a maliciously-crafted HTTP request in order to cause a vulnerable web server to respond with an HTTP response stream that will be interpreted by the client as two separate responses instead of one. This is possible when user-controlled input is used unvalidated as part of the response headers. The target software, the client, will interpret the injected header as being a response to a second request, thereby causing the maliciously-crafted contents be displayed and possibly cached. |
CAPEC-220 |
An adversary takes advantage of weaknesses in the protocol by which a client and server are communicating to perform unexpected actions. Communication protocols are necessary to transfer messages between client and server applications. Moreover, different protocols may be used for different types of interactions. For example, an authentication protocol might be used to establish the identities of the server and client while a separate messaging protocol might be used to exchange data. If there is a weakness in a protocol used by the client and server, an attacker might take advantage of this to perform various types of attacks. For example, if the attacker is able to manipulate an authentication protocol, the attacker may be able spoof other clients or servers. If the attacker is able to manipulate a messaging protocol, the may be able to read sensitive information or modify message contents. This attack is often made easier by the fact that many clients and servers support multiple protocols to perform similar roles. For example, a server might support several different authentication protocols in order to support a wide range of clients, including legacy clients. Some of the older protocols may have vulnerabilities that allow an attacker to manipulate client-server interactions. |
|
Taxonomy: WASC |
Entry ID
|
Entry Name
|
24 |
HTTP Request Splitting |
|