Hi all, 

I am very happy that you got a proposal put together to quickly. Thanks for the 
good writeup!

A few comments below. 

---------------

2.  Security Considerations



   Note: This section focuses on the security principles implementors of
   the protocol MUST consider.  These principles have been derived based
   on the comprehensive security analysis of the OAuth 2.0 protocol
   given in [
I-D.lodderstedt-oauth-security
].

I would write: 

This section focuses on the security principles implementors of
 the protocol must consider.  We encourage readers to consult the 
more detailed analysis with additional background information can
be found in [I-D.lodderstedt-oauth-security].

2.1.  Client Secrets



   Authorization servers can issue client secrets to web applications.
   Application developers MUST ensure confidentiality of client secrets.

   Authorization server MUST NOT issue client secrets to native or
   JavaScript applications.  

[hannes] "... since these client secrets cannot be protected easily in these 
environments."

Instead authorization servers MUST utilize

[hannes] I added the MUST here. 

   other means than client authentication to achieve their security
   objectives.  Authorization servers can issue client secrets to native
   applications on a per installation base.

[hannes] I am not sure what you want to say with the last sentence given what 
you said in the earlier sentence. 

   Authorization servers MUST NOT automatic repeat approvals for clients
   without secrets.

[hannes] Could you say why? 

2.2.  Refresh Tokens



   Authorization servers may issue refresh tokens to web and native
   applications.

[hannes] I would say: "The OAuth protocol allows authorization servers 
may issue refresh tokens to web and native applications."

   Refresh tokens should only be accessible to the authorization server
   and the client the token has been issued to.  


[hannes] why do you say "should"? Couldn't we say "MUST"?

The authorization
   server MUST maintain the link between a refresh token and the client
   it has been issued to.  This relation MUST be validated on every
   token refreshment request.

   Authorization server as well as application developers MUST ensure

[hannes] write: 
"Authorization server operators as well as application developers MUST ensure"

   confidentiality of refresh tokens, on transit and storage.
   Authorization servers should implement means to detect abuse of
   refresh tokens.

[hannes] write : "It is RECOMMENDED for authorization server operators to 
enable means to detect abuse of
   refresh tokens." 

On the other hand we could argue that authorization server operators are 
encouraged to monitor abuse in general; not only for refresh tokens.

   (what about revocation?)

[hannes] Ignore revocation because OAuth core does not consider revocation. 


2.3.  Access Tokens



   Access tokens should only be accessible to the authorization server,
   the target resource servers and the client the token has been issued
   to.

[hannes] why should and not must? 
(with the exception listed below)

  The only exception is the implicit grant where the user agent
   gets access to the access token that is transmitted in the URI
   fragment.

   Application developers MUST NOT store access tokens in non-transient
   memory.


2.4.  Token Scope



   Application developers should only acquire access tokens with the
   minimal scope they need in order to implement the respective
   application function.

[hannes] I would say that it is useful to talk about "It is strongly 
RECOMMENDED ....". 

2.5.  Phishing attacks on redirect-based flows



   Application developers should, when possible, use external browsers
   instead of browsers embedded in the application for performing the
   end-user authorization process.

[hannes] again, recommended is more appropriate. I would also extend the 
sentence to say 
a few words about the why.

   Authorization servers MUST ensure authenticity of the endpoint in
   order to prevent phishing attacks.

[hannes] I wonder whether this is the right way of phrasing it: What about 
"To reduce the risk of phishing attacks authorization servers MUST provide 
their 
identity to other entities."

  For example, they can utilize
   HTTPS server authentication for that purpose.  Moreover, service
   Providers should attempt to educate users about the risks phishing
   attacks pose, and should provide mechanisms that make it easy for
   Users to confirm the authenticity of their sites. e.g. extended
   validation certificates.

[hannes] s/Providers/providers
s/Users/users. 

2.6.  Request confidentiality



   The following data MUST be transmitted over secure transport (such as
   TLS) only:

[hannes] What about The following security sensitive data elements MUST NOT 
transmitted in clear: 
 access tokens, refresh tokens, resource owner passwords,
   authorization codes, and client secrets.


2.7.  Online Guessing Attacks



   Authorization servers MUST prevent guessing attacks on the following
   credentials: authorization codes, refresh tokens, resource owner
   passwords, and client secrets.

   When creating token handles or other secrets not intended for usage
   by human users, the authorization server MUST include a reasonable
   level of entropy in order to mitigate the risk of guessing attacks.


2.8.  Authorization code disclosure



   Confidentiality of authorization codes MUST be ensured on transport,
   even considering browser histories and HTTP referer headers.

   Authorization server as well as the client MUST ensure that
   authorization code transmission is protected by using transport-layer
   mechanisms such as TLS and that the duration of an authorization code
   is limited.

[hannes] Minor change: 
"
   The authorization server and the client MUST ensure that the 
   authorization code transmission is protected by using channel security, 
   such as TLS, and that the lifetime of the authorization code
   is limited.
"

   For web applications, authorization servers MUST authenticate the
   client and validate that the authorization code had been issued to
   the same client.

   For native applications, authorization servers MUST enforce one time
   usage of the authorization code.  Moreover, if an Authorization
   Server observes multiple attempts to redeem an authorization code,
   the Authorization Server MAY want to revoke all tokens granted based
   on the authorization code.


