Simply not true. Phil
@independentid www.independentid.com phil.h...@oracle.com On Sep 15, 2014, at 12:10 PM, Antonio Sanso <asa...@adobe.com> wrote: > hi *, > > my understanding is that there is a rough consensus that if an OAuth Provider > follows rfc6749 verbatim will end up having an open redirector. > My next question would be now, is there anything we can do to raise some > awareness about this issue? > > regards > > antonio > > 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"... >> >> 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 _______________________________________________ OAuth mailing list OAuth@ietf.org https://www.ietf.org/mailman/listinfo/oauth