It is not too late to add to the security considerations. It seems that the new application/oauth.authz.req+jwt media-type is helpful in this regard, in that if an AS can require that content-type from dereferencing the request_uri, then seeing anything else indicates that the request was bogus (or an attack). I guess existing OIDC deployments aren't exactly in a position to do that, though.
-Ben On Thu, Jan 16, 2020 at 08:34:06AM +0000, Neil Madden wrote: > Is it too late to add it to the security considerations for JAR? > > — Neil > > > On 16 Jan 2020, at 08:15, Dominick Baier <dba...@leastprivilege.com> wrote: > > > > > > Agreed - that’s why we disabled request_uri by default and added > > extensibility points to implement validation. > > > > I thought it is odd that this was not mentioned in the typical “security > > considerations” in the OIDC spec.. > > > > ——— > > Dominick Baier > > > >> On 16. January 2020 at 08:07:44, Neil Madden (neil.mad...@forgerock.com) > >> wrote: > >> > >> If the AS can’t validate the request_uri it may also open itself up to > >> SSRF attacks where a malicious client uses the request_uri to probe/attack > >> resources inside the AS’s private network. This was a crucial part of the > >> recent Capital One breach for example [1]. ForgeRock currently requires > >> strict validation of request_uris against a client-specific whitelist for > >> exactly this reason. > >> > >> NB some clients might legitimately be on that private network (eg > >> microservices) so changing to a global whitelist for all clients is > >> undesirable. > >> > >> [1]: https://ejj.io/blog/capital-one > >> > >> — Neil > >> > >>> On 15 Jan 2020, at 21:02, Vladimir Dzhuvinov <vladi...@connect2id.com> > >>> wrote: > >>> On 14/01/2020 19:20, Takahiko Kawasaki wrote: > >>>> Well, embedding a client_id claim in the JWE header in order to achieve > >>>> "request parameters outside the request object should not be referred > >>>> to" is like "putting the cart before the horse". Why do we have to avoid > >>>> using the traditional client_id request parameter so stubbornly? > >>>> > >>>> The last paragraph of Section 3.2.1 of RFC 6749 says as follows. > >>>> > >>>> A client MAY use the "client_id" request parameter to identify itself > >>>> when sending requests to the token endpoint. In the > >>>> "authorization_code" "grant_type" request to the token endpoint, an > >>>> unauthenticated client MUST send its "client_id" to prevent itself from > >>>> inadvertently accepting a code intended for a client with a different > >>>> "client_id". This protects the client from substitution of the > >>>> authentication code. (It provides no additional security for the > >>>> protected resource.) > >>>> > >>>> If the same reasoning applies, a client_id must always be sent with > >>>> request / request_uri because client authentication is not performed at > >>>> the authorization endpoint. In other words, an unauthenticated client > >>>> (every client is unauthenticated at the authorization endpoint) MUST > >>>> send its "client_id" to prevent itself from inadvertently accepting a > >>>> request object for a client with a different "client_id". > >>>> > >>> Identifying the client in JAR request_uri requests can be really useful > >>> so that an AS which requires request_uri registration to prevent DDoS > >>> attacks and other checks can do those without having to index all > >>> request_uris individually. I mentioned this before. > >>> > >>> I really wonder what the reasoning of the IESG reviewers was to insist on > >>> no params outside the JAR JWT / request_uri. > >>> > >>> I'm beginning to realise this step of the review process isn't > >>> particularly transparent to WG members. > >>> > >>> Vladimir > >>> > >>> > >>> > >>>> Best Regards, > >>>> Taka > >>>> > >>>> > >>>> > >>>> On Tue, Jan 14, 2020 at 12:57 AM Vladimir Dzhuvinov > >>>> <vladi...@connect2id.com> wrote: > >>>>> John, thanks, much appreciated! > >>>>> > >>>>>> On 11/01/2020 21:36, John Bradley wrote: > >>>>>> Yes JAR is not prohibiting paramater replication in the header. > >>>>>> > >>>>>> I will see if i can add something in final edits to call that out. > >>>>>> > >>>>>> John B. > >>>>>> > >>>>>>> On 1/11/2020 6:16 AM, Vladimir Dzhuvinov wrote: > >>>>>>> Thanks Mike for the rfc7519 section-5.3 pointer. Can this parameter > >>>>>>> replication be used for client_id or the client_id ass "iss" even > >>>>>>> though it isn't explicitly mentioned in the JAR spec? > >>>>>>> > >>>>>>>> On 11/01/2020 02:58, John Bradley wrote: > >>>>>>>> Right we just don't say to put the iss there in OIDC if it's > >>>>>>>> symetricly encrypted. > >>>>>>> OIDC doesn't have the symmetric key selection issue, I suppose that > >>>>>>> why the possibility to replicate params to the JWE header isn't > >>>>>>> mentioned at all. OIDC requires the top-level query params to > >>>>>>> represent a valid OAuth 2.0 request, and there client_id is required. > >>>>>>> If the client_id is present the client registration together with any > >>>>>>> present client_secret can be retrieved. > >>>>>>> > >>>>>>> I reread the JAR spec, this is the only place that mentions handling > >>>>>>> of symmetric JWE. > >>>>>>> > >>>>>>> https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-20#section-10.2 > >>>>>>> > >>>>>>>> (b) Verifying that the symmetric key for the JWE encryption is the > >>>>>>>> correct one if the JWE is using symmetric encryption. > >>>>>>> > >>>>>>> Vladimir > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>> > >>>>>>>> On Fri, Jan 10, 2020, 9:41 PM Mike Jones > >>>>>>>> <michael.jo...@microsoft.com> wrote: > >>>>>>>>> The technique of replicating JWT claims that need to be publicly > >>>>>>>>> visible in an encrypted JWT in the header is defined at > >>>>>>>>> https://tools.ietf.org/html/rfc7519#section-5.3. (Thanks to Dick > >>>>>>>>> Hardt for bringing this need to my attention as we were finishing > >>>>>>>>> the JWT spec.) > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- Mike > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> From: OAuth <oauth-boun...@ietf.org> On Behalf Of John Bradley > >>>>>>>>> Sent: Friday, January 10, 2020 2:15 PM > >>>>>>>>> To: Vladimir Dzhuvinov <vladi...@connect2id.com> > >>>>>>>>> Cc: IETF oauth WG <oauth@ietf.org> > >>>>>>>>> Subject: [EXTERNAL] Re: [OAUTH-WG] JWT Secured Authorization > >>>>>>>>> Request (JAR) vs OIDC request object > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> The intent was to do that, but specs change once the OAuth WG and > >>>>>>>>> IESG get there hands on them. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Being backwards compatible with OIDC is not a compelling argument > >>>>>>>>> to the IESG. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> We were mostly thinking of asymmetric encryption. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Specifying puting the issuer and or the audience in the headder has > >>>>>>>>> come up in the past but probably is not documented. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> John B > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On Fri, Jan 10, 2020, 6:29 PM Vladimir Dzhuvinov > >>>>>>>>> <vladi...@connect2id.com> wrote: > >>>>>>>>> > >>>>>>>>> Yes, putting the client_id into the JWE header is a way around the > >>>>>>>>> need > >>>>>>>>> to have the client_id outside the JWE as top-level authZ request > >>>>>>>>> parameter. > >>>>>>>>> > >>>>>>>>> Unfortunately this work around isn't mentioned anywhere, I just > >>>>>>>>> checked > >>>>>>>>> the most recent draft-ietf-oauth-jwsreq-20. > >>>>>>>>> > >>>>>>>>> Our DDoS attack mitigation (for OIDC request_uri) also relies on the > >>>>>>>>> presence of client_id as top-level parameter, together with > >>>>>>>>> requiring > >>>>>>>>> RPs to register their request_uri's (so that we don't need to build > >>>>>>>>> and > >>>>>>>>> store an index of all request_uri's). I just had a look at "DDoS > >>>>>>>>> Attack > >>>>>>>>> on the Authorization Server" and also realised the request_uri > >>>>>>>>> registration isn't explicitly mentioned as attack prevention ("the > >>>>>>>>> server should (a) check that the value of "request_uri" parameter > >>>>>>>>> does > >>>>>>>>> not point to an unexpected location"). > >>>>>>>>> > >>>>>>>>> https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-20#section-10.4.1 > >>>>>>>>> > >>>>>>>>> To be honest, I feel quite bad about the situation with JAR we are > >>>>>>>>> in > >>>>>>>>> now. For some reason I had the impression that OAuth JAR was going > >>>>>>>>> to be > >>>>>>>>> the OIDC request / request_uri for general OAuth 2.0 use, as with > >>>>>>>>> other > >>>>>>>>> OIDC bits that later became general purpose OAuth 2.0 specs. > >>>>>>>>> > >>>>>>>>> I find it unfortunate I didn't notice this when I was reviewing the > >>>>>>>>> spec > >>>>>>>>> in the past. > >>>>>>>>> > >>>>>>>>> Vladimir > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On 10/01/2020 22:39, Filip Skokan wrote: > >>>>>>>>> > Vladimir, > >>>>>>>>> > > >>>>>>>>> > For that very case the payload claims may be repeated in the JWE > >>>>>>>>> > protected header. An implementation wanting to handle this may > >>>>>>>>> > look for iss/client_id there. > >>>>>>>>> > > >>>>>>>>> > Odesláno z iPhonu > >>>>>>>>> > > >>>>>>>>> >> 10. 1. 2020 v 21:19, Vladimir Dzhuvinov > >>>>>>>>> >> <vladi...@connect2id.com>: > >>>>>>>>> >> > >>>>>>>>> >> I just realised there is one class of JARs where it's practially > >>>>>>>>> >> impossible to process the request if merge isn't supported: > >>>>>>>>> >> > >>>>>>>>> >> The client submits a JAR encrypted (JWT) with a shared key. OIDC > >>>>>>>>> >> allows > >>>>>>>>> >> for that and specs a method for deriving the shared key from the > >>>>>>>>> >> client_secret: > >>>>>>>>> >> > >>>>>>>>> >> https://openid.net/specs/openid-connect-core-1_0.html#Encryption > >>>>>>>>> >> > >>>>>>>>> >> If the JAR is encrypted with the client_secret, and there is no > >>>>>>>>> >> top-level client_id parameter, there's no good way for the OP to > >>>>>>>>> >> find > >>>>>>>>> >> out which client_secret to get to try to decrypt the JWE. Unless > >>>>>>>>> >> the OP > >>>>>>>>> >> keeps an index of all issued client_secret's. > >>>>>>>>> >> > >>>>>>>>> >> > >>>>>>>>> >> OP servers which require request_uri registration > >>>>>>>>> >> (require_request_uri_registration=true) and don't want to index > >>>>>>>>> >> all > >>>>>>>>> >> registered request_uri's, also have no good way to process a > >>>>>>>>> >> request_uri > >>>>>>>>> >> if the client_id isn't present as top-level parameter. > >>>>>>>>> >> > >>>>>>>>> >> > >>>>>>>>> >> Vladimir > >>>>>>>>> >> > >>>>>>>>> >> > >>>>>>>>> >>> On 10/01/2020 20:13, Torsten Lodderstedt wrote: > >>>>>>>>> >>> > >>>>>>>>> >>>>> Am 10.01.2020 um 16:53 schrieb John Bradley > >>>>>>>>> >>>>> <ve7...@ve7jtb.com>: > >>>>>>>>> >>>> I think Torsten is speculating that is not a feature people > >>>>>>>>> >>>> use. > >>>>>>>>> >>> I’m still trying to understand the use case for merging signed > >>>>>>>>> >>> and unsigned parameters. Nat once explained a use case, where a > >>>>>>>>> >>> client uses parameters signed by a 3rd party (some > >>>>>>>>> >>> „certification authority“) in combination with > >>>>>>>>> >>> transaction-specific parameters. Is this being done in the wild? > >>>>>>>>> >>> > >>>>>>>>> >>> PS: PAR would work with both modes. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> _______________________________________________ > >>>>>>>>> OAuth mailing list > >>>>>>>>> OAuth@ietf.org > >>>>>>>>> https:// > >>>>>>>>> > >>>>> > >>>>> _______________________________________________ > >>>>> OAuth mailing list > >>>>> OAuth@ietf.org > >>>>> https://www.ietf.org/mailman/listinfo/oauth > >>> -- > >>> Vladimir Dzhuvinov > >>> _______________________________________________ > >>> OAuth mailing list > >>> OAuth@ietf.org > >>> https://www.ietf.org/mailman/listinfo/oauth > >> _______________________________________________ > >> OAuth mailing list > >> OAuth@ietf.org > >> https://www.ietf.org/mailman/listinfo/oauth > _______________________________________________ > OAuth mailing list > OAuth@ietf.org > https://www.ietf.org/mailman/listinfo/oauth _______________________________________________ OAuth mailing list OAuth@ietf.org https://www.ietf.org/mailman/listinfo/oauth