hi Hans

On Sep 4, 2014, at 3:15 PM, Hans Zandbelt <hzandb...@pingidentity.com> wrote:

> I am convinced about the issue in the use case Antonio provided but I hope 
> not to close the door on returning errors to known and trusted clients. Not 
> sure anymore if that's possible though because the distinction can't be 
> "registered"…

an alternative is to show always the consent screen (at least once if the 
client id/redirect_uri is valid and accept the app) even if the scope or any 
other parameter is not valid before to redirect to the redirect uri.

regards

antonio

> 
> Hans.
> 
> On 9/4/14, 3:01 PM, Antonio Sanso wrote:
>> hi Bill
>> On Sep 4, 2014, at 2:52 PM, Bill Burke <bbu...@redhat.com> wrote:
>> 
>>> FWIW, Antonio convinced me and I'm going to change this in our IDM project. 
>>>  Thanks Antonio.  What convinced me was that the user is probably expecting 
>>> a login screen.  Since there is this expectation, it might make it a little 
>>> easier for the attacker to convince the user that a spoofed login screen is 
>>> real.  I know this issue can only happen with unrestricted registration, 
>>> but, IMO, this proposed change doesn't really have much of an effect on 
>>> usability and is even backward compatible with the current RFC.
>>> 
>>> Wouldn't it better though to never do a redirect on an invalid request and 
>>> just display an error page?
>> 
>> thanks for sharing your thoughts :). Display an error 400 is what Google 
>> does :)
>> 
>> regards
>> 
>> antonio
>> 
>>> 
>>> On 9/4/2014 3:50 AM, Antonio Sanso wrote:
>>>> Hi Hans,
>>>> 
>>>> I really fail to see how this can be addressed at registration time for 
>>>> cases where registration is unrestricted (namely all the big Providers)
>>>> 
>>>> regards
>>>> 
>>>> antonio
>>>> 
>>>> On Sep 4, 2014, at 9:47 AM, Hans Zandbelt <hzandb...@pingidentity.com> 
>>>> wrote:
>>>> 
>>>>> Classifying like this must also mean that consent should not be stored 
>>>>> until the client is considered (admin) trusted, and admin policy would 
>>>>> interfere with user policy.
>>>>> 
>>>>> IMHO the security consideration would apply only to dynamically 
>>>>> registered clients where registration is unrestricted; any other form 
>>>>> would involve some form of admin/user approval at registration time, 
>>>>> overcoming the concern at authorization time: there's no auto-redirect 
>>>>> flow possible for unknown clients.
>>>>> 
>>>>> Hans.
>>>>> 
>>>>> On 9/4/14, 9:04 AM, Richer, Justin P. wrote:
>>>>>> I think this advice isn't a bad idea, though it's of course up to the AS
>>>>>> what an "untrusted" client really is. In practice, this is something
>>>>>> that was registered by a non-sysadmin type person, either a dynamically
>>>>>> registered client or something available through self-service
>>>>>> registration of some type. It's also reasonable that a client, even
>>>>>> dynamically registered, would be considered "trusted" if enough time has
>>>>>> passed and enough users have used it without things blowing up.
>>>>>> 
>>>>>>  -- Justin
>>>>>> 
>>>>>> On Sep 4, 2014, at 1:26 AM, Antonio Sanso <asa...@adobe.com
>>>>>> <mailto:asa...@adobe.com>> wrote:
>>>>>> 
>>>>>>> hi again *,
>>>>>>> 
>>>>>>> after thinking a bit further IMHO an alternative for the untrusted
>>>>>>> clients can also be to always present the consent screen (at least
>>>>>>> once) before any redirect.
>>>>>>> Namely all providers I have seen show the consent screen if all the
>>>>>>> request parameters are correct and if the user accepts the redirect
>>>>>>> happens.
>>>>>>> If one of the parameter  (with the exclusion of the client id and
>>>>>>> redirect uri that are handled differently as for spec) is wrong though
>>>>>>> the redirect happens without the consent screen being shown..
>>>>>>> 
>>>>>>> WDYT?
>>>>>>> 
>>>>>>> regards
>>>>>>> 
>>>>>>> antonio
>>>>>>> 
>>>>>>> On Sep 3, 2014, at 7:54 PM, Antonio Sanso <asa...@adobe.com
>>>>>>> <mailto:asa...@adobe.com>> wrote:
>>>>>>> 
>>>>>>>> Well,
>>>>>>>> I do not know if this is only dynamic registration...
>>>>>>>> let’s talk about real use cases, namely e.g. Google , Facebook ,
>>>>>>>> etc.. is that dynamic client registration? I do not know… :)
>>>>>>>> 
>>>>>>>> Said that what the other guys think?  :)
>>>>>>>> Would this deserve some “spec adjustment” ? I mean there is a reason
>>>>>>>> if Google is by choice “violating” the spec right? (I assume to avoid
>>>>>>>> open redirect…)
>>>>>>>> But other implementers do follow the spec hence they have this open
>>>>>>>> redirector… and this is not nice IMHO...
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Sep 3, 2014, at 7:40 PM, Hans Zandbelt <hzandb...@pingidentity.com
>>>>>>>> <mailto:hzandb...@pingidentity.com>> wrote:
>>>>>>>> 
>>>>>>>>> On 9/3/14, 7:14 PM, Antonio Sanso wrote:
>>>>>>>>>> 
>>>>>>>>>> On Sep 3, 2014, at 7:10 PM, Hans Zandbelt
>>>>>>>>>> <hzandb...@pingidentity.com <mailto:hzandb...@pingidentity.com>> 
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Is your concern clients that were registered using dynamic client
>>>>>>>>>>> registration?
>>>>>>>>>> 
>>>>>>>>>> yes
>>>>>>>>> 
>>>>>>>>> I think your issue is then with the trust model of dynamic client
>>>>>>>>> registration; that is left out of scope of the dynreg spec (and the
>>>>>>>>> concept is not even part of the core spec), but unless you want
>>>>>>>>> everything to be open (which typically would not be the case), then
>>>>>>>>> it would involve approval somewhere in the process before the client
>>>>>>>>> is registered. Without dynamic client registration that approval is
>>>>>>>>> admin based or resource owner based, depending on use case.
>>>>>>>>> 
>>>>>>>>>>> Otherwise the positive case is returning a response to a valid URL
>>>>>>>>>>> that belongs to a client that was registered explicitly by the
>>>>>>>>>>> resource owner
>>>>>>>>>> 
>>>>>>>>>> well AFAIK the resource owner doesn’t register clients…
>>>>>>>>> 
>>>>>>>>> roles can collapse in use cases especially when using dynamic client
>>>>>>>>> registration
>>>>>>>>> 
>>>>>>>>>>> and the negative case is returning an error to that same URL.
>>>>>>>>>> 
>>>>>>>>>> the difference is the consent screen… in the positive case you need
>>>>>>>>>> to approve an app.. for the error case no approval is needed,,,
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> I fail to see the open redirect.
>>>>>>>>>> 
>>>>>>>>>> why?
>>>>>>>>> 
>>>>>>>>> because the client and thus the fixed URL are explicitly approved at
>>>>>>>>> some point
>>>>>>>>> 
>>>>>>>>> Hans.
>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> Hans.
>>>>>>>>>>> 
>>>>>>>>>>> On 9/3/14, 6:56 PM, Antonio Sanso wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> On Sep 3, 2014, at 6:51 PM, Hans Zandbelt
>>>>>>>>>>>> <hzandb...@pingidentity.com <mailto:hzandb...@pingidentity.com>
>>>>>>>>>>>> <mailto:hzandb...@pingidentity.com>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> Let me try and approach this from a different angle: why would you
>>>>>>>>>>>>> call it an open redirect when an invalid scope is provided and
>>>>>>>>>>>>> call it
>>>>>>>>>>>>> correct protocol behavior (hopefully) when a valid scope is
>>>>>>>>>>>>> provided?
>>>>>>>>>>>> 
>>>>>>>>>>>> as specified below in the positive case (namely when the correct
>>>>>>>>>>>> scope
>>>>>>>>>>>> is provided) the resource owner MUST approve the app via the 
>>>>>>>>>>>> consent
>>>>>>>>>>>> screen (at least once).
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hans.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On 9/3/14, 6:46 PM, Antonio Sanso wrote:
>>>>>>>>>>>>>> hi John,
>>>>>>>>>>>>>> On Sep 3, 2014, at 6:14 PM, John Bradley <ve7...@ve7jtb.com
>>>>>>>>>>>>>> <mailto:ve7...@ve7jtb.com>
>>>>>>>>>>>>>> <mailto:ve7...@ve7jtb.com>
>>>>>>>>>>>>>> <mailto:ve7...@ve7jtb.com>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> In the example the redirect_uri is vlid for the attacker.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The issue is that the AS may be allowing client registrations 
>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>> arbitrary redirect_uri.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> In the spec it is unspecified how a AS validates that a client
>>>>>>>>>>>>>>> controls the redirect_uri it is registering.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I think that if anything it may be the registration step that
>>>>>>>>>>>>>>> needs
>>>>>>>>>>>>>>> the security consideration.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> (this is the first time :p) but I do disagree with you. It would 
>>>>>>>>>>>>>> be
>>>>>>>>>>>>>> pretty unpractical to block this at registration time….
>>>>>>>>>>>>>> IMHO the best approach is the one taken from Google, namely
>>>>>>>>>>>>>> returning
>>>>>>>>>>>>>> 400 with the cause of the error..
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> *400.* That’s an error.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> *Error: invalid_scope*
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Some requested scopes were invalid. {invalid=[l]}
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> said that I hope you all agree this is an issue in the spec so
>>>>>>>>>>>>>> far….
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> regards
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> antonio
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> John B.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Sep 3, 2014, at 12:10 PM, Bill Burke <bbu...@redhat.com
>>>>>>>>>>>>>>> <mailto:bbu...@redhat.com>
>>>>>>>>>>>>>>> <mailto:bbu...@redhat.com>
>>>>>>>>>>>>>>> <mailto:bbu...@redhat.com>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> I don't understand.  The redirect uri has to be valid in
>>>>>>>>>>>>>>>> order for a
>>>>>>>>>>>>>>>> redirect to happen.  The spec explicitly states this.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On 9/3/2014 11:43 AM, Antonio Sanso wrote:
>>>>>>>>>>>>>>>>> hi *,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> IMHO providers that strictly follow rfc6749 are vulnerable
>>>>>>>>>>>>>>>>> to open
>>>>>>>>>>>>>>>>> redirect.
>>>>>>>>>>>>>>>>> Let me explain, reading [0]
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> If the request fails due to a missing, invalid, or mismatching
>>>>>>>>>>>>>>>>> redirection URI, or if the client identifier is missing or
>>>>>>>>>>>>>>>>> invalid,
>>>>>>>>>>>>>>>>> the authorization server SHOULD inform the resource owner of 
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> error and MUST NOT automatically redirect the user-agent to 
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> invalid redirection URI.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> If the resource owner denies the access request or if the
>>>>>>>>>>>>>>>>> request
>>>>>>>>>>>>>>>>> fails for reasons other than a missing or invalid
>>>>>>>>>>>>>>>>> redirection URI,
>>>>>>>>>>>>>>>>> the authorization server informs the client by adding the
>>>>>>>>>>>>>>>>> following
>>>>>>>>>>>>>>>>> parameters to the query component of the redirection URI
>>>>>>>>>>>>>>>>> using the
>>>>>>>>>>>>>>>>> "application/x-www-form-urlencoded" format, perAppendix B
>>>>>>>>>>>>>>>>> <https://tools.ietf.org/html/rfc6749#appendix-B>:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Now let’s assume this.
>>>>>>>>>>>>>>>>> I am registering a new client to thevictim.com
>>>>>>>>>>>>>>>>> <http://thevictim.com/>
>>>>>>>>>>>>>>>>> <http://victim.com/><http://victim.com <http://victim.com/>
>>>>>>>>>>>>>>>>> <http://victim.com/>>
>>>>>>>>>>>>>>>>> <http://victim.com <http://victim.com/> <http://victim.com/>>
>>>>>>>>>>>>>>>>> provider.
>>>>>>>>>>>>>>>>> I register redirect uriattacker.com <http://uriattacker.com/>
>>>>>>>>>>>>>>>>> <http://attacker.com/><http://attacker.com
>>>>>>>>>>>>>>>>> <http://attacker.com/> <http://attacker.com/>>
>>>>>>>>>>>>>>>>> <http://attacker.com <http://attacker.com/>
>>>>>>>>>>>>>>>>> <http://attacker.com/>>.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> According to [0] if I pass e.g. the wrong scope I am 
>>>>>>>>>>>>>>>>> redirected
>>>>>>>>>>>>>>>>> back to
>>>>>>>>>>>>>>>>> attacker.com <http://attacker.com/>
>>>>>>>>>>>>>>>>> <http://attacker.com/><http://attacker.com
>>>>>>>>>>>>>>>>> <http://attacker.com/>
>>>>>>>>>>>>>>>>> <http://attacker.com/>> <http://attacker.com
>>>>>>>>>>>>>>>>> <http://attacker.com/> <http://attacker.com/>>.
>>>>>>>>>>>>>>>>> Namely I prepare a url that is in this form:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> http://victim.com/authorize?response_type=code&client_id=bc88FitX1298KPj2WS259BBMa9_KCfL3&scope=WRONG_SCOPE&redirect_uri=http://attacker.com
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> and this is works as an open redirector.
>>>>>>>>>>>>>>>>> Of course in the positive case if all the parameters are
>>>>>>>>>>>>>>>>> fine this
>>>>>>>>>>>>>>>>> doesn’t apply since the resource owner MUST approve the app
>>>>>>>>>>>>>>>>> via the
>>>>>>>>>>>>>>>>> consent screen (at least once).
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> A solution would be to return error 400 rather than redirect
>>>>>>>>>>>>>>>>> to the
>>>>>>>>>>>>>>>>> redirect URI (as some provider e.g. Google do)
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> WDYT?
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> regards
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> antonio
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> [0] https://tools.ietf.org/html/rfc6749#section-4.1.2.1
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>> OAuth mailing list
>>>>>>>>>>>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>>>>>>>>>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> Bill Burke
>>>>>>>>>>>>>>>> JBoss, a division of Red Hat
>>>>>>>>>>>>>>>> http://bill.burkecentral.com <http://bill.burkecentral.com/>
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> OAuth mailing list
>>>>>>>>>>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org> <mailto:OAuth@ietf.org>
>>>>>>>>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>> OAuth mailing list
>>>>>>>>>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>>>>>>>>>>>>>>> <mailto:OAuth@ietf.org><mailto:OAuth@ietf.org>
>>>>>>>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> OAuth mailing list
>>>>>>>>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org> <mailto:OAuth@ietf.org>
>>>>>>>>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Hans Zandbelt              | Sr. Technical Architect
>>>>>>>>>>>>> hzandb...@pingidentity.com <mailto:hzandb...@pingidentity.com>
>>>>>>>>>>>>> <mailto:hzandb...@pingidentity.com>| Ping
>>>>>>>>>>>>> Identity
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> --
>>>>>>>>>>> Hans Zandbelt              | Sr. Technical Architect
>>>>>>>>>>> hzandb...@pingidentity.com <mailto:hzandb...@pingidentity.com> |
>>>>>>>>>>> Ping Identity
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> Hans Zandbelt              | Sr. Technical Architect
>>>>>>>>> hzandb...@pingidentity.com <mailto:hzandb...@pingidentity.com>| Ping
>>>>>>>>> Identity
>>>>>>>> 
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> OAuth mailing list
>>>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>> 
>>>>> 
>>>>> --
>>>>> Hans Zandbelt              | Sr. Technical Architect
>>>>> hzandb...@pingidentity.com | Ping Identity
>>>> 
>>>> _______________________________________________
>>>> OAuth mailing list
>>>> OAuth@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>> 
>>> 
>>> --
>>> Bill Burke
>>> JBoss, a division of Red Hat
>>> http://bill.burkecentral.com
>>> 
>>> _______________________________________________
>>> 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
>> 
> 
> -- 
> Hans Zandbelt              | Sr. Technical Architect
> hzandb...@pingidentity.com | Ping Identity

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to