Re: [secdir] secdir review of draft-ietf-httpauth-basicauth-update-06

Julian Reschke <> Wed, 18 February 2015 22:19 UTC

Return-Path: <>
Received: from localhost ( []) by (Postfix) with ESMTP id 0E5371A1B5A; Wed, 18 Feb 2015 14:19:06 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id UKaMTIMBJhJk; Wed, 18 Feb 2015 14:19:01 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 552D91A1B47; Wed, 18 Feb 2015 14:19:01 -0800 (PST)
Received: from [] ([]) by (mrgmx103) with ESMTPSA (Nemesis) id 0MTSmp-1Xx51s40Ih-00SS56; Wed, 18 Feb 2015 23:18:48 +0100
Message-ID: <>
Date: Wed, 18 Feb 2015 23:18:43 +0100
From: Julian Reschke <>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
MIME-Version: 1.0
To: Daniel Kahn Gillmor <>,
References: <>
In-Reply-To: <>
Content-Type: text/plain; charset="windows-1252"; format="flowed"
Content-Transfer-Encoding: 7bit
X-Provags-ID: V03:K0:P4Um3TMahQ08+sqXfbHSGNHKDCJb9mkvR8sfWMjat5uSt8fYj2d I3pQIRzf9knYc2MvCU/hS2PaHADInHKIpgBlpE+k7v9n6A7Ki/K7AyCfjwkPPXwluoDO4VE 9yJIkQQA/c5pKRyugQnxu3e0+CesVzl1cWQ+09IzlzyanpfWuG/2oASGDYr+SkXtUpaT1SF Qfm10b0SIDoVhOKyb5B4A==
X-UI-Out-Filterresults: notjunk:1;
Archived-At: <>
Subject: Re: [secdir] secdir review of draft-ietf-httpauth-basicauth-update-06
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Security Area Directorate <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 18 Feb 2015 22:19:06 -0000

Hi Daniel,

thanks for the review. Feedback in-line.

On 2015-02-18 09:15, Daniel Kahn Gillmor wrote:
> ...
> Should recommend strong password-hashing on the server side
> -----------------------------------------------------------
> The Security Considerations section acknowledges that passwords can be
> stolen from servers, but does not encourage server operators to hash
> stored passwords with a reasonable or strong algorithm.  This document
> may not be the place to provide normative guidance on how to store
> passwords to mitigate the exposure of a password table, but perhaps a
> brief mention and an informative reference would be useful?  Many
> systems (e.g. modern nginx and apache) use 1000 iterations of salted
> MD5, but still support cleartext passwords, crypt(), and unsalted SHA-1,
> which are all terrible.
> an informative reference might point to the Password Hashing
> Competition, which documents sensible rationales for why you should use
> strong password hashing, and how to know it when you see it:
> by comparison the digest draft has a lot more about how passwords should
> be stored (even though Digest auth can offer only weaker protections for
> the password store compared to Basic auth):
> ...

I would really like to avoid talking about threads that are generic to 
password-based authentication. Optimally, the security area would have a 
document that discusses exactly these kind of things so that other specs 
can reference that. Does something like this exist?

Or do you want to propose concrete text?

> Should recommend constant-time server-side comparisons
> ------------------------------------------------------
> Servers that implement basic auth should not leak information about
> the stored password via timing of rejections.  For example, a server
> that stored cleartext passwords (which is a bad idea anyway) should
> mechanically compare the entire string instead of bytewise comparisons.
> The attack here is an attacker who guesses credentials a byte at a time,
> by making 256 initial guesses and seeing which of them gets back a
> rejection faster than the other (and iterates down the list).
> This might be less of an issue for reasonable (non-cleartext) password
> storage, but if we're not requiring strong password hashing, we should
> at least require constant time comparisons.

Do you seriously believe that the time for a string comparison is 
relevant compared to the overhead of two network hops plus encapsulation 
into HTTP messages?

> Should recommend padding the Authorization: response
> ----------------------------------------------------
> When used behind HTTPS as recommended, TLS hides the username and
> password presented.  However, it does not hide the length of the
> username and password if the other parameters of the HTTPS request are
> known.
> An active attacker who wants to learn the length of the victim's
> username and password together for a particular basic auth realm could
> force the user's browser to make HTTPS requests to a few different URLs
> within the realm and see how large the packets are.
> This could be mitigated by including whitespace padding in the client's
> Authorization: header itself up to some multiple of a blocksize (perhaps
> 256B) to obscure the length.

