On 02/26/2014 09:51 PM, Amos Jeffries wrote:
> While checking the code against HTTPbis Range draft I think we have a
> possible smuggling avenue being enabled by Squid in the form of the
> Request-Range header.
> 
> What I can see there in Squid is parsing Request-Range into the same
> memory structures as Range. Each time teh header is encountered erasign
> prior headers data. Then forwarding the results upstream under the name
> Range.
> 
> Only one range header is specified. Multiple is udnefined behaviour. So
> the following request may be interpreted differently by other
> participants seeing:
> 
>  GET / HTTP/1.1
>  Range: bytes=0-1000
>  Request-Range: bytes=257-1000
> 
> 
> * Squid will effectively strip the Range: header and relay the
> Request-Range value in Range: upstream.
> 
> * agents closer to the client may be interpreting that as only Range:
> header plus unknown header.
> 
> Content-Range on the reply should be sorting out what is actually
> delivered so no problems are visible. But any protection based on the
> request could be confused or tricked into not processing the reply if it
> was only checking based on the RFC standard Range header.
> 
> 
> This type of crafted request will also have the same behaviour in Squid:
> 
>  GET / HTTP/1.1
>  Range: bytes=0-1000
>  Range: bytes=257-1000
> 
> 
> The proposal(s):
> 
> A) treating the Request-Range header as obsolete and erasing it without
> processing?
> 
> The only mentions I can find online are CVE-2011-3192 about a
> Flash+Apache vulnerability meaning the header had to be blocked from
> sending by Flash and XHR mechanisms plus documentation relating. And
> that its a legacy header from the days of MSIE 3.0 and Nescape.
>   So it looks like a candidate for dropping some more code.
> 
> 
> B) treating multiple Range headers as an error and dropping them all.

Unless they are the same perhaps? I am worried about existing HTTP
clients (unknown to me) sending double Ranges (for no good reason).
There is no compelling reason to drop all Ranges if they are identical,
I think. We can leave and honor one of them.


> This would result in Request-Range being treasted somewhat like
> Proxy-Connection has been for some time. Either upgraded when its alone,
> or dropped if there is a collision.
> 
> 
> FWIW: the specification says any proxy MAY drop Range at its choice. So
> we are permitted to erase this traffic brokenness in either of the above
> ways.

Do you propose to hard-code actions (a) and (b)? Will some existing or
new option control this behavior?


Thank you,

Alex.

Reply via email to