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