From nobody Sat Jun  5 09:40:01 2021
Return-Path: <jricher@mit.edu>
X-Original-To: txauth@ietfa.amsl.com
Delivered-To: txauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id 1C58B3A2863
 for <txauth@ietfa.amsl.com>; Sat,  5 Jun 2021 09:39:59 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.194
X-Spam-Level: 
X-Spam-Status: No, score=-4.194 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3,
 RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001,
 SPF_NONE=0.001, URIBL_BLOCKED=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 eK_uIA5SOwkC for <txauth@ietfa.amsl.com>;
 Sat,  5 Jun 2021 09:39:54 -0700 (PDT)
Received: from outgoing.mit.edu (outgoing-auth-1.mit.edu [18.9.28.11])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id F38EC3A2861
 for <txauth@ietf.org>; Sat,  5 Jun 2021 09:39:53 -0700 (PDT)
Received: from [192.168.1.49] (static-71-174-62-56.bstnma.fios.verizon.net
 [71.174.62.56]) (authenticated bits=0)
 (User authenticated as jricher@ATHENA.MIT.EDU)
 by outgoing.mit.edu (8.14.7/8.12.4) with ESMTP id 155GdpVU022706
 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Sat, 5 Jun 2021 12:39:52 -0400
From: Justin Richer <jricher@mit.edu>
Message-Id: <BA18D0FD-D307-4194-9195-C573D81CEBE1@mit.edu>
Content-Type: multipart/alternative;
 boundary="Apple-Mail=_F2412324-C9A6-4A6E-89C3-0AB2046BC90D"
Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.6\))
Date: Sat, 5 Jun 2021 12:39:51 -0400
In-Reply-To: <7deb4b8f-6d2e-c386-23d6-7286a5077cc6@verifiablecredentials.info>
Cc: txauth@ietf.org
To: David Chadwick <d.w.chadwick@verifiablecredentials.info>
References: <D7C06A29-9B90-4F1F-A7C0-6885E9C7D84E@mit.edu>
 <3950725f-26e5-0eb5-92bb-5e2ed977ac85@verifiablecredentials.info>
 <429623E4-5C45-474C-801A-6953E803BAE6@mit.edu>
 <7deb4b8f-6d2e-c386-23d6-7286a5077cc6@verifiablecredentials.info>
X-Mailer: Apple Mail (2.3608.120.23.2.6)
Archived-At: <https://mailarchive.ietf.org/arch/msg/txauth/63fgcpeh92erKYNxphNFt7KHik8>
Subject: Re: [GNAP] Mix Up Attack against GNAP
X-BeenThere: txauth@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: GNAP <txauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/txauth>,
 <mailto:txauth-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/txauth/>
List-Post: <mailto:txauth@ietf.org>
List-Help: <mailto:txauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/txauth>,
 <mailto:txauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 05 Jun 2021 16:39:59 -0000


--Apple-Mail=_F2412324-C9A6-4A6E-89C3-0AB2046BC90D
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

But that=E2=80=99s what I=E2=80=99m saying =E2=80=94 the client knows =
it=E2=80=99s talking to AAS and not HAS so with this kind of solution it =
would just create a message cryptographically tagged to AAS. And then on =
the next step, AAS creates a message cryptographically bound to HAS. So =
even if the client already says =E2=80=9Cthis message is for AAS=E2=80=9D =
explicitly, the attack surface doesn=E2=80=99t change. Only if the =
client thought it was talking to HAS would this make a difference, but =
that=E2=80=99s not what=E2=80=99s happening here. This, I believe, is =
what makes this kind of attack much more subtle than a simple message =
relay.

 =E2=80=94 Justin

> On Jun 5, 2021, at 11:09 AM, David Chadwick =
<d.w.chadwick@verifiablecredentials.info> wrote:
>=20
> Hi Justin
>=20
> the point I am making is that the message created by the Client must =
be received by the ultimate recipient, knowing that the Client created =
it and that the ultimate recipient is the intended recipient. In the =
current flow both recipients know they are the intended recipients, but =
also know that different clients are talking to them. Thus any solution =
must have the message originator cryptographically protecting both the =
sender and recipient addresses. Once you do this, you thwart the current =
vulnerability.
>=20
> Kind regards
>=20
> David
>=20
> On 05/06/2021 15:51, Justin Richer wrote:
>> Hi David,
>>=20
>> I think it=E2=80=99s similar to message forwarding, but there=E2=80=99s=
 one important difference =E2=80=94 the AAS already is modifying the =
