Hi all, I am fairly new to this mailing list so my apologies if this has already been discussed.

Section 3.2 (http://tools.ietf.org/html/draft-ietf-oauth-v2-05#section-3.2)

The way in which the authorization server authenticates the end user
(e.g. username and password login, OpenID, session cookies) and in
which the authorization server obtains the end user's authorization,
including whether it uses a secure channel such as TLS/SSL, is beyond
the scope of this specification.  However, the authorization server
MUST first verify the identity of the end user.

This paragraph seems to imply that it is sufficient to use a session cookie to "verify" the identity of the user. Although the client cannot determine what the session cookie is, it can still take advantage of the fact that the browser will automatically include this cookie in any request to the authorization server.

Consider an authorization server that implements the following end user endpoint and we are dealing with the web server flow 1) End user logs in and obtains a session cookie. This step is skipped if the end user already has a valid session cookie. 2) Client information is displayed to end user and the end user is asked to approve or deny the request by submitting a form. 3) End user endpoint verifies the cookie, approves or denies the request, and redirects the user to the redirect_uri

If the form submission in step 2 only contains parameters that the client knows or can figure out then all then all a malicious client has to do it is get the end user to click on a link while they are logged in to the service. This link could lead to a webpage controlled by the malicious client where the the malicious client constructs the necessary form and automatically submits that form on page load using javascript. The client would then be redirected to whatever redirect_uri the malicious client specified and the end user would have no idea what just happened.

As an illustrative example, assume that Facebook implemented the above end user endpoint. The malicious client could be a Facebook application which gets users to click on its crafted link via Facebook ads (thereby guaranteeing that anyone clicking on the ad is already logged in to Facebook). The end user would click on the ad and have no idea that they just authorized the malicious application to post to their wall.

My suggestion would be to add language that defines "verification" as collecting some piece of information that the client could not reasonably know, deduce, or coerce the client into submitting (as is the case of the session cookie). This piece of information could be left undefined in the spec but examples would be 1) Require the user to always re-authenticate (e.g. username & password) before granting authorization
2) Have a CAPTCHA on the form in step 2 of my example

Does this make sense?
Nick
_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to