2.9.  Session Fixation



   The session fixation attack leverages the authorization code flow in
   an attempt to get another user to log-in and authorize access on
   behalf of the attacker.  The victim, seeing only a normal request
   from an expected application, approves the request.  The attacker
   then uses the victim's authorization to gain access to the
   information unknowingly authorized by the victim.

   In order to prevent such an attack, authorization servers MUST ensure
   that the redirect_uri used in the authorization flow is the same as
   the redirect_uri used to exchange the respective authorization code
   into tokens.  Authorization servers SHOULD require clients to pre-
   register their redirect_uri's and validate the actual redirect_uri
   against the pre-registered value.

[hannes] I think that this is what you want to say: 
"
The authorization server operators SHOULD require client application 
developers  to pre-register their redirect_uri's and validate the actual 
redirect_uri against the pre-registered value.
"

2.10.  Malicious client obtains authorization



   A malicious client could impersonate a valid client and obtain an
   access authorization that way.

[hannes] 
"
   A malicious client could impersonate as a valid client to obtain
   access to a protected resource. 
"

   Assumption: It is not the task of the authorization server to protect
   the end-user's device from malicious software.  This is the
   responsibility of the platform running on the particular device
   probably in cooperation with other components of the respective
   ecosystem (e.g. an application management infrastructure).  The sole
   responsibility of the authorization server is to control access to
   the end-user's resources living in resource servers and to prevent
   unauthorized access to them.  Based on this assumption, the following
   countermeasures are recommended.

   If the impersonated client is a web application, the authorization
   server MUST authentication the client.  

   [hannes] Write: 

"
In case of a client running as web application, the authorization
   server MUST authentication the client.  
"

The authorization server
   SHOULD require clients to pre-register their redirect_uri's and
   validate the actual redirect_uri against the pre-registered value.

   If the impersonated client is an native or JavaScript application,

[hannes] write: 

"In case of a client running as a native or JavaScript application,"

   the authorization server MUST utilize other means to achieve its
   security objectives.  The authorization server may enforce explicit
   user authentication or ask the end-user for consent.  In this
   context, the user shall be explained the purpose, scope, and duration
   of the authorization.  The authorization server must make the metat-
   data available to the end-user it associates with the particular
   client.  It is up to the user to validate the binding of this data to
   the particular application (e.g.  Name) and to approve the
   authorization request.

[hannes] Do you want to use RFC 2119 language in the above paragraph?
What meta-data are you talking about? 


   The authorization server MAY also limit the scope of tokens.

[hannes] Is MAY a bit weak here? In what cases would you say it is 
highly recommended to limit the scope. Would't you always want to do that? 

2.11.  Resource Owner Password Credentials



   The "Resource Owner Password Credentials" grant type is often used
   for legacy/migration reasons.  It has higher risk because it
   maintains the uid/password anti-pattern and the client could abuse
   the user id and password.  Additionally, because the user does not
   have control over the authorization process, clients using this grant
   type are not limited by scope, but instead have potentially the same
   capabilities as the user themselves.  The client could also acquire
   long-living tokens and pass them up to a attacker web service for
   further abuse.

   Authorization servers and application developers SHOULD minimize use
   of this grant types.  Other flows which facilitate user control and
   transparency should be used instead.

[hannes] This writeup essentially says "Please don't use it; it is completely 
insecure". 




   The authorization server SHOULD generally restrict the scope of
   access tokens issued by this flow.

   The authorization server MUST ensure the resource owners control and
   transparency with respect to all authorizations issued to clients.


2.12.  Authenticity of endpoints



   Authorization servers MUST support validation of endpoint
   authenticity using HTTPS server authentication.

[hannes] write: 

"
HTTPS with server-side authentication MUST be implemented and used by 
authorization servers in all exchanges.
"


   Application developers MUST validate the authorization server
   endpoint's authenticity and ensure proper handling of CA certificates
   as well as certificate chain validation.

[hannes] I am not sure what you want. Do you want the human (as the application 
developer to verify something) or do you want the application developer to 
write code that does certificate checking. Then, you may also want to perform 
authorization. 

---------------


Ciao
Hannes

On Mar 31, 2011, at 12:08 PM, Torsten Lodderstedt wrote:

> Hi all,
> 
> I just uploaded a proposal for the security section of the core spec to the 
> IETF site 
> (http://datatracker.ietf.org/doc/draft-lodderstedt-oauth-securityconsiderations/).
>  
> 
> As posted on the list previously, our idea was first to derive a security 
> consideration section for the core spec by cutting down 
> http://datatracker.ietf.org/doc/draft-lodderstedt-oauth-security/  to a 
> reasonable size. We tried to go through the document and identify the pieces 
> that should go into the spec in the informal OAuth security session here at 
> IETF-80. Although we did not make it further than 4.1.3, the meeting turned 
> out to be valuable since we agreed on certain principles we are expected to 
> apply when producing the section:
> - focus on service provider and application developers perspective (and the 
> protocol implementation)
> - document the "what" and not the "why" - for "why" include informative 
> reference to security document
> - explicitely state don'ts and explicitely define and distinguish three 
> client categories (web, native, JavaScript)
> For example we had a really lengthy discussion about native apps, client 
> secrets and client authentication - bottom line: we just state "Authorization 
> server MUST NOT issue client secrets to installed or JavaScript applications."
> 
> Moreover, we agreed to produce a security considerations section as concise 
> as possible and as quickly as possible. There were objections in the room to 
> "just" cut down our document. Instead the proposal was to start something new.
> 
> So the proposed text focus on the "WHAT" and references 
> http://datatracker.ietf.org/doc/draft-lodderstedt-oauth-security/ for a 
> discussion of the "WHY".
> 
> Your feedback is appreciated.
> 
> regards,
> Torsten.

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to