message to HAS. It doesn=E2=80=99t need to forward the complete message =
from (2), it creates a brand new message in (3) and signs it with its =
own key. So the client knows it=E2=80=99s talking to AAS and vice versa, =
and AAS knows it=E2=80=99s talking to HAS and vice versa. What=E2=80=99s =
different is that AAS is able to take pieces out of the (valid) message =
from the client and make its own message out of those parts, and then =
get value out of that.
>>=20
>> But that does raise an interesting question: what if ASS :did: simply =
forward the signed message from the client to HAS? The signature method =
would need to protect the target of the HTTP request, but I think that =
should already be covered in most of the signature methods. We need to =
put some focus on these signature methods directly in the near future, =
so that=E2=80=99s something to keep in mind here.
>>=20
>>  =E2=80=94 Justin
>>=20
>>> On Jun 5, 2021, at 8:26 AM, David Chadwick =
<d.w.chadwick@verifiablecredentials.info =
<mailto:d.w.chadwick@verifiablecredentials.info>> wrote:
>>>=20
>>> This attack is similar to surreptitious forwarding (message 3). One =
solution is for the sender (Client) to identify the recipient in message =
2 so that it cannot be altered by the AAS when it creates message 3. The =
grant endpoint of the AS that the client instance is talking to would =
seem to fit this solution
>>>=20
>>> Kind regards
>>>=20
>>> David
>>>=20
>>> On 04/06/2021 15:59, Justin Richer wrote:
>>>> This week, some researchers reached out to the editors to describe =
an attack against GNAP in the front channel that=E2=80=99s inherited =
from OAuth 2. I will describe the attack, list out its preconditions, =
and then describe a proposed solution space. We=E2=80=99re looking for =
input and feedback from the group on managing this solution.
>>>>=20
>>>> But first, many thanks to =C3=85ke Axeland and Adam Omar Oueidat =
for doing this analysis, putting together the diagram below, and =
bringing it to the group=E2=80=99s attention.
>>>>=20
>>>> The attack is largely the same as one of the =E2=80=9CAS Mix Up=E2=80=
=9D attack cases in "Comprehensive Security Analysis of OAuth 2.0=E2=80=9D=
 by Daniel Fett and colleagues. It=E2=80=99s a kind of in-the-middle =