Actually, padding can happen anywhere in the message; it doesn't need to 
be in this header field.

It's an interesting idea; have you checked whether existing User Agents 
do this?

> UTF-8 security considerations by reference: is this OK?
> ------------------------------------------
> The Security Considerations section includes the UTF-8 security
> considerations section by reference, but doesn't call out any specific
> issues for implementers to be aware of.  the NFC canonicalization draft


> also has Security Considersations section, which is not included by
> reference:

I'll add that.

> Interaction with proxies?
> -------------------------
> There is only a passing mention of Proxy-Authenticate: and
> Proxy-Authorization: headers, so one assumes that both mechanisms should
> support this new auth-param.  It's not clear to me whether there are any
> additional security or privacy implications when this is addressed to
> proxies compared to origin servers.

I'm not aware of any.

> Section 2.2 ("reusing credentials") talks about the URI path (presumably
> for "WWW-Authenticate", but then mixes "Proxy-Authenticate" into the
> middle of that commentary.  It looks to me like "Proxy-Authenticate" is
> not intended to be scoped by the URI path (there is no mention of "in
> that space" in the sentence about Proxy-Authenticate in Section 2.2),
> but this is kind of ambiguous.  Clarification would be good.

To be frank, I don't know. My best guess is that it works exactly the 
same, so I'll add "in that space" there as well.

> Path matching?
> --------------
> Nothing in the security considerations section talks about the threat
> that motivates path matching for determination of which realm to use.
> It might be useful to spell this out explicitly:
>   * A user agent that sends the Authorization: header to URLs outside the
>     authentication scope as described in Section 2.2 may leak the user's
>     credentials

That applies to all schemes that use protection spaces and is mentioned 
in <> 

> User Agent visibility and logout?
> ---------------------------------
> Most RFCs don't talk at all about the human interface of the mentioned
> tools.
> But this draft refers briefly to interaction between the user and the
> User Agent (see step 1 on
> However, it provides no other guidance.  There are several additional
> guidelines that make basic authentication more acceptable from a privacy
> and security point of view for a typical web browser User Agent:
>   * user agents should indicate to the user when they are re-using the
>     user's authentication credentials as described in section 2.2
>     (indicating the realm, authentication scope, and user-id?)

They don't right now. Do you believe that requiring it will have any 
effect on existing UAs?

>   * user agents should not display the user's password anywhere by
>     default

That sounds pretty obvious.

>   * user agents should make it straightforward for users to clear their
>     credentials for any <realm,authentication scope,user-id>.

Define "straightforward".

> includes some of these
> guidelines; perhaps this is another include-by-reference?

All security considerations of RFC 7235 apply by definition, as this 
spec is using the framework defined by RFC 7235. I don't believe that we 
need to state this.

> Other Considerations
> ====================
> Deployment chicken-and-egg
> --------------------------
> The server has no way of knowing that the client is trying to obey the
> charset header.  For the servers mentioned in that do user-agent

Actually, it could apply heuristics. I header detection of UTF-8 is 
quire reliable.

> sniffing, it's not clear how those servers could ever know to stop
> relying on the user-agent, since the clients have no way of signalling
> their intent to use UTF-8 for the Authorization header.  If the servers
> don't know when to start accepting UTF-8 from these clients, then the
> clients also have no way of knowing when they should switch over
> themselves.  This strikes me as a recipe for stalled adoption, since
> "user agents in the latter group" (from section B.3) will never use
> UTF-8, even if they know about it.

I don't see why the server can't just start accepting UTF-8 right away.

> If we want to avoid the adoption stall, we might need more forceful
> language to discourage user agents from trying to guess whether they are
> in "the latter group"

Do you believe that will affect what existing sites do today?

> User IDs with Colons
> --------------------
> The draft says "a user-id containing a colon character is invalid" --
> why not say that "the user-id MUST NOT contain a colon character", as it
> already does for control characters?

I don't think it really matters how we say it (both have exactly the 
same normative power), but I agree it would be better for consistency.

> Nits
> ====
>   * in B.3, "Authentication on these sites will stop to work" should be
>     "Authentication on these sites will stop working"


Best regards, Julian