Eran,

Just took a look at the text. This new version looks much improved. I think 
this is a good compromise.

Thanks,

Phil

@independentid
www.independentid.com
phil.h...@oracle.com





On 2011-09-04, at 4:25 PM, Eran Hammer-Lahav wrote:

> The corresponding 'state' parameter definition:
> 
>                RECOMMENDED. An opaque value used by the client to maintain 
> state between the request
>                and callback. The authorization server includes this value 
> when redirecting the
>                user-agent back to the client. The parameter SHOULD be used 
> for preventing
>                cross-site request forgery as described in section 10.12.
> 
> EHL
> 
>> -----Original Message-----
>> From: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] On Behalf
>> Of Eran Hammer-Lahav
>> Sent: Sunday, September 04, 2011 4:20 PM
>> To: William J. Mills; Anthony Nadalin; Torsten Lodderstedt
>> Cc: OAuth WG (oauth@ietf.org)
>> Subject: Re: [OAUTH-WG] Auth Code Swap Attack
>> 
>> This is my proposed text for -21 (based on Bill's text as a starting point):
>> 
>> 10.12.  Cross-Site Request Forgery
>> 
>>   Cross-site request forgery (CSRF) is an exploit in which an attacker
>>   causes the user-agent of a victim end-user to follow a malicious URI
>>   (e.g. provided to the user-agent as a misleading link, image, or
>>   redirection) to a trusting server (usually established via the
>>   presence of a valid session cookie).
>> 
>>   A CSRF attack against the client's redirection URI allows an attacker
>>   to inject their own authorization code or access token, which can
>>   result in the client using an access token associated with the
>>   attacker's protected resources rather than the victim's (e.g. save
>>   the victim's bank account information to a protected resource
>>   controlled by the attacker).
>> 
>>   The client MUST implement CSRF protection for its redirection URI.
>>   This is typically accomplished by requiring any request sent to the
>>   redirection URI endpoint to include a value that binds the request to
>>   the user-agent's authenticated state (e.g. a hash of the session
>>   cookie used to authentication the user-agent).  The client SHOULD
>>   utilize the "state" request parameter to deliver this value to the
>>   authorization server when making an authorization request.
>> 
>>   Once authorization has been obtained from the end-user, the
>>   authorization server redirects the end-user's user-agent back to the
>>   client with the required binding value contained in the "state"
>>   parameter.  The binding value enables the client to validate the
>>   validity of the request by matching the binding value to the user-
>>   agent's authenticated state.  The binding value used for CSRF
>>   protection MUST contain a non-guessable value, and the user-agent's
>>   authenticated state (e.g. session cookie, HTML5 local storage) MUST
>>   be kept in a location accessible only to the client and the user-
>>   agent (i.e., protected by same-origin policy).
>> 
>>   A CSRF attack against the against the authorization server's
>>   authorization endpoint can result in an attacker obtaining end-user
>>   authorization for a malicious client without involving or alerting
>>   the end-user.
>> 
>>   The authorization server MUST implement CSRF protection for its
>>   authorization endpoint, and ensure that a malicious client cannot
>>   obtain authorization without the awareness and explicit consent of
>>   the resource owner.
>> 
>> EHL
>> 
>> 
>> From: William J. Mills [mailto:wmi...@yahoo-inc.com]
>> Sent: Thursday, August 25, 2011 12:11 PM
>> To: Anthony Nadalin; Eran Hammer-Lahav; Torsten Lodderstedt
>> Cc: OAuth WG (oauth@ietf.org)
>> Subject: Re: [OAUTH-WG] Auth Code Swap Attack
>> 
>> I had proposed text, and I'll reprise it here with a modification to make the
>> authorizaton server related explicit.
>> 
>> 10.12.  Cross-Site Request Forgery
>> 
>> Cross-site request forgery (CSRF) is an attack whereby malicious URLs are
>> sent to the user-agent of an end user (generally as hidden links or images)
>> and transmitted from the user-agent the server trusts or has authenticated.
>> The most commonly exploited mechanism for this is credentials held in
>> cookies automatically presented by a web browser.  CSRF attacks against the
>> client's redirection URI allow an attacker to inject their own authorization
>> code or access token, which can result in the client using an access token
>> associated with the attacker's account rather than the victim's.  CSRF 
>> attacks
>> are also possible against an authorization endpoint resulting in delivering a
>> user credential to an attacker.
>> 
>> Client applications MUST implement CSRF protection for the redirection
>> URI.  CSRF protection for a request is data included in the request that ties
>> that request to the user's authenticated state, i.e. a cryptographic 
>> signature
>> of the user credential and the redirection URI path.  Upon receipt of a
>> request the client application computes the CSRF data based on the
>> presented credential and compares that to the CSRF protection data
>> presented in the request.  CSRF protection data MUST contain a non-
>> guessable value, and the client MUST keep it in a location accessible only by
>> the client or the user-agent (i.e., protected by same-origin policy). The
>> "state" redirection URI parameter is provided as one method of carrying
>> CSRF protection data, and is RECOMMENDED to provide the greatest
>> compatibility with systems implementing strong redirection URI validation.
>> 
>> Authorization servers MUST implement CSRF protection for authorization
>> requests, use of the "state" parameter is RECOMMENDED as the way to
>> transmit the CSRF protection data.  The CSRF protection data MUST contain a
>> non-guessable value, and MUST be presented as part of the authorization
>> request data (e.g. not as a cookie).  Authorization servers MAY use proof of
>> previous  authorization by a user for a client in lieu of explicit CSRF 
>> protection.
>> 
>> For example, using a DOM variable, HTTP cookie, or HTML5 client-side
>> storage.  The authorization server includes the value of the "state"
>> parameter when redirecting the user-agent back to the client which MUST
>> then validate the received value against the stored value, or by recomputing
>> the expected value of the CSRF protection data and comparing that to the
>> value presented.
>> 
>> 
>> 
>> ________________________________________
>> From: Anthony Nadalin <tony...@microsoft.com>
>> To: Eran Hammer-Lahav <e...@hueniverse.com>; Torsten Lodderstedt
>> <tors...@lodderstedt.net>
>> Cc: "OAuth WG (oauth@ietf.org)" <oauth@ietf.org>
>> Sent: Thursday, August 25, 2011 8:11 AM
>> Subject: Re: [OAUTH-WG] Auth Code Swap Attack I have not seen any
>> updated text, so I don’t believe we have consensus. Also we have a flawed
>> protocol and we are not providing a fix, suggest that MUST be on the state
>> also unless someone has a better fix
>> 
>> From: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] On Behalf
>> Of Eran Hammer-Lahav
>> Sent: Wednesday, August 24, 2011 7:54 AM
>> To: Torsten Lodderstedt
>> Cc: OAuth WG (oauth@ietf.org)
>> Subject: Re: [OAUTH-WG] Auth Code Swap Attack
>> 
>> I believe we have full consensus on this approach.
>> 
>> EHL
>> 
>> From: Torsten Lodderstedt [mailto:tors...@lodderstedt.net]
>> Sent: Tuesday, August 23, 2011 11:06 PM
>> To: Eran Hammer-Lahav
>> Cc: OAuth WG (oauth@ietf.org)
>> Subject: Re: [OAUTH-WG] Auth Code Swap Attack
>> 
>> making CSRF prevention a MUST and recommending the state parameter as
>> implementation pattern is ok with me.
>> 
>> regards,
>> Torsten.
>> 
>> Am 21.08.2011 21:02, schrieb Eran Hammer-Lahav:
>> I light to the recent discussion, do you still feel that changing ‘state’ 
>> from
>> optional to required is the best approach?
>> 
>> EHL
>> 
>> From: Torsten Lodderstedt [mailto:tors...@lodderstedt.net]
>> Sent: Sunday, August 21, 2011 11:04 AM
>> To: Eran Hammer-Lahav
>> Cc: OAuth WG (oauth@ietf.org)
>> Subject: Re: [OAUTH-WG] Auth Code Swap Attack
>> 
>> My intention is to require clients to implement CSRF prevention. I thought
>> making the state parameter mandatory would be the straightforward way.
>> 
>> regards,
>> Torsten.
>> 
>> Am 18.08.2011 08:04, schrieb Eran Hammer-Lahav:
>> I would like to hear from the other 3 authors of the proposed change about
>> their reasons for changing the use of ‘state’ from recommended to required
>> for CSRF prevention. It would also help moving this issue forward if the 4
>> authors can provide answers or clarifications on the issues raised below.
>> 
>> Assuming we can count all 4 authors are in favor of making the change, I
>> believe we have a tie (4:4) and therefore no consensus for making it (as of
>> this point). However, we did identify issues with the section’s language and
>> clarity which we should address either way.
>> 
>> To clarify – I am not proposing we close this issue just yet.
>> 
>> EHL
>> 
>> From: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] On Behalf
>> Of Eran Hammer-Lahav
>> Sent: Monday, August 15, 2011 9:35 AM
>> To: OAuth WG (oauth@ietf.org)
>> Subject: Re: [OAUTH-WG] Auth Code Swap Attack
>> 
>> To demonstrate why making state required as proposed isn’t very helpful,
>> here is an incomplete list of other requirements needed to make an
>> effective CSRF:
>> 
>> * State value must not be empty (a common bug in many implementations
>> using simple value comparison).
>> 
>> * ‘Non-guessable’ isn’t sufficient as most developers will simply use a hash 
>> of
>> the session cookie, with or without salt which isn’t sufficient. We use 
>> “cannot
>> be generated, modified, or guessed to produce valid values” elsewhere in
>> the document, but this is much easier to get right for access tokens and
>> refresh tokens than CSRF tokens which are often just some algorithm on top
>> of the session cookie.
>> 
>> * State CSRF value should be short-lived or based on a short-lived session
>> cookie to prevent the use of a leaked state value in multiple attacks on the
>> same user session once the leak is no longer viable.
>> 
>> In addition, this is not what “state” was originally intended for. If the 
>> working
>> group decides to mandate a CSRF parameter, it should probably be a new
>> parameter with a more appropriate name (e.g. ‘csrf’). By forcing clients to
>> use “state” for this purpose, developers will need to use dynamic queries for
>> other state information which further reduces the security of the protocol
>> (as the draft recommends not using dynamic callback query components).
>> Encoding both CSRF tokens and other state information can be non-intuitive
>> or complicated for some developers/platforms.
>> 
>> EHL
>> 
>> 
>> 
>> 
>> From: Eran Hammer-Lahav
>> Sent: Friday, August 12, 2011 2:53 PM
>> To: Anthony Nadalin; OAuth WG (oauth@ietf.org)
>> Subject: Re: [OAUTH-WG] Auth Code Swap Attack
>> 
>> This is really just a flavor of CSRF attacks. I have no objections to better
>> documenting it (though I feel the current text is already sufficient), but we
>> can't realistically expect to identify and close every possible browser-based
>> attack. A new one is invented every other week.
>> 
>> The problem with this text is that developers who do no understand CSRF
>> attacks are not likely to implement it correctly with this information. Those
>> who understand it do not need the extra verbiage which is more confusing
>> than helpful.
>> 
>> As for the new requirements, they are insufficient to actually accomplish
>> what the authors propose without additional requirements on state local
>> storage and verification to complete the flow. Also, the proposed text needs
>> clarifications as noted below.
>> 
>> 
>> From: Anthony Nadalin <tony...@microsoft.com>
>> Date: Fri, 12 Aug 2011 12:06:36 -0700
>> To: "OAuth WG (oauth@ietf.org)" <oauth@ietf.org>
>> Subject: [OAUTH-WG] Auth Code Swap Attack
>> 
>> 
>> 
>> Recommended Changes to draft-ietf-oauth-v2
>> 
>> In section 4, request options (e.g. 4.1.1) featuring "state" should change
>> from:
>> 
>> state
>> OPTIONAL. An opaque value used by the client to maintain state between
>> the request and callback. The authorization server includes this value when
>> redirecting the user-agent back to the client.
>> 
>> to:
>> 
>> state
>> REQUIRED. An opaque value used by the client to maintain state between
>> the request and callback. The authorization server includes this value when
>> redirecting the user-agent back to the client. The encoded value SHOULD
>> enable the client application to determine the user-context that was active 
>> at
>> the time of the  request (see section 10.12). The value MUST NOT be
>> guessable or predictable, and MUST be kept confidential.
>> 
>> 
>> Making the parameter required without making its usage required (I.e.
>> "value SHOULD enable") accomplishes nothing. Also, what does "MUST be
>> kept confidential" mean? Confidential from what? Why specify an "encoded
>> value"?
>> 
>> 
>> Section 10.12 Cross-Site Request Forgery
>> 
>> Change to:
>> 
>> Cross-site request forgery (CSRF) is a web-based attack whereby HTTP
>> requests are transmitted from the user-agent of an end-user the server
>> trusts or has authenticated. CSRF attacks enable the attacker to intermix the
>> attacker's security context with that of the resource owner resulting in a
>> compromise of either the resource server or of the client application 
>> itself. In
>> the OAuth context, such attacks allow an attacker to inject their own
>> authorization code or access token into a client, which can result in the 
>> client
>> using an access token associated with the attacker's account rather than the
>> victim's. Depending on the nature of the client and the protected resources,
>> this can have undesirable and damaging effects.
>> 
>> In order to prevent such attacks, the client application MUST encode a non-
>> guessable, confidential end-user artifact and submit as the "state" parameter
>> to authorization and access token requests to the authorization server. The
>> client MUST keep the state value in a location accessible only by the client 
>> or
>> the user-agent (i.e., protected by same-origin policy), for example, using a
>> DOM variable, HTTP cookie, or HTML5 client-side storage.
>> 
>> The authorization server includes the value of the "state" parameter when
>> redirecting the user-agent back to the client. Upon receiving a redirect, the
>> client application MUST confirm that returned value of "state" corresponds
>> to the state value of the user-agent's user session. If the end-user session
>> represents an authenticated user-identity, the client MUST ensure that the
>> user-identity has NOT changed.
>> 
>> 
>> The above text uses 'user-context' and this 'user-identity'. Neither term is
>> defined.
>> 
>> EHL
>> 
>> 
>> _______________________________________________
>> 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

Reply via email to