Re: [OAUTH-WG] WGLC review of PAR

Brian Campbell <bcampbell@pingidentity.com> Wed, 26 August 2020 20:05 UTC

Return-Path: <bcampbell@pingidentity.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8BC203A0AE5 for <oauth@ietfa.amsl.com>; Wed, 26 Aug 2020 13:05:19 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Level:
X-Spam-Status: No, score=-2.098 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=pingidentity.com
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 G11Z869JevvN for <oauth@ietfa.amsl.com>; Wed, 26 Aug 2020 13:05:16 -0700 (PDT)
Received: from mail-lj1-x22d.google.com (mail-lj1-x22d.google.com [IPv6:2a00:1450:4864:20::22d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 50D6D3A0ABB for <oauth@ietf.org>; Wed, 26 Aug 2020 13:05:16 -0700 (PDT)
Received: by mail-lj1-x22d.google.com with SMTP id r13so393189ljm.0 for <oauth@ietf.org>; Wed, 26 Aug 2020 13:05:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pingidentity.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Ctr/Ei5zZWU4HOKyR10CmFCA2dH+cBqJJbpLwzq5bYQ=; b=dVzdCC/6U5nbfLtie2owsrXH2poQvNX5Y9WX5ZxlpztS7WqXDbu+up8fa+j/l7WWts 2+TtgdD35rKXP17ENO1WR3jeJBNxNtF9B1fWQ7CWxf64SQ+cP5Js5emRAC2smVx37rBt o41AuUiWejscr3bXEOoPzcB/JtECQozw9K7q4/ri5s2aDGOFS9fMwHbEl1qYoBWyy5jy dQpNS46XfjYYdJEEhG9duGIHpaOM58vQ3B3bLV1ioMRgkYBXn4I7sA+qo2FlSIl9+Tdu BhB3l8KFRH3Hc6m2ATWseCCZuWlFoqqbquUK/DynQ4b8KJlwjpX1oZU66iutXMXqbhjE 06Lg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Ctr/Ei5zZWU4HOKyR10CmFCA2dH+cBqJJbpLwzq5bYQ=; b=kf3Vb7FmI+JkhaLDHLsGod79Gp7vKxmKa8Uei6TB9j3wI7v1M4EjPOPcAMxKOIg3Vk OdI8eDp/KklLycEDRsfmM5uA9L90Hhj58J2LhYHmJghYsF1mld904PbQ5pZcyTeP0ekJ a80o148tgmFJHrGFpqMTK/tKMyKN/+tL+m7FNv0D0pp/VxP0PXPGCUkLJ3HR7BwICpd9 X7jSd0YuUGujG8t/Or47sS7vKeFHdmSVFs5a8BMMAUgtJilYhC1+fS/RLy+w9CefE2/s TbI7UHK8qgnI85qZ6f1NAJUieCTTrBo3alG6ASCCvYUVslJPQjEUKguAOKnpEW/9utuW 3YrA==
X-Gm-Message-State: AOAM531IVNzLZQdAHNXwm1I0hWoHC1FUaF3lB/8b/Oh56Z6bmDivAVdt v8urFAZ+yzt04v1IGOrPrypx50Bv40+0TcbkW29/9cMeMu3BhVmmnBHuxjkSZcNR1sAMkgcXndW 9ob+HQyUaD91waQ==
X-Google-Smtp-Source: ABdhPJzeng9Op0SPGwC0wv0+qLUUd0MQu6IwAXcyK2hsKIx71jaP29VVf+uGfbbF4gKb0r4vdilwSDemNF3mYZN6csk=
X-Received: by 2002:a2e:390f:: with SMTP id g15mr7236203lja.280.1598472314043; Wed, 26 Aug 2020 13:05:14 -0700 (PDT)
MIME-Version: 1.0
References: <A1FC4925-3A92-4F13-B33E-280A1D703CC8@forgerock.com>
In-Reply-To: <A1FC4925-3A92-4F13-B33E-280A1D703CC8@forgerock.com>
From: Brian Campbell <bcampbell@pingidentity.com>
Date: Wed, 26 Aug 2020 14:04:47 -0600
Message-ID: <CA+k3eCSv8AVQeDPYZiNKNVmqoatubdyC1E6gKuAFwf1JRb8vFg@mail.gmail.com>
To: Neil Madden <neil.madden@forgerock.com>
Cc: oauth <oauth@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000766cf305adcd5691"
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/4VUbQttvsMtrMx9_k290bjZEZYc>
Subject: Re: [OAUTH-WG] WGLC review of PAR
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>, <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/oauth/>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>, <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 26 Aug 2020 20:05:20 -0000

Thanks Neil. Appreciate the review and feedback. My attempts at responses
are inline below.


On Thu, Aug 20, 2020 at 5:30 AM Neil Madden <neil.madden@forgerock.com>
wrote:

> As promised in the last interim meeting, I’ve reviewed the current (03)
> draft-ietf-oauth-par document. Overall it looks close to ready to me, with
> mostly minor comments and one security-relevant comment on section 2.1 that
> should be discussed further, and one additional proposed security
> consideration:
>
> Abstract:
> The wording here could be improved - “allows clients to push an
> authorization request […] used as a reference to the data in a subsequent
> authorization request.” Both the pushed data and the call to the
> authorization endpoint are referred to as an “authorization request”. Maybe
> change the second usage to “in a subsequent call to the authorization
> endpoint”.
>

Makes sense.


>
> Section 1:
> The introductory part here is quite long. Maybe adding a new sub-heading
> before the example would make it flow better.
>

Will look at breaking it up.


>
> The end of the introduction uses the acronym “PAR” for the first time, but
> never explicitly defines it.
>

Will fix.


>
> I agree with Justin that ACR is not the best example to lead with. If it
> stays there should be a reference to OIDC to explain what this means.
>

Yup.


>
> The paragraph that begins “It also allows clients to push the form encoded
> …” is confusing because the use of “also” suggests this is different from
> the previous paragraph, but it seems to actually be saying the same thing?
>

Yeah, that is rather awkward because it is the same thing. Will fix.


>
> “[…] but it also allows clients requiring
>
>    an even higher security level, especially cryptographically confirmed
>    non-repudiation, to explicitly adopt JWT-based request objects”
>
>
> The “but” should be an “and” in this paragraph. It’s also not clear what is being said here - isn’t JAR what provides JWT-based request objects?
>
>
Yeah, JAR defines JWT-based request objects and PAR allows for their use by
sending the 'request' parameter to the PAR endpoint.  Will try and make
that more clear.


>
> The paragraph beginning “As a further benefit, …” is a little bit of a Columbo moment (“Just one more thing…”) at the end of the introduction. Maybe move this as another bullet point at the start of the section. The following paragraph can then be rewritten as “The increased confidence in the identity of the client during the authorization process allows confidential clients to provide a different redirect_uri on every request. […]”
>
>
 Agree with the sentiment here and will endeavor to rework things along the
lines of the suggestion.



> Section 2:
>
> The 3rd paragraph contains statements like
>
> The endpoint also supports sending all authorization
>
>    request parameters as request object according to
>    [I-D.ietf-oauth-jwsreq <https://tools.ietf.org/html/draft-ietf-oauth-par-03#ref-I-D.ietf-oauth-jwsreq>].
>
> presumably this is not a normative requirement that any PAR implementation
> has to also support JAR, or is it? Maybe change the wording to “MAY also
> support …”.
>

Interesting question. PAR has a normative reference to JAR for the
request_uri parameter at the authz endpoint. But does that necessitate that
every PAR implementation also has to support all of JAR? I'm thinking
probably not. I mean, different but related, an AS PAR implementation might
legitimately support the request_uri parameter with URI values that it
creates but not support the more general retrieval of arbitrary URIs. In
the same vein, it seems legit and still useful to support PAR without also
supporting request object JWTs. So yeah, I think changing this to MAY or
something similar would be appropriate.


>
> The first mention of “token_endpoint_auth_method” and client metadata
> should have a reference to RFC 7591 - currently it’s only referenced later
> in section 2.1.
>

Will fix.

2.1:
> I’m a little bit wary of the relaxing of the redirect_uri processing
> rules, because this removes a layer of defence in depth. With the current
> requirement for pre-registered URIs an attacker needs to compromise the
> redirect endpoint *and* the client credentials in order to steal an
> authorization code and use it. With this change, compromising the client
> credentials alone would be enough. If the use-case is specifically in a PKI
> environment, could the redirect_uri be baked into the cert? Maybe this
> use-case could be better addressed in a separate draft.
>

 I agree that the specifics of a PKI type environment use-case would be
better in a separate draft or profile somewhere. And do plan to add some
more considerations around the possibility of relaxed redirect_uri
validation.


2.2:
> The definition of “expires_in” as a "JSON number" suggests that
> fractional/floating-point values are allowed. Presumably this is intended
> to be an integer?
>

Yes and I need to clarify that it's a positive integer.



> Is there a recommended minimum/maximum? Suggested wording:
>
> ===
>
>    *  "expires_in" : A JSON number that represents the lifetime of the
>       request URI in seconds as a positive integer. The lifetime SHOULD
>
>       be at least 5 seconds and at most 600 seconds, but other values are
>
>       permitted at the discretion of the authorization server.
>
> ===
>
> Those values are fairly arbitrary - 5 seconds seems a reasonable lower
> bound for a client with a bad network connection, and 10 minutes seems more
> than adequate upper bound for the typical uses.
>

Arbitrary, yes. But also pretty reasonable. I'm not too keen on using
arbitrary values with normative language, however, even if reasonable. I
think we could work them in with slightly different language something
like, "for example, at least 5 seconds but at most 600".


>
> 3:
> I confirmed that the request JWT verifies with the given JWK using our
> internal JWT library :-)
>

Yay for interoperability!  I produced those using a different JWT library
:)

5:
> “require_pushed_authorization_requests” might be better
> named “requires_pushed_authorization_requests” given that it is describing
> the server’s policy rather than telling the client to require them, but
> this is a really pedantic point. Same for the client metadata in section 6.
>

Fair point but I don't think sufficient to warrant a change to a protocol
parameter name at this point.


7:
> I would like to propose an additional security consideration, with the
> following wording:
>
> ===
> 7.5. Request URI swapping
>
> An attacker could capture the request URI from one request and then
> substitute it into a different authorization request. For example, in the
> context of OpenID Connect, an attacker could replace a request URI asking
> for a high level of authentication assurance with one that requires a lower
> level of assurance. Clients SHOULD make use of PKCE, a unique “state"
> parameter, or the OIDC “nonce” parameter in the pushed request object to
> prevent this attack.
> ===
>

Thanks. Will incorporate (with added refs and minor tweaks). I'm wondering
if there's a good example that isn't OpenID Connect though? Just thinking
something OAuth only might be more accessible to most readers (similar to
what you and Justin pointed out that the ACR example earlier in the draft
may not be the best).

-- 
_CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
material for the sole use of the intended recipient(s). Any review, use, 
distribution or disclosure by others is strictly prohibited.  If you have 
received this communication in error, please notify the sender immediately 
by e-mail and delete the message and any file attachments from your 
computer. Thank you._