Josh, I was curious how you secure the first step. If your client app is started by invoking a custom URL, what’s to stop the attacker using that and passing in https://attacker.com as the desired RS and audience?
Phil @independentid www.independentid.com phil.h...@oracle.com > On Mar 16, 2015, at 11:12 AM, Josh Mandel <jman...@gmail.com> wrote: > > Hi Phil, > > It might help me if you spelled out the phishing scenario you have in mind. > The key threat we're attempting to mitigate against with an "aud" param is: > > 1. Phishing link tells app to launch against RS at https://attacker.com > <https://attacker.com/> > 2. App queries https://attacker.com/metadata <https://attacker.com/metadata> > (this is a healthcare API called FHIR, which exposes server metadata) to > discover which authorization server to talk to. Attacker lies and tells app > to authorize at "https://my-real-hospital.com/authorize > <https://my-real-hospital.com/authorize>". > 3. App attempts to authorize against > "https://my-real-hospital.com/authorize?client_id=...&state=&...&aud=https://attacker.com > > <https://my-real-hospital.com/authorize?client_id=...&state=&...&aud=https://attacker.com>" > 4. The hospital's authorization server rejects the authorization request > because https://attacker.com <https://attacker.com/> is not a legitimate > resource server. > > Now you may be describing a different attacker where in step #2 the attacker > tells the app to authorize against "https://attacker.com/authorize > <https://attacker.com/authorize>", and this page asks a user to sign in with > her hospital credentials. That's indeed a phishing attack that we need > separate mitigation against. Happy to think through other mitigations on this > front, but it's a separate issue than what I was trying to address with this > thread. (Today our primary mitigation for this kind of phishing threat, where > attacker.com <http://attacker.com/> asks the user to enter her EHR > credentials, is user training.) > > -J > > On Mon, Mar 16, 2015 at 10:59 AM, Phil Hunt <phil.h...@oracle.com > <mailto:phil.h...@oracle.com>> wrote: > Josh, > > I’m not sure this helps. It seems to me, a phishing link could tell your app > to launch and pass in any RS value could it not? > > Phil > > @independentid > www.independentid.com <http://www.independentid.com/>phil.h...@oracle.com > <mailto:phil.h...@oracle.com> > >> On Mar 16, 2015, at 10:47 AM, Josh Mandel <jman...@gmail.com >> <mailto:jman...@gmail.com>> wrote: >> >> Hi Torsten, >> >> You're absolutely correct. The implementation we're contemplating for SMART >> Platforms does indeed derive the "aud" parameter from the actual URL that >> the client used to communicate with the RS. Very briefly, the flow is: >> >> 1. Electronic Health Record system tells an app to launch, passing the app >> its RS endpoint as an issuer (iss) URL parameter. >> 2. App queries the RS's issuer URL to learn what AS to talk to >> 3. App contacts AS's authorize endpoint, passing an "aud" param that was the >> same as the issuer from step 1. >> 4. After obtaining a token, app talks to the RS using that token. >> >> -Josh >> >> >> On Mon, Mar 16, 2015 at 10:40 AM, Torsten Lodderstedt >> <tors...@lodderstedt.net <mailto:tors...@lodderstedt.net>> wrote: >> I don't think putting an aud into an AT will help to prevent counterfeit RSs >> (as long as the aud is nit directly derived from the original URL used by >> the client to invoke the counterfeit RS. as long as the aud is a symbolic >> name of any kind, the counterfeit RS will accept ATs for the legitimate RS >> and just (ab)use it. >> >> POP on the contrary helps since the counterfeit RS, in order to send a >> message to the legitimate RS, needs to produce a new digitally signed >> message using the correct secret, which it doesn't know. >> >> kind regards, >> Torsten. >> >> >> >> Am 16.03.2015 um 17:40 schrieb Dixie Baker <dixie.ba...@martin-blanck.com >> <mailto:dixie.ba...@martin-blanck.com>>: >> >>> Using the "aud" parameter makes sense to me. Good suggestion. >>> >>> Authenticating the client to the RS would not address the counterfeit RS >>> threat. >>> >>> -Dixie >>> >>> >>> Dixie B. Baker, Ph.D. >>> Senior Partner >>> Martin, Blanck and Associates >>> Office (Redondo Beach, CA): 310-791-9671 <tel:310-791-9671> >>> Mobile: 310-279-2579 <tel:310-279-2579> >>> On Mar 16, 2015, at 6:43 AM, Brian Campbell <bcampb...@pingidentity.com >>> <mailto:bcampb...@pingidentity.com>> wrote: >>> >>>> We've used "aud" (optionally) with OAuth 2 and bearer tokens to help >>>> identify the RS to whom the AT should be issued. It is useful but it's >>>> mostly about getting format/content/etc of the AT correct for the RS >>>> rather than it is about preventing possible AT leaks. >>>> >>>> I do think an "aud(iance)" parameter at both token and authorization >>>> endpoints would have utility beyond the POP work. So defining it >>>> independently might make sense. >>>> >>>> On Sun, Mar 15, 2015 at 11:34 AM, John Bradley <ve7...@ve7jtb.com >>>> <mailto:ve7...@ve7jtb.com>> wrote: >>>> In POP key distribution we do introduce a "audiance" parameter to the >>>> token_endpoint. >>>> https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution-01#section-3.1 >>>> >>>> <https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution-01#section-3.1> >>>> >>>> It would be possible to have a small spec to define using "aud" with >>>> bearer tokens, however that would be undefined behaviour at this point. >>>> >>>> I don't know of any clients that would try to access a RS server and then >>>> besed on the error response try and get a access token from the AS >>>> specified in the error. >>>> >>>> In POP we are trying to both protect agains that attack and more common >>>> ones like doing a MiM to intercept the AT or the RS being hacked and >>>> leaking the token. >>>> >>>> Using "aud" with bearer tokens would be useful, but probably won't stop >>>> the majority of possible AT leaks. >>>> >>>> John B. >>>> >>>> >>>>> On Mar 15, 2015, at 2:18 PM, Torsten Lodderstedt <tors...@lodderstedt.net >>>>> <mailto:tors...@lodderstedt.net>> wrote: >>>>> >>>>> Hi Josh, >>>>> >>>>> I'm not aware of a common practice to use such a parameter. The WG is >>>>> instead heading towards authenticated requests to the resource server >>>>> (see https://tools.ietf.org/html/rfc6819#section-5.4.2 >>>>> <https://tools.ietf.org/html/rfc6819#section-5.4.2>). >>>>> >>>>> Please take a look onto >>>>> http://tools.ietf.org/html/draft-ietf-oauth-pop-architecture >>>>> <http://tools.ietf.org/html/draft-ietf-oauth-pop-architecture> and >>>>> further drafts on this topic. >>>>> >>>>> kind regards, >>>>> Torsten. >>>>> >>>>> Am 03.03.2015 um 18:27 schrieb Josh Mandel: >>>>>> Hi All, >>>>>> >>>>>> In section 4.6.4 ("Threat: Access Token Phishing by Counterfeit Resource >>>>>> Server"), RFC6819 describes a threat where a counterfeit resource server >>>>>> tricks a client into obtaining and sharing an access token from a >>>>>> legitimate authorization server. One of the proposed mitigations >>>>>> involves: "telling the authorization server about the resource server >>>>>> endpoint URL in the authorization process." >>>>>> >>>>>> In other words, this mitigation would ask the client to pass an >>>>>> additional parameter when redirecting to the Authorization server's >>>>>> "authorize" URL, effectively something like: >>>>>> >>>>>> https://auth-server/authorize <https://auth-server/authorize>? >>>>>> response_type=code& >>>>>> client_id=123& >>>>>> state=456& >>>>>> scope=read-all& >>>>>> redirect_uri=https://app-server/after-auth& >>>>>> <https://app-server/after-auth&> >>>>>> resource_server_that_told_me_to_authorize_here=https://attacker.com >>>>>> <https://attacker.com/> >>>>>> >>>>>> (And if the authorization server saw a value it didn't like in the final >>>>>> parameter, it would reject the request.) >>>>>> >>>>>> This is obviously not appropriate in every authorization scenario, but >>>>>> it is useful anytime there's a discovery process by which apps learn >>>>>> about authorization servers from resource servers. Since it's something >>>>>> of a common need, I wanted to see if there was any common practice in >>>>>> how to name this parameter, or whether it's worth registering a standard >>>>>> extension at >>>>>> http://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml >>>>>> <http://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml> >>>>>> . (I don't see one there now -- possibly I'm just missing it.) >>>>>> >>>>>> If so, what should it be called? The name I used in the example above is >>>>>> a bit verbose :-) >>>>>> >>>>>> Best, >>>>>> >>>>>> Josh >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> OAuth mailing list >>>>>> OAuth@ietf.org <mailto:OAuth@ietf.org> >>>>>> https://www.ietf.org/mailman/listinfo/oauth >>>>>> <https://www.ietf.org/mailman/listinfo/oauth> >>>>> >>>>> _______________________________________________ >>>>> OAuth mailing list >>>>> OAuth@ietf.org <mailto:OAuth@ietf.org> >>>>> https://www.ietf.org/mailman/listinfo/oauth >>>>> <https://www.ietf.org/mailman/listinfo/oauth> >>>> >>>> >>>> _______________________________________________ >>>> OAuth mailing list >>>> OAuth@ietf.org <mailto:OAuth@ietf.org> >>>> https://www.ietf.org/mailman/listinfo/oauth >>>> <https://www.ietf.org/mailman/listinfo/oauth> >>>> >>>> >>> >> >> _______________________________________________ >> OAuth mailing list >> OAuth@ietf.org <mailto:OAuth@ietf.org> >> https://www.ietf.org/mailman/listinfo/oauth >> <https://www.ietf.org/mailman/listinfo/oauth> >> >> >> _______________________________________________ >> OAuth mailing list >> OAuth@ietf.org <mailto:OAuth@ietf.org> >> https://www.ietf.org/mailman/listinfo/oauth >> <https://www.ietf.org/mailman/listinfo/oauth> > >
_______________________________________________ OAuth mailing list OAuth@ietf.org https://www.ietf.org/mailman/listinfo/oauth