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

Reply via email to