and/or phishing attack at its core.=20
>>>>=20
>>>> The attacker has their own authorization server (AAS) which can =
also act as a client instance. An uncompromised client (UC) instance and =
an uncompromised authorization server (HAS) are assumed. There is no =
compromise of secret keys or breaking of TLS in this attack.
>>>>=20
>>>> 1. UC is a client of AAS, and might also be a client of HAS. User =
wants to authorize at HAS but tells UC to use AAS.
>>>> 2. UC starts a request at AAS, signed with UC=E2=80=99s key. AAS is =
imitating HAS.
>>>> 3. AAS forwards UC=E2=80=99s request parameters (Client nonce, =
interaction finish URI) to HAS, but signed with AAS=E2=80=99s key.
>>>> 4. HAS responds with an interaction start URL and server nonce to =
AAS
>>>> 5. AAS forwards the interaction start URL and server nonce to UC
>>>> 6. (Note) HAS is functionally telling the user to show up and =
interact, but doesn=E2=80=99t realize that the request is being proxied =
in this way.
>>>> 7. UC launches interaction start url, which is a function of HAS
>>>> 8. HAS returns the verification hash and interaction reference to =
UC
>>>> 9. UC validates the hash (which is correct) and sends the =
interaction reference to AAS
>>>> 10. AAS forwards the interaction reference to HAS=20
>>>> 11. AAS receives an access token for calling an RS protected by =
HAS. The client receives no access token.
>>>>=20
>>>> The diagram from the researchers is attached here. I=E2=80=99ll be =
using the numbers in the text list here like (1) to refer to specific =
steps.
>>>>=20
>>>> <PastedGraphic-2.png>
>>>> Some preconditions and analysis:
>>>>=20
>>>> Step (1) is made easier if the client has choice over which AS to =
talk to for a given request, since that=E2=80=99s how it starts talking =
to AAS instead of HAS. The danger of allowing a client to choose its AS =
at runtime has been discussed, but it=E2=80=99s a known pattern that we =
can=E2=80=99t expect to go away.
>>>>=20
>>>> AAS is treated as a legitimate client of HAS and UC is a legitimate =
client of AAS. While dynamic clients can exacerbate this problem at =
runtime, at no time does HAS always knows the requests are coming from =
AAS and UC always knows it=E2=80=99s talking to AAS. There is no =
cryptographic impersonation and no theft of keys.=20
>>>>=20
>>>> The attack occurs because the user and client think they=E2=80=99re =
dealing with different AS=E2=80=99s, and you can=E2=80=99t expect a user =
to always be able to tell them apart, especially when the backend calls =
like (2) are hidden. It=E2=80=99s assumed that the user actually wants =
to authorize UC for HAS, but UC talks to AAS instead because of =
configuration (1). AAS can imitate HAS to the user to facilitate (1), =
and imitate UC to HAS, but only for human-facing portions (7). Static =
pre-registration makes this more difficult, assuming that all =
registrations are reviewed by humans. If HAS has no idea that UC exists, =
it wouldn=E2=80=99t necessarily know that AAS is impersonating anyone.
>>>>=20
>>>> The token at the end (11), assuming it=E2=80=99s a bound token, is =
only good with AAS=E2=80=99s key and not UC=E2=80=99s key. This is great =
for the attacker until UC starts to act funny and raise suspicion, since =
the process didn=E2=80=99t ever complete. With the OAuth attack, and =
with bearer tokens in GNAP, the token can be passed through to the UC =
making UC none the wiser.=20
>>>>=20
>>>> The hash validation (9) does not protect against this specific =
attack. Since AAS sits in the middle, it has access to the Client nonce =
from UC, the server nonce from AAS, and the interaction reference at the =
appropriate times. AAS doesn=E2=80=99t need to generate the hash, but =
can force HAS to generate an appropriate hash.
>>>>=20
>>>> The proposed mitigation(s):=20
>>>>=20
>>>> In OAuth 2, the accepted mitigation is to provide another query =
parameter with the =E2=80=9Cissuer=E2=80=9D URL of the AS. We could do =
that here, but that would have the same downsides: the client has to =
check this value explicitly. Therefore we=E2=80=99re proposing that =
instead we use the existing validation hash algorithm and add an =
additional field. This would need to be something known to UC and HAS =
that can=E2=80=99t be impersonated by AAS, even if it=E2=80=99s known. =
Therefore, it makes sense to use something that=E2=80=99s derived. There =
are a few ideas of what to do here, each with benefits and drawbacks:
>>>>=20
>>>> - The grant endpoint of the AS that the client instance is talking =
to.
>>>> - The continuation endpoint that the client instance will send the =
interaction reference to. (This might be different from the above)
>>>> - The continuation access token value
>>>> - A key hash for the AS the client is talking to (TLS key to one of =
these endpoints? Some other external key added to the mix?)
>>>>=20
>>>> The important thing here is that it=E2=80=99s a value that=E2=80=99s =
known but not a shared-secret that=E2=80=99s passed between parties. The =
client doesn=E2=80=99t need to check anything new, just needs to do the =
hash validation that it should be doing anyway.
>>>>=20
>>>> Requested feedback:
>>>>=20
>>>> The editors are requesting feedback and discussion on the attack =
and the proposed mitigation strategy. As a group, we would also benefit =
from additional formal analysis of the protocol with and without the =
mitigation in place. Additionally, we need to be sure we aren=E2=80=99t =
accidentally cutting off a legitimate use case, like AS bridges and =
proxies that aren=E2=80=99t trying to hide their presence.
>>>>=20
>>>>  =E2=80=94 Justin
>>>>=20
>>>>=20
>>> --=20
>>> TXAuth mailing list
>>> TXAuth@ietf.org <mailto:TXAuth@ietf.org>
>>> https://www.ietf.org/mailman/listinfo/txauth =
<https://www.ietf.org/mailman/listinfo/txauth>
>>=20


