Re: [OAUTH-WG] Draft 20 last call comment (Resource Owner Impersonation)

Eran Hammer-Lahav <eran@hueniverse.com> Thu, 18 August 2011 16:24 UTC

Return-Path: <eran@hueniverse.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 847E221F8B4D for <oauth@ietfa.amsl.com>; Thu, 18 Aug 2011 09:24:21 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.558
X-Spam-Level:
X-Spam-Status: No, score=-2.558 tagged_above=-999 required=5 tests=[AWL=0.041, BAYES_00=-2.599]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AA2h3vjT3lt4 for <oauth@ietfa.amsl.com>; Thu, 18 Aug 2011 09:24:20 -0700 (PDT)
Received: from p3plex1out02.prod.phx3.secureserver.net (p3plex1out02.prod.phx3.secureserver.net [72.167.180.18]) by ietfa.amsl.com (Postfix) with SMTP id A5DE021F8B53 for <oauth@ietf.org>; Thu, 18 Aug 2011 09:24:20 -0700 (PDT)
Received: (qmail 20151 invoked from network); 18 Aug 2011 16:25:14 -0000
Received: from unknown (HELO smtp.ex1.secureserver.net) (72.167.180.20) by p3plex1out02.prod.phx3.secureserver.net with SMTP; 18 Aug 2011 16:25:14 -0000
Received: from P3PW5EX1MB01.EX1.SECURESERVER.NET ([10.6.135.19]) by P3PW5EX1HT002.EX1.SECURESERVER.NET ([72.167.180.20]) with mapi; Thu, 18 Aug 2011 09:25:08 -0700
From: Eran Hammer-Lahav <eran@hueniverse.com>
To: Niv Steingarten <nivstein@gmail.com>
Date: Thu, 18 Aug 2011 09:23:52 -0700
Thread-Topic: [OAUTH-WG] Draft 20 last call comment (Resource Owner Impersonation)
Thread-Index: AcxdpT72MI94CMGvRJO664vqQ1yDOgAHOlgw
Message-ID: <90C41DD21FB7C64BB94121FBBC2E72345029DFAA22@P3PW5EX1MB01.EX1.SECURESERVER.NET>
References: <b7df18688b7612cb85418ed587b80044@lodderstedt-online.de> <90C41DD21FB7C64BB94121FBBC2E72345029DFA960@P3PW5EX1MB01.EX1.SECURESERVER.NET> <CACEVmuoYO5NJrGNAHJsHennt_si+DTdA0QuLps8UBvMb=aLVoA@mail.gmail.com>
In-Reply-To: <CACEVmuoYO5NJrGNAHJsHennt_si+DTdA0QuLps8UBvMb=aLVoA@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
acceptlanguage: en-US
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Cc: "oauth@ietf.org" <oauth@ietf.org>
Subject: Re: [OAUTH-WG] Draft 20 last call comment (Resource Owner Impersonation)
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>, <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/oauth>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>, <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 18 Aug 2011 16:24:21 -0000

Thanks. You have a typo in #1 (the authorization endpoint belongs to the authorization server, not client).

This is a textbook CSRF attack on the authorization endpoint.

The right solution is for the authorization server to set or maintain a session cookie (or other same-origin-protected state in the browser) in #1 as well as some hidden CSRF token in the Accept form and not allow CORS calls to that endpoint. I don't see how the measures proposed in the new section are relevant here.

EHL


