HTTP Request Smuggling 99
cyphersteve writes "Multiple vendors are vulnerable to a new class of attack named 'HTTP Request Smuggling' that revolves around piggybacking a HTTP request inside of another HTTP request, which could let a remote malicious user conduct cache poisoning, cross-site scripting, session hijacking, as well as bypassing web application firewall protection and other attacks. HTTP Request Smuggling works by taking advantage of the discrepancies in parsing when one or more HTTP devices are between the user and the web server. CERT has ranked this attack and the associated vulnerabilties found in multiple products as High Risk. The authors (Amit Klein, Steve Orrin, Ronen Heled, and Chaim Linhart) have published a whitepaper describing this technique in detail."
Re:Problem reading the PDF... (Score:3, Funny)
I AC posted the article (Score:2)
Re:Problem reading the PDF... (Score:1)
http://www.p45rant.net/boards/attachment.php?atta
Re:Problem reading the PDF... (Score:1)
Re:Problem reading the PDF... (Score:4, Informative)
http://www.gatech-edu.org/HTTP-Request-Smuggling.
Re:Problem reading the PDF... (Score:2)
Re:Problem reading the PDF... (Score:1)
Is this some oddball splinter webpage, or what?
Validation (Score:3, Funny)
This shouldn't become a speed problem on broadband machines because it'll only mean 2 or 3 times more packets (but you can always increase packet size).
Call the new standard something like HTTPS 2.0.
Re:Validation (Score:3, Insightful)
Re:Validation (Score:2, Insightful)
Are you serious?!?!? This could kill an already decently loaded web-server.
If it's twice as many packets, that's doubling the workload!
Also, I think you mis-read the issue. The issue isn't someone hijacking someone elses HTTP request, it's someone who wants to attack a server by sending a request inside there own request, in which case the checksum
Ah! (Score:3, Funny)
Everybody likes snuggling.
Re:Validation (Score:2)
Now you have both typing and and conversational math. You will go far.
Re:Validation (Score:1, Offtopic)
I was about to cut and paste your "and and", then say "You will not." Unfortunately I cannot, so the rest of this post is not directed at you. Instead it is a rant about Firefox.
One of Firefox's NUMEROUS bugs just bit, and I can no longer cut and paste!
Somebody kindly fix Firefox's NUMEROUS MEMORY LEAKS!
Jesus, now I can NOT use the goddamn APOSTROPHE without it jumping to the FIND bar!
If this shit keeps up, it IS back to Opera!
Mozilla, STOP adding FEATURES until you FIX THE FUCKING BUGS!
Re:Validation (Score:2, Informative)
That's already what Apache does (Score:3, Informative)
Apache already does this. Multiple content-length fire an error, as well as
requests using chunked transfer-encoding.
You're forced to trust Content-Length because it's the only way to know when
to stop reading. It's just as if you proposed to be less trusting on the length
field in an IP packet.
Willy
Re:That's already what Apache does (Score:2, Insightful)
Re:Validation (Score:3, Insightful)
LK
Re:Validation (Score:3, Informative)
There are already some simple proposals [ibm.com] that go a long way to solving the man in the middle issue already, without resorting to grossly inefficient schemes such as yours (or HTTPS). The problem is in getting them adopted.
Re:and here's where... (Score:5, Interesting)
Microsoft does write a few good lines of code.
Re:and here's where... (Score:1)
Re:and here's where... (Score:1)
Apache:
Re:and here's where... (Score:2, Funny)
AC:
Don't worry, we fired the guy who did this on the spot. Thanks for bringing it to our attention.
Signed,
Bill
Re:and here's where... (Score:1)
Then again, this is slashdot... I guess I shouldn't expect people to understand things.
This has been going on for some time. (Score:2, Flamebait)
how is this flamebait, exactly? (eom) (Score:2)
Article Text (Score:4, Informative)
HTTP REQUEST SMUGGLING
CHAIM LINHART (chaiml@post.tau.ac.il)
AMIT KLEIN (aksecurity@hotpop.com)
RONEN HELED
AND STEVE ORRIN (sorrin@ix.netcom.com)
A whitepaper from Watchfire
TABLE OF CONTENTS
Abstract 1
Executive Summary 1
What is HTTP Request Smuggling? 2
What damage can HRS inflict? 2
Example #1: Web Cache Poisoning 4
Example #2: Firewall/IPS/IDS evasion 5
Example #3: Forward vs. backward HRS 7
Example #4: Request Hijacking 9
Example #5: Request Credential Hijacking 10
HRS techniques 10
Protecting your site against HRS 19
Squid 19
Check Point FW-1 19
Final note regarding solutions 19
About Watchfire 20
References 21
Copyright © 2005 Watchfire Corporation. All Rights Reserved. Watchfire, WebCPO, WebXM,
WebQA, Watchfire Enterprise Solution, WebXACT, Linkbot, Macrobot, Metabot, Bobby,
Sanctum, AppScan, the Sanctum Logo, the Bobby Logo and the Flame Logo are trademarks or
registered trademarks of Watchfire Corporation. GómezPro is a trademark of Gómez, Inc., used
under license. All other products, company names, and logos are trademarks or registered
trademarks of their respective owners.
Except as expressly agreed by Watchfire in writing, Watchfire makes no representation about the
suitability and/or accuracy of the information published in this whitepaper. In no event shall
Watchfire be liable for any direct, indirect, incidental, special or consequential damages, or
damages for loss of profits, revenue, data or use, incurred by you or any third party, arising from
your access to, or use of, the information published in this whitepaper, for a particular purpose.
www.watchfire.com
HTTP REQUEST SMUGGLING
© Copyright 2005. Watchfire Corporation. All Rights Reserved. 1
ABSTRACT
This document summarizes our work on HTTP Request Smuggling, a new attack technique that has
recently emerged. We'll describe this technique and explain when it can work and the damage it can do.
This paper assumes the reader is familiar with the basics of HTTP. If not, the reader is referred to the
HTTP/1.1 RFC [4].
EXECUTIVE SUMMARY
We describe a new web entity attack technique - "HTTP Request Smuggling." This attack technique, and
the derived attacks, are relevant to most web environments and are the result of an HTTP server or device's
failure to properly handle malformed inbound HTTP requests.
HTTP Request Smuggling works by taking advantage of the discrepancies in parsing when one or more
HTTP devices/entities (e.g. cache server, proxy server, web application firewall, etc.) are in the data flow
between the user and the web server. HTTP Request Smuggling enables various attacks - web cache
poisoning, session hijacking, cross-site scripting and most importantly, the ability to bypass web application
firewall protection. It sends multiple specially-crafted HTTP requests that cause the two attacked entities to
see two different sets of requests, allowing the hacker to smuggle a request to one device without the other
device being aware of it. In the web cache poisoning attack, this smuggled request will trick the cache
server into unintentionally associating a URL to another URL's page (content), and caching this content for
the URL. In the web application firewall attack, the smuggled request can be a worm (like Nimda or Code
Red) or buffer overflow attack targeting the web server. Finally, because HTTP Request Smuggling enables
the attacker to insert or sneak a request into the flow, it allows the attacker to manipulate the web server's
request/response sequencing which can allow for credential hijacking and other malicious outcomes.
HTTP REQUEST SMUGGLING
© Copyright 2005. Watchfire Corporation. All Rights Reserved. 2
WHAT IS HTTP REQUEST SMUGGLING?
HTTP Request Smuggling ("HRS") is a new hacking technique that targets HTTP devices. Indeed, whenever
HTTP requests originating from a client pass through
Re:Article Text -- Karma whoring???? (Score:2)
patent blanket! (Score:2, Funny)
Re:Old news... (Score:2)
-Pan
Re:Old news... (Score:2)
Re:Old news... (Score:2)
Re:Old news... (Score:1, Offtopic)
piggybacking (Score:2, Funny)
Why is this news? (Score:1, Insightful)
Re:Why is this news? (Score:2)
Re:Why is this news? (Score:5, Insightful)
The attack allows attack worse than XSS if an XSS vulnerability exists since this time, it doesn't require you to intereact with the client. It allows cache poisoning. It allows you to smuggle data past some firewall/filters that try to prevent HTTP attacks by parsing requests, for example, so servers will filter out GET requests like
This exploits the fact that the cache server/firewall and webserver might parse the same request different when it has two "Content Length:" in it... Read the paper.
Re:Why is this news? (Score:1, Troll)
Use a webserver that's not subject to
Re: (Score:2)
Re:Prediction (Score:1, Insightful)
Your post would make alot more sense if the article was mentioned on CNN.com or the like, but not here.
I think this appeared in DDJ sometime ago... (Score:1)
Re:I think this appeared in DDJ sometime ago... (Score:1)
This is Request Smuggling, different method completely but some of the same outcomes are possible.
Question of Compatibility vs. Reliability (Score:5, Insightful)
This exploit is interesting, and is related to a cultural issue: how do you handle malformed input?
There are two basic approached to this: either you reject it (the sound, security-concious way), or you attempt to make sense of it (the compatible way). The second solution allows your software to interface with badly-written external code, at the cost of interfacing with intentionally malformed requests like the exploit the describe.
The reason the exploit works is that different people have different methods for determining what the sender of the malformed packet really meant, and if two different interpretations are applied to the same packet you can use the resulting "confusion" to your advantage. Different recount results which depend on guessing "voter intent" from malformed ballots in Florida comes to mind.
Re:Question of Compatibility vs. Reliability (Score:5, Insightful)
A good example of this is how the legal system works. When a court makes a decision on the application of a law to an unclear situation, that becomes part of the case law, such that there is a consistent interpretation, rather than an ambiguous situation being interpreted randomly each time it occurs.
Re:Question of Compatibility vs. Reliability (Score:1)
Ok, here's a good example: you're statement seems malformed to me--at least the content of your statement makes no sense and, is a near total non sequitor. Maybe it's meant to be mean, or maybe it's meant to be a joke. Whatever. What I would normally choose to do with such input is either ignore (reject) it, or ask for clarification.
In thise case (obviously) I've chosen to make an example of it instead.
Re:Question of Compatibility vs. Reliability (Score:1)
That's what this attack exploits: two interpretations of what is 'correctly-formed input'. The cache/proxy looks at the request and says "yep looks good" and sends it on. It sees valid input. The workstation, on the other hand, takes the same request and sees something different, hence the exploit. It won't make a difference if the cache/proxy rewrites it or not, because it will simply repeat the attack to the workstation. If you mean t
Be very careful (Score:5, Funny)
Re:Be very careful (Score:1)
Possible way to burn down RSS? (Score:3, Interesting)
Re:Possible way to burn down RSS? (Score:2)
Quick Summary (Score:5, Informative)
I'm sure that all of these problems will be quickly patched. All of these issues would be fixed by tighter HTTP parsing specifications. However, buggy software will always exist, and always be exploited.
Re:Quick Summary (Score:2)
crappy firewall/proxy software does a crappy job at parsing pipelined HTTP and allows people to get at banned content or to have their caches poisoned. You wouldn't expect them to do a half-assed job, as it's their entire purpose in life to make sure malicious traffic doesn't occur, so the least they could do is strict parsing.
Webservers do a better job of parsing HTTP headers, and where they fail, it just results in an additional request that's interpreted as per usual, so no
Re:Quick Summary (Score:2)
Re:Quick Summary (Score:3, Insightful)
You mean HTTP, right?
Hype it up? (Score:1, Insightful)
Why not just issue seperate advisories and inform the respective vendors? Seems to me like they bundled multiple flaws in multiple products so they could be creditied with discovering a new class of vulnerability.
Re:Hype it up? (Score:4, Insightful)
Because the whole point of this type of vulnerability is undesired interaction between different implementations of the same protocol. No single product will ever be vulnerable and each and every vendor might well point to the next one saying it's their fault.
publicfile (Score:3, Insightful)
Well this is not good (Score:2, Insightful)
Conclusion: We have seen that there are many pairs (proxy/firewall servers and web servers) of vulnerable systems. Particularly, we demonstrated that the following pairs are vulnerable: PCCA o IIS/5.0 o Tomcat 5.0.19 (probably with Tomcat 4.1.x as well) Squid 2.5stable4 (Unix) and Squid 2.5stable5 for NT o IIS/5.0 o WebLogic 8.1 SP1 Apache 2.0.45 o IIS/5.0 o IS/6.0 o Apache 1.3.29 o Apache 2.0.45 o WebSphere 5.1 and 5.0 o WebLogic 8.1 SP1 o Oracle9iAS web server 9.0.2 o SunONE web server 6.1
Tomcat workaround (Score:2)
Working example available? (Score:2)
Re:Working example available? (Score:2, Interesting)
Side question: who feeds the script kiddies their "1337 h4x0ring t00ls" anyway? What's in it for them to give weapons to the little bastards? I assume it isn't for the money since I would think that an unknown exploit technique would be immensly valuable in that regard. Is it for the sheer destruction of the thing without the fingerprints?
Re:Working example available? (Score:2)
Re:Working example available? (Score:1, Flamebait)
PCCA?? (Score:2, Interesting)
Re:PCCA?? (Score:1)
Re:PCCA?? (Score:2, Informative)
Smuggling, eh? (Score:1)
"Be liberal in what you accept", but not a slut! (Score:2)
The fault here lies with broken HTTP implementations, not with the protocol or with interactions between compliant implementations. Taking just the first example from the paper, any implementation that receives 2 "Content-Length" headers should reject the request because it's an illegal format.
is exactly the same as
by the multiple-header rule (RFC 2616 sec. 4.2), but Content-Length doesn't allow multiple values (ibid sec. 14.13).