--Apple-Mail=_F2412324-C9A6-4A6E-89C3-0AB2046BC90D
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" class=3D"">But =
that=E2=80=99s what I=E2=80=99m saying =E2=80=94 the client knows it=E2=80=
=99s talking to AAS and not HAS so with this kind of solution it would =
just create a message cryptographically tagged to AAS. And then on the =
next step, AAS creates a message cryptographically bound to HAS. So even =
if the client already says =E2=80=9Cthis message is for AAS=E2=80=9D =
explicitly, the attack surface doesn=E2=80=99t change. Only if the =
client thought it was talking to HAS would this make a difference, but =
that=E2=80=99s not what=E2=80=99s happening here. This, I believe, is =
what makes this kind of attack much more subtle than a simple message =
relay.<div class=3D""><br class=3D""></div><div class=3D"">&nbsp;=E2=80=94=
 Justin<br class=3D""><div><br class=3D""><blockquote type=3D"cite" =
class=3D""><div class=3D"">On Jun 5, 2021, at 11:09 AM, David Chadwick =
&lt;<a href=3D"mailto:d.w.chadwick@verifiablecredentials.info" =
class=3D"">d.w.chadwick@verifiablecredentials.info</a>&gt; =
wrote:</div><br class=3D"Apple-interchange-newline"><div class=3D"">
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" =
class=3D"">
 =20
  <div class=3D""><p class=3D"">Hi Justin</p><p class=3D"">the point I =
am making is that the message created by the Client
      must be received by the ultimate recipient, knowing that the
      Client created it and that the ultimate recipient is the intended
      recipient. In the current flow both recipients know they are the
      intended recipients, but also know that different clients are
      talking to them. Thus any solution must have the message
      originator cryptographically protecting both the sender and
      recipient addresses. Once you do this, you thwart the current
      vulnerability.</p><p class=3D"">Kind regards</p><p =
class=3D"">David<br class=3D"">
    </p>
    <div class=3D"moz-cite-prefix">On 05/06/2021 15:51, Justin Richer
      wrote:<br class=3D"">
    </div>
    <blockquote type=3D"cite" =
cite=3D"mid:429623E4-5C45-474C-801A-6953E803BAE6@mit.edu" class=3D"">
     =20
      Hi David,
      <div class=3D""><br class=3D"">
      </div>
      <div class=3D"">I think it=E2=80=99s similar to message =
forwarding, but
        there=E2=80=99s one important difference =E2=80=94 the AAS =
already is modifying
        the message to HAS. It doesn=E2=80=99t need to forward the =
complete
        message from (2), it creates a brand new message in (3) and
        signs it with its own key. So the client knows it=E2=80=99s =
talking to
        AAS and vice versa, and AAS knows it=E2=80=99s talking to HAS =
and vice
        versa. What=E2=80=99s different is that AAS is able to take =
pieces out
        of the (valid) message from the client and make its own message
        out of those parts, and then get value out of that.</div>
      <div class=3D""><br class=3D"">
      </div>
      <div class=3D"">But that does raise an interesting question: what =
if
        ASS :did: simply forward the signed message from the client to
        HAS? The signature method would need to protect the target of
        the HTTP request, but I think that should already be covered in
        most of the signature methods. We need to put some focus on
        these signature methods directly in the near future, so that=E2=80=
=99s
        something to keep in mind here.</div>
      <div class=3D""><br class=3D"">
      </div>
      <div class=3D"">&nbsp;=E2=80=94 Justin<br class=3D"">
        <div class=3D""><br class=3D"">
          <blockquote type=3D"cite" class=3D"">
            <div class=3D"">On Jun 5, 2021, at 8:26 AM, David Chadwick
              &lt;<a =
href=3D"mailto:d.w.chadwick@verifiablecredentials.info" class=3D"" =
moz-do-not-send=3D"true">d.w.chadwick@verifiablecredentials.info</a>&gt;
              wrote:</div>
            <br class=3D"Apple-interchange-newline">
            <div class=3D"">
             =20
              <div class=3D""><p class=3D"">This attack is similar to =
surreptitious
                  forwarding (message 3). One solution is for the sender
                  (Client) to identify the recipient in message 2 so
                  that it cannot be altered by the AAS when it creates
                  message 3. The grant endpoint of the AS that the
                  client instance is talking to would seem to fit this
                  solution</p><p class=3D"">Kind regards</p><p =
class=3D"">David<br class=3D"">
                </p>
                <div class=3D"moz-cite-prefix">On 04/06/2021 15:59, =