> -----Original Message-----
> From: Niv Steingarten [mailto:nivstein@gmail.com]
> Sent: Thursday, August 18, 2011 5:49 AM
> To: Eran Hammer-Lahav
> Cc: Torsten Lodderstedt; oauth@ietf.org
> Subject: Re: [OAUTH-WG] Draft 20 last call comment (Resource Owner
> Impersonation)
> 
> Here are two very simple examples. They are very naive ones, but get the
> point across and I would not be suprised if they could be found in the
> wild:
> 
> Say a client has its authorization endpoint at
> 
>   (1) http://www.domain.com/auth.php
> 
> A client requests access to protected resources by redirecting the user-agent
> to:
> 
>   (2)
> http://www.domain.com/auth.php?response_type=code&client_id=1234&
>       redirect_uri=SOMEURI&scope=SOMESCOPE
> 
> One possible design choice for the developer, if a bad one, is to have the
> 'Allow' button point to:
> 
>   (3) http://www.domain.com/auth.php?[..previous query
> params..]&allow=1
> 
> In this case, a malicious client who knows the structure of this auth flow, can
> simply skip (2) and redirect the user-agent to (3) in order to gain access to the
> protected resources.
> 
> Another possible design choice for the developer (again, a very bad
> one) would be to issue some kind of session cookie after (2) in order to keep
> a state. Then, the 'Allow' button could possibly point to:
> 
>   (4) http://www.domain.com/allow.php
> 
> without any parameters (since the state is maintained by a cookie).
> 
> Here, an attacker could launch a request to (2) just to issue the state cookie,
> and immediately redirect the user-agent to (4) in order to gain access to the
> protected resources.
> 
> These are two very naive scenarios which can be averted using a nonce for
> example (+ better design choices, for that matter).
> 
> In non-user-agent based clients, a client might also be able to actually scrape
> the contents of the authorization HTML page, and simulate the click
> programmatically. In this case a nonce would be useless, but a CAPTCHA or a
> PIN code/password would solve the problem.
> 
> -- Niv
> 
> 
> 
> On Thu, Aug 18, 2011 at 08:58, Eran Hammer-Lahav <eran@hueniverse.com>
> wrote:
> > I've read the thread leading to this, and the proposed text and I do not
> understand the attack. Can you provide a step-by-step scenario of how an
> attacker gains access?
> >
> > Also, it is unlikely that any major provider is going to require CAPCHA as
> part of the authorization flow. This is especially true in the case of using
> OAuth for login which has to be practically transparent (one click). I would
> hate to recommend a solution that no one is going to take seriously.
> >
> > I'm keeping this proposed text out until we resolve this questions.
> >
> > EHL
> >
> >
> >> -----Original Message-----
> >> From: oauth-bounces@ietf.org [mailto:oauth-bounces@ietf.org] On
> >> Behalf Of Torsten Lodderstedt
> >> Sent: Friday, August 12, 2011 7:56 AM
> >> To: oauth@ietf.org
> >> Subject: [OAUTH-WG] Draft 20 last call comment (Resource Owner
> >> Impersonation)
> >>
> >> Hi all,
> >>
> >> I think the impersonation issue as raised by Niv on the list should
> >> be covered by the core spec. It directly aims at the trustworthiness
> >> of the user consent, which in my opinion is one of the core
> >> principles of OAuth. I therefore suggest to add a description to section 10.
> >>
> >> Please find below the text Niv and I prepared. In comparison to
> >> Niv's original proposal, it covers resource owner impersonation for all
> client categories.
> >>
> >> regards,
> >> Torsten.
> >>
> >> proposed text:
> >>
> >> 10.<to be determined> Resource Owner Impersonation
> >>
> >> When a client requests access to protected resources, the
> >> authorization flow normally involves the resource owner's explicit
> >> response to the access request, either granting or denying access to the
> protected resources.
> >>
> >> A malicious client can exploit knowledge of the structure of this
> >> flow in order to gain authorization without the resource owner's
> >> consent, by transmitting the necessary requests programmatically, and
> >> simulating the flow against the authorization server. An
> >> suthorization server will be vulnerable to this threat, if it uses
> >> non-interactive authentication mechanisms or split the authorization flow
> across multiple pages.
> >>
> >> It is RECOMMENDED that the authorization server takes measures to
> >> ensure that the authorization flow cannot be simulated.
> >> Attacks performed by scripts running within a trusted user-agent can
> >> be detected by verifying the source of the request using HTTP referrer
> headers.
> >> In order to prevent such an attack, the authorization server may
> >> force a user interaction based on non-predictable input values as
> >> part of the user consent approval.
> >>
> >> The authorization server could combine password authentication and
> >> user consent in a single form, make use of CAPTCHAs or one-time secrets.
> >>
> >> Alternatively, the authorization server could notify the resource
> >> owner of any approval by appropriate means, e.g. text message or e-Mail.
> >>
> >> _______________________________________________
> >> 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
> >