But that’s also the same for parameters in a signed (non-encrypted) request 
object.

 — Justin

> On Jan 17, 2020, at 11:29 AM, Jim Manico <j...@manicode.com> wrote:
> 
> It’s actually worse. Parameters in a URL leak over bookmarks, browser 
> history, logs everywhere, referrer headers... 
> 
> One of the most primary rules of secure coding on the web is to never put 
> sensitive data in a URL for •any• verb, not just GET.
> 
> --
> Jim Manico
> @Manicode
> Secure Coding Education
> +1 (808) 652-3805
> 
>> On Jan 17, 2020, at 11:24 AM, Richard Backman, Annabelle 
>> <richanna=40amazon....@dmarc.ietf.org> wrote:
>> 
>> 
>> +1 to Justin’s comments. From a security standpoint parameters in the query  
>> string are no different from those in JWT unprotected headers (or protected 
>> if they’re also in the request object). Although I‘d amend Justin’s 
>> suggestion to say that if a parameter is both inside the request object and 
>> outside and they do not match, reject the request as suspicious.
>> 
>>> On Jan 17, 2020, at 5:45 AM, Justin Richer <jric...@mit.edu> wrote:
>>> 
>>>  I don’t agree with this stance from a security or implementation 
>>> perspective. 
>>> 
>>> If there’s a clear order of precedence for the information, it’s not 
>>> particularly problematic. Everything inside the request object is to be 
>>> taken over things outside the request object. We have the exact same 
>>> semantics and process with dynamic registration, where the software 
>>> statement is carried alongside plain JSON claims, and the two are mixed 
>>> with a very simple algorithm:
>>> 
>>>  - If a field is inside the signed payload, use that value and ignore any 
>>> copy of it on the outside
>>>  - If a field is not inside the signed payload and is outside the signed 
>>> payload, use the outside value
>>> 
>>> Can someone please point out a concrete security issue with this algorithm? 
>>> This is the extent of the “merge” semantics that we need here, and it would 
>>> solve not only the ability to use this for use cases that call for a more 
>>> static request object (perhaps signed by a third party and not the client) 
>>> along side the plain parameters that can vary, but also the backwards 
>>> compatibility issue that’s been discussed. With this algorithm in place, 
>>> you could have OIDC clients actually be compliant with the spec, since OIDC 
>>> requires replication of the values inside the request object on the outside 
>>> with exact matches. An OIDC server wouldn’t be fully compliant with the new 
>>> spec since it would reject some compliant JAR requests that are missing the 
>>> external parameters, but that’s fairly easy logic to add on the OIDC side. 
>>> And in that case you get a matrix of compatibility like:
>>> 
>>> 
>>>               JAR Server | OIDC Server  |
>>> ------------+------------+--------------+
>>> JAR Client  |     YES    |      NO      |
>>> OIDC Client |     YES    |     YES      |
>>> 
>>> Breaking one out of the four possible combinations in a very predictable 
>>> way is, I think, the best way to handle backwards compatibility here. 
>>> 
>>> But between this issue and JAR’s problematic call for the value of a 
>>> request_uri to always be a JWT and be fetchable by the AS (neither of which 
>>> are true in the case of PAR) makes me think we need to pull this back and 
>>> rework those things, in a push back to the IESG’s comments.
>>> 
>>>  — Justin
>>> 
>>> 
>>>> On Jan 16, 2020, at 7:38 PM, Joseph Heenan <jos...@authlete.com 
>>>> <mailto:jos...@authlete.com>> wrote:
>>>> 
>>>> I agree with this, particularly the security concerns of merging. If we 
>>>> merge, we can much guarantee there will eventually be a security issue 
>>>> where an attacker is able to gain an advantage by adding a parameter to 
>>>> the url query (which the server would then happily process if that 
>>>> parameter isn’t found inside the request object). Ruling out that case 
>>>> makes security analysis (particularly when creating new OAuth2 parameters) 
>>>> significantly simpler.
>>>> 
>>>> Putting the iss in the JWE header and having the client_id duplicated 
>>>> outside the request object seem to address all the concerns I’ve seen 
>>>> raised.
>>>> 
>>>> (It seems like it may be unnecessary to have the client_id duplicated 
>>>> outside if the request_uri is a PAR one though.)
>>>> 
>>>> Joseph
>>>> 
>>>> 
>>>> 
>>>>> On 16 Jan 2020, at 22:40, John Bradley <ve7...@ve7jtb.com 
>>>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>>>> 
>>>>> I agree with the IESG reasoning that merging is problimatic.  Once we
>>>>> allow that given a unknown list of possible paramaters with diffrent
>>>>> security properties it would be quite difficult to specify safely.
>>>>> 
>>>>> Query paramaters can still be sent outside the JAR, but if they are in
>>>>> the OAuth registry the AS MUST ignore them.
>>>>> 
>>>>> Puting the iss in the JWE headder addresses the encryption issue without
>>>>> merging.
>>>>> 
>>>>> I understand that some existing servers have dependencys on getting the
>>>>> clientID as a query paramater.
>>>>> 
>>>>> Is that the only paramater that people have a issue with as oposed to a
>>>>> nice to have?
>>>>> 
>>>>> Would allowing the AS to not ignore the clientID as a query paramater as
>>>>> long as it matches the one inside the JAR, basicly the same as Connect
>>>>> request object but for just the one paramater make life easier for the
>>>>> servers?
>>>>> 
>>>>> I am not promising a change but gathering info before proposing something.
>>>>> 
>>>>> John B.
>>>>> 
>>>>> 
>>>>> On 1/16/2020 1:53 AM, Benjamin Kaduk wrote:
>>>>>> On Wed, Jan 15, 2020 at 11:02:33PM +0200, Vladimir Dzhuvinov 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
>>>>>>>> <https://tools.ietf.org/html/rfc6749#section-3.2.1 
>>>>>>>> <https://tools.ietf.org/html/rfc6749#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.
>>>>>> Could you expand on that a bit more?  My understanding is that the IESG
>>>>>> ballot mail gets copied to the WG precisely so that there is 
>>>>>> transparency,
>>>>>> e.g., the thread starting at
>>>>>> https://mailarchive.ietf.org/arch/msg/oauth/lkOhwiDj_hCI55BQRdiR9R0JwgI 
>>>>>> <https://mailarchive.ietf.org/arch/msg/oauth/lkOhwiDj_hCI55BQRdiR9R0JwgI>
>>>>>> Which admittely is from almost three years ago, but that's the earliest
>>>>>> that I found that could be seen as the source of this behavior.
>>>>>> 
>>>>>> -Ben
>>>>>> 
>>>>>> P.S. some other discussion at
>>>>>> https://mailarchive.ietf.org/arch/msg/oauth/-tUrNY1X9eI_tQGI8T-IGx4xHy8 
>>>>>> and
>>>>>> https://mailarchive.ietf.org/arch/msg/oauth/Uke1nxRlgx62EJLevZgpWCz_UwY 
>>>>>> and
>>>>>> so on.
>>>>>> 
>>>>>> _______________________________________________
>>>>>> OAuth mailing list
>>>>>> OAuth@ietf.org
>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>> 
>>>>> _______________________________________________
>>>>> OAuth mailing list
>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>> 
>>>> _______________________________________________
>>>> OAuth mailing list
>>>> OAuth@ietf.org <mailto: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

Reply via email to