Justin
                  Richer wrote:<br class=3D"">
                </div>
                <blockquote type=3D"cite" =
cite=3D"mid:D7C06A29-9B90-4F1F-A7C0-6885E9C7D84E@mit.edu" class=3D""> =
This week, some researchers reached out to
                  the editors to describe an attack against GNAP in the
                  front channel that=E2=80=99s inherited from OAuth 2. I =
will
                  describe the attack, list out its preconditions, and
                  then describe a proposed solution space. We=E2=80=99re =
looking
                  for input and feedback from the group on managing this
                  solution.
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">But first, many thanks to =C3=85ke =
Axeland
                    and Adam Omar Oueidat for doing this analysis,
                    putting together the diagram below, and bringing it
                    to the group=E2=80=99s attention.<br class=3D"">
                    <br class=3D"">
                  </div>
                  <div class=3D"">The attack is largely the same as one =
of
                    the =E2=80=9CAS Mix Up=E2=80=9D attack cases in =
"Comprehensive
                    Security Analysis&nbsp;of OAuth 2.0=E2=80=9D by =
Daniel Fett and
                    colleagues. It=E2=80=99s a kind of in-the-middle =
and/or
                    phishing attack at its core.&nbsp;</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">The attacker has their own =
authorization
                    server (AAS) which can also act as a client
                    instance. An uncompromised client (UC) instance and
                    an uncompromised authorization server (HAS) are
                    assumed. There is no compromise of secret keys or
                    breaking of TLS in this attack.</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">1. UC is a client of AAS, and might =
also
                    be a client of HAS. User wants to authorize at HAS
                    but tells UC to use AAS.</div>
                  <div class=3D"">2. UC starts a request at AAS, signed
                    with UC=E2=80=99s key. AAS is imitating HAS.</div>
                  <div class=3D"">3. AAS forwards UC=E2=80=99s request =
parameters
                    (Client nonce, interaction finish URI) to HAS, but
                    signed with AAS=E2=80=99s key.</div>
                  <div class=3D"">4. HAS responds with an interaction
                    start URL and server nonce to AAS</div>
                  <div class=3D"">5. AAS forwards the interaction start
                    URL and server nonce to UC</div>
                  <div class=3D"">6. (Note) HAS is functionally telling
                    the user to show up and interact, but doesn=E2=80=99t
                    realize that the request is being proxied in this
                    way.</div>
                  <div class=3D"">7. UC launches interaction start url,
                    which is a function of HAS</div>
                  <div class=3D"">8. HAS returns the verification hash =
and
                    interaction reference to UC</div>
                  <div class=3D"">9. UC validates the hash (which is
                    correct) and sends the interaction reference to =
AAS</div>
                  <div class=3D"">10. AAS forwards the interaction
                    reference to HAS&nbsp;</div>
                  <div class=3D"">11. AAS receives an access token for
                    calling an RS protected by HAS. The client receives
                    no access token.</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">The diagram from the researchers is
                    attached here. I=E2=80=99ll be using the numbers in =
the text
                    list here like (1) to refer to specific steps.</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D""><span =
id=3D"cid:part1.21AB5D65.AB53F1A7@verifiablecredentials.info" =
class=3D"">&lt;PastedGraphic-2.png&gt;</span></div>
                  <div class=3D""><b class=3D"">Some preconditions and
                      analysis:</b></div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">Step (1) is made easier if the client
                    has choice over which AS to talk to for a given
                    request, since that=E2=80=99s how it starts talking =
to AAS
                    instead of HAS. The danger of allowing a client to
                    choose its AS at runtime has been discussed, but
                    it=E2=80=99s a known pattern that we can=E2=80=99t =
expect to go
                    away.</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">AAS is treated as a legitimate client =
of
                    HAS and UC is a legitimate client of AAS. While
                    dynamic clients can exacerbate this problem at
                    runtime, at no time does HAS always knows the
                    requests are coming from AAS and UC always knows
                    it=E2=80=99s talking to AAS. There is no =
cryptographic
                    impersonation and no theft of keys.&nbsp;</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">The attack occurs because the user and
                    client think they=E2=80=99re dealing with different =
AS=E2=80=99s,
                    and you can=E2=80=99t expect a user to always be =
able to
                    tell them apart, especially when the backend calls
                    like (2) are hidden. It=E2=80=99s assumed that the =
