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 2. App queries 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". 3. App attempts to authorize against " 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 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", 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 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> 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 > phil.h...@oracle.com > > On Mar 16, 2015, at 10:47 AM, Josh Mandel <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> 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 >> >: >> >> 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 >> Mobile: 310-279-2579 >> >> On Mar 16, 2015, at 6:43 AM, Brian Campbell <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> 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 >>> >>> 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> 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). >>> >>> Please take a look onto >>> 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? >>> response_type=code& >>> client_id=123& >>> state=456& >>> scope=read-all& >>> redirect_uri=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 >>> . (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 listOAuth@ietf.orghttps://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 >> >> > _______________________________________________ > 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