Re: [Acme] Signature misuse vulnerability in draft-barnes-acme-04

yan <yan@eff.org> Thu, 13 August 2015 01:58 UTC

Return-Path: <yan@eff.org>
X-Original-To: acme@ietfa.amsl.com
Delivered-To: acme@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 510FD1B2F20 for <acme@ietfa.amsl.com>; Wed, 12 Aug 2015 18:58:07 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.012
X-Spam-Level:
X-Spam-Status: No, score=-7.012 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=ham
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 jvCdVFBE-i6v for <acme@ietfa.amsl.com>; Wed, 12 Aug 2015 18:58:04 -0700 (PDT)
Received: from mail2.eff.org (mail2.eff.org [173.239.79.204]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 75B411B2F1E for <acme@ietf.org>; Wed, 12 Aug 2015 18:58:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=eff.org; s=mail2; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:References:Subject:CC:To:MIME-Version:From:Date:Message-ID; bh=ObGImkjqWExUnyNTQinQ5K4TSXqfdsPOZ8zZZEDbuLw=; b=Qs2kf4xtSL03nLmoTqy2jKh2eUmT14+M/WYkDqMkgTj1N/7D9Z5QEjX/7iQAIoiGjbU6OlM1bmeRf2NJd0c7+gMfb5Fn2QfE2hWeZYeQCcQkavGkZJvLGPVhmIOGCgHZXynqT4gmGRRxw69BCvtMDn+HRKVObS7hNyGtqCx/QnY=;
Received: ; Wed, 12 Aug 2015 18:58:04 -0700
Message-ID: <55CBF9AD.4040401@eff.org>
Date: Wed, 12 Aug 2015 18:58:05 -0700
From: yan <yan@eff.org>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.7.0
MIME-Version: 1.0
To: Andrew Ayer <agwa@andrewayer.name>
References: <20150811085205.bbcd37b3b0bb0482f6522b1a@andrewayer.name> <CAL02cgRf2M0Gkqymif-=rmNG0v9hhaMC2SBiXf-n5aYiRKBnmQ@mail.gmail.com> <55CBB2D8.2080504@eff.org> <20150812161617.c777cb5bff60681afa43bedb@andrewayer.name>
In-Reply-To: <20150812161617.c777cb5bff60681afa43bedb@andrewayer.name>
Content-Type: text/plain; charset="windows-1252"; format="flowed"
Content-Transfer-Encoding: 7bit
Archived-At: <http://mailarchive.ietf.org/arch/msg/acme/6MjQBNq9_HfegywroLshvbpmT_o>
Cc: Richard Barnes <rlb@ipv.sx>, "acme@ietf.org" <acme@ietf.org>
Subject: Re: [Acme] Signature misuse vulnerability in draft-barnes-acme-04
X-BeenThere: acme@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Automated Certificate Management Environment <acme.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/acme>, <mailto:acme-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/acme/>
List-Post: <mailto:acme@ietf.org>
List-Help: <mailto:acme-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/acme>, <mailto:acme-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 13 Aug 2015 01:58:07 -0000


On 8/12/15 4:16 PM, Andrew Ayer wrote:
> On Wed, 12 Aug 2015 13:55:52 -0700
> yan <yan@eff.org> wrote:
>
>> On 8/11/15 10:52 PM, Richard Barnes wrote:
>>
>>> Smallest diff change from the current document would be simply to
>>> explicitly require validation value bound to account key that
>>> created it -- not the one the signs the response.  Since the attack
>>> requires that the attacker change keys (using recovery) after
>>> receiving the token, the attack only works if the validation is
>>> done against the new public key.  This option introduces
>>> non-trivial implementation complexity, though, since the server now
>>> has to remember what key signed the new-authorization request that
>>> caused the challenges to be issued.
>>
>> Doesn't it already have to remember this? The current instructions
>> for verifying a DNS challenge says: "1. Verify the validation JWS
>> using the account key for which this challenge was issued."
>>
>> Since the challenge was issued before the attacker initiated account
>> recovery to do the key change, the wording implies that the server
>> remembers the original key at validation time.
>
> That wording is bound to trip up implementers - in fact, a quick look
> at the Boulder source indicates it validates against the current account
> key, not the account key at the time the challenge was issued[1]

Consider us tripped. :)

>
> I think this would be a pretty fragile way to work around what is
> fundamentally a crypto problem.

Agree, I like Barnes' proposal above.

>
> Also, only DVSNI and DNS currently use this language - the wording for
> the Simple HTTP challenge is "Verify that the body of the response is
> [...] signed with the client's account key".  The wording should
> probably be clarified and made consistent among the challenges.

I see James is already fixing this: 
https://github.com/letsencrypt/acme-spec/pull/217/files.

Thanks,
Yan

>
> Regards,
> Andrew
>
> [1]
> https://github.com/letsencrypt/boulder/blob/7eae93873d394c359c371621c4e9064c9e780f19/va/validation-authority.go#L381,
> which is ultimately called from
> https://github.com/letsencrypt/boulder/blob/7eae93873d394c359c371621c4e9064c9e780f19/ra/registration-authority.go#L380,
> where the account key comes from the registration object.
>
> _______________________________________________
> Acme mailing list
> Acme@ietf.org
> https://www.ietf.org/mailman/listinfo/acme
>