I found this in my archives as an open question. Can someone please review 
Tim's note and address the security considerations it contains?

EHL

> -----Original Message-----
> From: Freeman, Tim [mailto:tim.free...@hp.com]
> Sent: Tuesday, September 14, 2010 11:03 AM
> To: Eran Hammer-Lahav; Torsten Lodderstedt
> Cc: oauth@ietf.org
> Subject: RE: [OAUTH-WG] Why give the redirect URI when trading an
> [authorization] code for an access token?
> 
> From: Eran Hammer-Lahav [mailto:e...@hueniverse.com]
> > 1. Evil user starts the OAuth flow on the client using the web-server flow.
> > 2. Client redirects the evil user to the authorization server,
> > including state information about the evil user account on the client.
> > 3. Evil user takes the authorization endpoint URI and changes the
> > redirection to its own site.
> > 4. Evil user tricks victim user to click on the link and authorize
> > access (phishing or other social engineering attack).
> > 5. Victim user thinking this is a valid authorization request,
> > authorizes access.
> > 6. Authorization server sends victim user back to the client, but
> > since the redirection URI was changed, back to the evil user site.
> 
> and the rest of the steps were revised to:
> 
> > 7. Evil user takes the code and gives it back to the client by
> > constructing the original correct redirection URI.
> > 8. Client exchanges the code for access token, attaching it to the evil 
> > user's
> account.
> > 9. Evil user can now access victim user data on his client account.
> 
> Step 6 requires the authorization server to redirect the victim user's browser
> to the evil user's site, which will only happen if the authorization server 
> does
> not check the redirect URI when returning an authorization code.  That check
> is required by OAuth 2, and isn't the check that I'm questioning.
> 
> In contrast, I was proposing that the authorization server not check the
> redirect URI when it returns an access token.  Since, in the absence of such a
> check, the redirect URI is neither checked nor used to compute the result of
> the query, I was proposing that we drop the redirect URL from that step of
> the protocol altogether.
> 
> I misspoke in the subject line of the email that started this thread, so I 
> just
> now changed "access code" there to "authorization code".  We have access
> tokens and authorization codes, but not authorization tokens or access
> codes.
> 
> After some thought, I think I see the real problem with omitting the check on
> redirect_uri.   Without the check, the following can happen:
> 
> 1. Evil user starts OAuth flow on the client using the web-server flow, using 
> a
> hacked web browser.
> 2. The hacked web browser does the normal thing in the flow, requesting the
> evil user's username and password, and at the end the hacked browser is
> given a redirect like:
> 
>    https://www.goodclient.com/oauth/evilUserAcct?code=evilAuthCode
> 
> The hacked browser saves evilAuthCode and does not perform the redirect.
> 3. Suppose the evil user's web site can persuade a known victim user with a
> normal browser to visit goodclient's web site and do OAuth.  The victim's user
> id on the client is public knowledge, and the evil user's web site persuaded
> the victim to start OAuth at a known time, so it can guess when the victim 
> will
> complete the OAuth exchange.  Before then, the evil web site can visit
> 
>    https://www.goodclient.com/oauth/victimUserAcct?code=evilAuthCode
> 
> which is likely to leave the client associating the victim's user id with an 
> access
> token that accesses resources controlled by the evil user.
> 
> Checking the redirect URI doesn't solve the problem in the case where the
> user id on the client is encoded in the "state" opaque value instead of the
> redirect URI.
> 
> Saying "The authorization server SHOULD require the client to pre-register
> their redirection URI" (page 17 of 
> http://tools.ietf.org/html/draft-ietf-oauth-
> v2-10) should have MUST instead of SHOULD, since it is important that we're
> really redirecting to the client when we're distributing the authorization 
> code
> by redirecting.
> 
> Writing the spec required thinking through these cases.  It would be helpful 
> if
> the use cases were added to the spec, so people don't have to rediscover
> them, and errors in the use cases can be discovered and fixed rather than
> being made repeatedly by each person rediscovering the use case.
> 
> Tim Freeman
> Email: tim.free...@hp.com
> Desk in Palo Alto: (650) 857-2581
> Home: (408) 774-1298
> Cell: (408) 348-7536
> 
> 
> -----Original Message-----
> From: Eran Hammer-Lahav [mailto:e...@hueniverse.com]
> Sent: Saturday, September 11, 2010 7:59 AM
> To: Torsten Lodderstedt
> Cc: Freeman, Tim; oauth@ietf.org
> Subject: RE: [OAUTH-WG] Why give the redirect URI when trading an access
> code for an access token?
> 
> Sorry.
> 
> 7. Evil user takes the code and gives it back to the client by constructing 
> the
> original correct redirection URI.
> 8. Client exchanges the code for access token, attaching it to the evil user's
> account.
> 9. Evil user can now access victim user data on his client account.
> 
> This is basically a session fixation attack.
> 
> EHL
> 
> > -----Original Message-----
> > From: Torsten Lodderstedt [mailto:tors...@lodderstedt.net]
> > Sent: Saturday, September 11, 2010 1:01 AM
> > To: Eran Hammer-Lahav
> > Cc: Freeman, Tim; oauth@ietf.org
> > Subject: Re: [OAUTH-WG] Why give the redirect URI when trading an
> > access code for an access token?
> >
> >   Doesn't step 7 require the evil user to know the client's secret?
> >
> > Am 10.09.2010 17:06, schrieb Eran Hammer-Lahav:
> > > 1. Evil user starts the OAuth flow on the client using the web-server 
> > > flow.
> > > 2. Client redirects the evil user to the authorization server,
> > > including state
> > information about the evil user account on the client.
> > > 3. Evil user takes the authorization endpoint URI and changes the
> > redirection to its own site.
> > > 4. Evil user tricks victim user to click on the link and authorize
> > > access
> > (phishing or other social engineering attack).
> > > 5. Victim user thinking this is a valid authorization request,
> > > authorizes
> > access.
> > > 6. Authorization server sends victim user back to the client, but
> > > since the
> > redirection URI was changed, back to the evil user site.
> > > 7. Evil user grabs the code and exchanges it for an access token.
> > >
> > > By checking that the callback URI used to deliver the code is the
> > > same as
> > the one used to initiate the flow, the authorization server can verify
> > that the user who initiated the flow is the same one to authorize
> > access and finish the flow.
> > >
> > > EHL
> > >
> > >> -----Original Message-----
> > >> From: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] On
> > >> Behalf Of Freeman, Tim
> > >> Sent: Wednesday, September 08, 2010 8:05 PM
> > >> To: oauth@ietf.org
> > >> Subject: [OAUTH-WG] Why give the redirect URI when trading an
> > >> access code for an access token?
> > >>
> > >> Hi.  I'm new here.  I searched the archives a bit and didn't
> > >> immediately find an answer to my question below.  My apologies if
> > >> there was some previous discussion of this that I missed.
> > >>
> > >> Looking at the draft spec at
> > >> http://tools.ietf.org/html/draft-ietf-oauth-v2-10,
> > >> I see in section 4.1.1 "Authorization code" on page 22 that it is
> > >> required to give the redirect_uri of the original request when
> > >> exchanging an authorization code for an access token, and the
> > >> authorization server must verify that the redirection URI is
> > >> correct as well
> > as the authorization code.
> > >> Based on section 4.2 "Access Token Response" on page 25, it seems
> > >> that the redirect_uri is not used when constructing the response
> > >> from the authorization server.
> > >>
> > >> So far as I can tell, the redirect_uri is useless in this request.
> > >> It does not contain any secrets.  The authorization code is
> > >> verified and is meant to be an arbitrary unguessable identifier, so
> > >> little is gained by verifying the redirect_uri also.  It is not
> > >> used to construct the
> > reply.  Why is it required?
> > >>
> > >> Tim Freeman
> > >> Email: tim.free...@hp.com
> > >> Desk in Palo Alto: (650) 857-2581
> > >> Home: (408) 774-1298
> > >> Cell: (408) 348-7536
> > >>
> > >>
> > >> _______________________________________________
> > >> 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