user
                    actually wants to authorize UC for HAS, but UC talks
                    to AAS instead because of configuration (1). AAS can
                    imitate HAS to the user to facilitate (1), and
                    imitate UC to HAS, but only for human-facing
                    portions (7). Static pre-registration makes this
                    more difficult, assuming that all registrations are
                    reviewed by humans. If HAS has no idea that UC
                    exists, it wouldn=E2=80=99t necessarily know that =
AAS is
                    impersonating anyone.</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">The token at the end (11), assuming =
it=E2=80=99s
                    a bound token, is only good with AAS=E2=80=99s key =
and not
                    UC=E2=80=99s key. This is great for the attacker =
until UC
                    starts to act funny and raise suspicion, since the
                    process didn=E2=80=99t ever complete. With the OAuth =
attack,
                    and with bearer tokens in GNAP, the token can be
                    passed through to the UC making UC none the =
wiser.&nbsp;</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">The hash validation (9) does not =
protect
                    against this specific attack. Since AAS sits in the
                    middle, it has access to the Client nonce from UC,
                    the server nonce from AAS, and the interaction
                    reference at the appropriate times. AAS doesn=E2=80=99=
t need
                    to generate the hash, but can force HAS to generate
                    an appropriate hash.</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D""><b class=3D"">The proposed =
mitigation(s):&nbsp;</b></div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">In OAuth 2, the accepted mitigation is
                    to provide another query parameter with the =
=E2=80=9Cissuer=E2=80=9D
                    URL of the AS. We could do that here, but that would
                    have the same downsides: the client has to check
                    this value explicitly. Therefore we=E2=80=99re =
proposing
                    that instead we use the existing validation hash
                    algorithm and add an additional field. This would
                    need to be something known to UC and HAS that =
can=E2=80=99t
                    be impersonated by AAS, even if it=E2=80=99s known.
                    Therefore, it makes sense to use something that=E2=80=99=
s
                    derived. There are a few ideas of what to do here,
                    each with benefits and drawbacks:</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">- The grant endpoint of the AS that =
the
                    client instance is talking to.</div>
                  <div class=3D"">- The continuation endpoint that the
                    client instance will send the interaction reference
                    to. (This might be different from the above)</div>
                  <div class=3D"">- The continuation access token =
value</div>
                  <div class=3D"">- A key hash for the AS the client is
                    talking to (TLS key to one of these endpoints? Some
                    other external key added to the mix?)</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">The important thing here is that =
it=E2=80=99s a
                    value that=E2=80=99s known but not a shared-secret =
that=E2=80=99s
                    passed between parties. The client doesn=E2=80=99t =
need to
                    check anything new, just needs to do the hash
                    validation that it should be doing anyway.</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D""><b class=3D"">Requested =
feedback:</b></div>
                  <div class=3D""><b class=3D""><br class=3D"">
                    </b></div>
                  <div class=3D"">The editors are requesting feedback =
and
                    discussion on the attack and the proposed mitigation
                    strategy. As a group, we would also benefit from
                    additional formal analysis of the protocol with and
                    without the mitigation in place. Additionally, we
                    need to be sure we aren=E2=80=99t accidentally =
cutting off a
                    legitimate use case, like AS bridges and proxies
                    that aren=E2=80=99t trying to hide their =
presence.</div>
                  <div class=3D""><br class=3D"">
                  </div>
                  <div class=3D"">&nbsp;=E2=80=94 Justin</div>
                  <br class=3D"">
                  <fieldset class=3D"mimeAttachmentHeader"></fieldset>
                </blockquote>
              </div>
              -- <br class=3D"">
              TXAuth mailing list<br class=3D"">
              <a href=3D"mailto:TXAuth@ietf.org" class=3D"" =
moz-do-not-send=3D"true">TXAuth@ietf.org</a><br class=3D"">
              <a class=3D"moz-txt-link-freetext" =
href=3D"https://www.ietf.org/mailman/listinfo/txauth">https://www.ietf.org=
/mailman/listinfo/txauth</a><br class=3D"">
            </div>
          </blockquote>
        </div>
        <br class=3D"">
      </div>
    </blockquote>
  </div>

</div></blockquote></div><br class=3D""></div></body></html>=

--Apple-Mail=_F2412324-C9A6-4A6E-89C3-0AB2046BC90D--

