Re: Sections 3.3.2 and 3.3.3 allow bogus Content-Length?

"Adrien de Croy" <adrien@qbik.com> Tue, 14 February 2017 22:16 UTC

Return-Path: <ietf-http-wg-request+bounce-httpbisa-archive-bis2juki=lists.ie@listhub.w3.org>
X-Original-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Delivered-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 36DB11298BC for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Tue, 14 Feb 2017 14:16:35 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.902
X-Spam-Level:
X-Spam-Status: No, score=-6.902 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dSdrWmLpC45s for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Tue, 14 Feb 2017 14:16:33 -0800 (PST)
Received: from frink.w3.org (frink.w3.org [128.30.52.56]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 9917C129863 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Tue, 14 Feb 2017 14:16:33 -0800 (PST)
Received: from lists by frink.w3.org with local (Exim 4.80) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1cdlMr-0002co-Cq for ietf-http-wg-dist@listhub.w3.org; Tue, 14 Feb 2017 22:14:37 +0000
Resent-Date: Tue, 14 Feb 2017 22:14:37 +0000
Resent-Message-Id: <E1cdlMr-0002co-Cq@frink.w3.org>
Received: from mimas.w3.org ([128.30.52.79]) by frink.w3.org with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <adrien@qbik.com>) id 1cdlMn-0002bS-FR for ietf-http-wg@listhub.w3.org; Tue, 14 Feb 2017 22:14:33 +0000
Received: from smtp.qbik.com ([122.56.26.1]) by mimas.w3.org with esmtps (TLS1.2:ECDHE_RSA_ARCFOUR_128_SHA1:128) (Exim 4.84_2) (envelope-from <adrien@qbik.com>) id 1cdlMg-0006mH-Gy for ietf-http-wg@w3.org; Tue, 14 Feb 2017 22:14:28 +0000
Received: From [192.168.1.146] (unverified [192.168.1.146]) by SMTP Server [192.168.1.3] (WinGate SMTP Receiver v9.0.4 (Build 5915)) with SMTP id <0000964502@smtp.qbik.com>; Wed, 15 Feb 2017 11:13:56 +1300
From: Adrien de Croy <adrien@qbik.com>
To: Willy Tarreau <w@1wt.eu>
Cc: Loïc Hoguin <essen@ninenines.eu>, "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>
Date: Tue, 14 Feb 2017 22:13:56 +0000
Message-Id: <em50e83819-e706-444a-bfa2-ef7a4ee8e4fd@bodybag>
In-Reply-To: <20170214220504.GC30715@1wt.eu>
References: <emdcb96fc0-0d2f-436c-9f1f-05beffe7593e@bodybag> <e01c4945-1116-d258-7004-ea917843bf3d@ninenines.eu> <ema747b801-6dcc-4b2d-ac95-9a027e10c0b4@bodybag> <20170214220504.GC30715@1wt.eu>
Reply-To: Adrien de Croy <adrien@qbik.com>
User-Agent: eM_Client/7.0.27943.0
Mime-Version: 1.0
Content-Type: text/plain; format="flowed"; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=122.56.26.1; envelope-from=adrien@qbik.com; helo=smtp.qbik.com
X-W3C-Hub-Spam-Status: No, score=-4.7
X-W3C-Hub-Spam-Report: AWL=-0.814, BAYES_00=-1.9, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, W3C_AA=-1, W3C_WL=-1
X-W3C-Scan-Sig: mimas.w3.org 1cdlMg-0006mH-Gy 1944380ca6825ffc43052073ed7d87a4
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Sections 3.3.2 and 3.3.3 allow bogus Content-Length?
Archived-At: <http://www.w3.org/mid/em50e83819-e706-444a-bfa2-ef7a4ee8e4fd@bodybag>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/33500
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <http://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>


------ Original Message ------
From: "Willy Tarreau" <w@1wt.eu>
To: "Adrien de Croy" <adrien@qbik.com>
Cc: "Loïc Hoguin" <essen@ninenines.eu>; "ietf-http-wg@w3.org" 
<ietf-http-wg@w3.org>
Sent: 15/02/2017 11:05:04 AM
Subject: Re: Sections 3.3.2 and 3.3.3 allow bogus Content-Length?

>On Tue, Feb 14, 2017 at 09:12:38PM +0000, Adrien de Croy wrote:
>>
>>  I did quote that section, but it doesn't define what an invalid C-L 
>>is.
>>
>>  Nowhere does it explicitly state that C-L value must equal the body 
>>size in
>>  order to be valid.  Sure it should be obvious, but the language at 
>>the start
>>  of 3.3.2 doesn't help there.
>>
>>  It says
>>
>>  "Any Content-Length field value greater than or equal to zero is
>>  valid."
>>
>>  well no, to be valid it must match the body size.
>
>In fact that's not true. It's not the content-length that matches the
>body size, it's the body which ends after the content-length. So 
>whatever
>numeric value >= 0 is indeed valid *and* defines the body size.
I think there's an argument you could make against this.

If the C-L is smaller than the transmitted body, then the remainder 
after C-L bytes is processed as an invalid new request, or maybe 
smuggling request.

If the C-L is larger than the transmitted body then the message is 
incomplete.  In a response message the connection would need to be 
closed, and in a request message there's no recovery from this.

An implementation may choose to just truncate the message at C-L bytes 
of body, but this is an implementation decision, not necessarily a 
specification?

I think it should be made clear that for the body and C-L to be both 
correct in terms of framing, the C-L value must match the size of the 
body in bytes, if there's a mis-match you can't claim C-L is correct.


>
>
>>  The first sentence in 3.3.2
>>
>>  "When a message does not have a Transfer-Encoding header field, a
>>  Content-Length header field can provide the anticipated size, as a
>>  decimal number of octets, for a potential payload body."
>>
>>  "can provide"???
>>  "anticipated size"???
>>  "potential payload body"???
>
>I think that's for 304 or responses to HEAD. Though out of the context,
>the wording looks scary.

Where did we end up with C-L on 304 responses?  I didn't think it was 
another case like HEAD where the 304 is the size of what would have been 
sent?


>
>
>Regardless the text explaining how to determinate the body size (hence
>where it stops once you've found where it starts) is pretty clear and
>I hardly see how to interpret it differently.
>
>You can make a parallel with a piece of string. Tell him "I'm giving 
>you
>2 meters of string, just pull it and cut at 2 meters, this is your 
>body,
>and what remains in my hand is mine and is not your body ; if I don't
>tell you where to cut before pulling, you pull everything until I run
>out of it and only then you can determine the length".
>
>Anyway it's sad to see that there are people having so many 
>difficulties
>understanding so obvious concepts and that such people are allowed to
>demand that a technical component works one way or another...

Or telling others this is how it works in a public Q&A forum.  It 
doesn't help anyone for this interpretation to propagate.

Adrien

>
>
>Willy
>