OAuth Working GroupInternet Engineering Task Force (IETF) T. Lodderstedt, Ed.Internet-DraftRequest for Comments: 6819 Deutsche Telekom AGIntended status:Category: Informational M. McGloinExpires: April 9, 2013ISSN: 2070-1721 IBM P. Hunt Oracle CorporationOctober 6, 2012January 2013 OAuth 2.0 Threat Model and Security Considerationsdraft-ietf-oauth-v2-threatmodel-08Abstract This document gives additional security considerations for OAuth, beyond those in the OAuth 2.0 specification, based on a comprehensive threat model for the OAuth 2.0Protocol.protocol. Status ofthisThis Memo ThisInternet-Draftdocument issubmitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documentsnot an Internet Standards Track specification; it is published for informational purposes. This document is a product of the Internet Engineering Task Force (IETF).Note that other groups may also distribute working documents as Internet-Drafts. The listIt represents the consensus ofcurrent Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents validthe IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Not all documents approved by the IESG are amaximumcandidate for any level of Internet Standard; see Section 2 of RFC 5741. Information about the current status ofsix monthsthis document, any errata, and how to provide feedback on it may beupdated, replaced, or obsoleted by other documentsobtained atany time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on April 9, 2013.http://www.rfc-editor.org/info/rfc6819. Copyright Notice Copyright (c)20122013 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . . 6....................................................6 2. Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . 6........................................................7 2.1. Scope. . . . . . . . . . . . . . . . . . . . . . . . . . 6......................................................7 2.2. Attack Assumptions. . . . . . . . . . . . . . . . . . . . 7.........................................7 2.3. Architecturalassumptions . . . . . . . . . . . . . . . . 8Assumptions ..................................8 2.3.1. Authorization Servers. . . . . . . . . . . . . . . . 8...............................8 2.3.2. Resource Server. . . . . . . . . . . . . . . . . . . 8.....................................9 2.3.3. Client. . . . . . . . . . . . . . . . . . . . . . . . 9..............................................9 3. Security Features. . . . . . . . . . . . . . . . . . . . . . 9...............................................9 3.1. Tokens. . . . . . . . . . . . . . . . . . . . . . . . . . 9....................................................10 3.1.1. Scope. . . . . . . . . . . . . . . . . . . . . . . . 11..............................................11 3.1.2. Limited Access Token Lifetime. . . . . . . . . . . . 11......................11 3.2. Access Token. . . . . . . . . . . . . . . . . . . . . . . 11..............................................11 3.3. Refresh Token. . . . . . . . . . . . . . . . . . . . . . 11.............................................11 3.4. AuthorizationCode . . . . . . . . . . . . . . . . . . . . 12"code" ......................................12 3.5.RedirectionRedirect URI. . . . . . . . . . . . . . . . . . . . . 13..............................................13 3.6.State parameter . . . . . . . . . . . . . . . . . . . . . 13"state" Parameter .........................................13 3.7. ClientIdentitifier . . . . . . . . . . . . . . . . . . . 13Identifier .........................................13 4. Threat Model. . . . . . . . . . . . . . . . . . . . . . . . . 15...................................................15 4.1. Clients. . . . . . . . . . . . . . . . . . . . . . . . . 15...................................................16 4.1.1. Threat:ObtainObtaining Client Secrets. . . . . . . . . . . . 15...................16 4.1.2. Threat:ObtainObtaining Refresh Tokens. . . . . . . . . . . . 17...................17 4.1.3. Threat:ObtainObtaining Access Tokens. . . . . . . . . . . . . 19....................19 4.1.4. Threat:End-user credentials phished using compromisedEnd-User Credentials Phished Using Compromised orembedded browser . . . . . . . . . . . 19Embedded Browser ....................19 4.1.5. Threat: Open Redirectors onclient . . . . . . . . . . 20Client .................20 4.2. Authorization Endpoint. . . . . . . . . . . . . . . . . . 20....................................21 4.2.1. Threat: PasswordphishingPhishing bycounterfeit authorization server . . . . . . . . . . . . . . . . . 20Counterfeit Authorization Server ...............................21 4.2.2. Threat: Userunintentionally grants too much access scope . . . . . . . . . . . . . . . . . . . . . 21Unintentionally Grants Too Much Access Scope ..................................21 4.2.3. Threat: Maliciousclient obtains existing authorizationClient Obtains Existing Authorization byfraud . . . . . . . . . . . . . . . . 21Fraud .............................22 4.2.4. Threat: Openredirector . . . . . . . . . . . . . . . 22Redirector ............................22 4.3. Tokenendpoint . . . . . . . . . . . . . . . . . . . . . . 22Endpoint ............................................23 4.3.1. Threat: Eavesdroppingaccess tokens . . . . . . . . . 22Access Tokens ................23 4.3.2. Threat:Obtain access tokensObtaining Access Tokens fromauthorization server database . . . . . . . . . . . . . . . . . . . 23Authorization Server Database ......................23 4.3.3. Threat: Disclosure ofclient credentialsClient Credentials duringtransmission . . . . . . . . . . . . . . . . . . . . . 23Transmission ................................23 4.3.4. Threat:Obtain client secretObtaining Client Secret fromauthorization server database . . . . . . . . . . . . . . . . . . . 23Authorization Server Database ......................24 4.3.5. Threat:Obtain client secretObtaining Client Secret byonline guessing . . . 24Online Guessing ...........................................24 4.4. Obtaining Authorization. . . . . . . . . . . . . . . . . 24...................................25 4.4.1. AuthorizationCode . . . . . . . . . . . . . . . . . . 24"code" ...............................25 4.4.1.1. Threat: Eavesdropping orleaking authorization codes . . . . . . . . . . . . . . . . . . . . . . 24Leaking Authorization "codes" .....................25 4.4.1.2. Threat:Obtain authorization codesObtaining Authorization "codes" fromauthorization server database . . . . . . . . . . 25Authorization Server Database ........26 4.4.1.3. Threat: OnlineguessingGuessing ofauthorization codes . . 26Authorization "codes" .....................27 4.4.1.4. Threat: Maliciousclient obtains authorization . . 26Client Obtains Authorization .............................27 4.4.1.5. Threat: Authorizationcode phishing . . . . . . . 28"code" Phishing .....29 4.4.1.6. Threat: Usersession impersonation . . . . . . . . 28Session Impersonation ........29 4.4.1.7. Threat: Authorizationcode leakage"code" Leakage throughcounterfeit client . . . . . . . . . . . . . . . . 29Counterfeit Client ................30 4.4.1.8. Threat: CSRFattackAttack against redirect-uri. . . . . 31..32 4.4.1.9. Threat: ClickjackingattackAttack againstauthorization . . . . . . . . . . . . . . . . . . 31Authorization .............................33 4.4.1.10. Threat: Resource Owner Impersonation. . . . . . . 32.....33 4.4.1.11. Threat:DoS, Exhaustion of resources attacks . . . 33DoS Attacks That Exhaust Resources ................................34 4.4.1.12. Threat: DoSusing manufactured authorization codes . . . . . . . . . . . . . . . . . . . . . . 34Using Manufactured Authorization "codes" ....................35 4.4.1.13. Threat: CodesubstitutionSubstitution (OAuth Login). . . . . 35..36 4.4.2. Implicit Grant. . . . . . . . . . . . . . . . . . . . 36.....................................37 4.4.2.1. Threat: Accesstoken leakToken Leak intransport/end-points . . . . . . . . . . . . . . . 36Transport/Endpoints .......................37 4.4.2.2. Threat: Accesstoken leakToken Leak inbrowser history . . . 37Browser History ...........................38 4.4.2.3. Threat: Maliciousclient obtains authorization . . 37Client Obtains Authorization .............................38 4.4.2.4. Threat: Manipulation ofscripts . . . . . . . . . 37Scripts ...........38 4.4.2.5. Threat: CSRFattackAttack against redirect-uri. . . . . 38..39 4.4.2.6. Threat: TokensubstitutionSubstitution (OAuth Login). . . . . 38..39 4.4.3. Resource Owner Password Credentials. . . . . . . . . 39................40 4.4.3.1. Threat: AccidentalexposureExposure ofpasswordsPasswords atclient site . . . . . . . . . . . . . . . . . . . 40Client Site ..................41 4.4.3.2. Threat: Clientobtains scopesObtains Scopes withoutend-user authorization . . . . . . . . . . . . . . . . . . 40End-User Authorization ............42 4.4.3.3. Threat: Clientobtains refresh tokenObtains Refresh Token throughautomatic authorization . . . . . . . . . . . . . 41Automatic Authorization .....42 4.4.3.4. Threat:Obtain user passwordsObtaining User Passwords ontransport . . . . 42Transport ..............................43 4.4.3.5. Threat:Obtain user passwordsObtaining User Passwords fromauthorization server database . . . . . . . . . . 42Authorization Server Database ........43 4.4.3.6. Threat: Onlineguessing . . . . . . . . . . . . . 42Guessing ...................43 4.4.4. Client Credentials. . . . . . . . . . . . . . . . . . 43.................................44 4.5. Refreshing an Access Token. . . . . . . . . . . . . . . . 43................................44 4.5.1. Threat: Eavesdroppingrefresh tokensRefresh Tokens fromauthorization server . . . . . . . . . . . . . . . . . 43Authorization Server ...............................44 4.5.2. Threat: Obtainingrefresh tokenRefresh Token fromauthorization server database . . . . . . . . . . . . . . . . . . . 43Authorization Server Database ......................44 4.5.3. Threat:Obtain refresh tokenObtaining Refresh Token byonline guessing . . . 44Online Guessing ...........................................45 4.5.4. Threat:Obtain refresh token phishingRefresh Token Phishing bycounterfeit authorization server . . . . . . . . . . . 44Counterfeit Authorization Server ...................45 4.6. Accessing Protected Resources. . . . . . . . . . . . . . 44.............................46 4.6.1. Threat: Eavesdroppingaccess tokensAccess Tokens ontransport . . . 44Transport ...46 4.6.2. Threat: Replayauthorized resource server requests . . 45of Authorized Resource Server Requests ....................................46 4.6.3. Threat: Guessingaccess tokens . . . . . . . . . . . . 45Access Tokens .....................46 4.6.4. Threat: Accesstoken phishingToken Phishing bycounterfeit resource server . . . . . . . . . . . . . . . . . . . 46Counterfeit Resource Server ........................47 4.6.5. Threat: Abuse oftokenToken bylegitimate resource serverLegitimate Resource Server orclient . . . . . . . . . . . . . . . . . . . 46Client ..........................48 4.6.6. Threat: Leak ofconfidential dataConfidential Data inHTTP-Proxies . . 47HTTP Proxies ..48 4.6.7. Threat: TokenleakageLeakage vialogfilesLog Files and HTTPreferrers . . . . . . . . . . . . . . . . . . . . . . 47Referrers .....................................48 5. Security Considerations. . . . . . . . . . . . . . . . . . . 48........................................49 5.1. General. . . . . . . . . . . . . . . . . . . . . . . . . 48...................................................49 5.1.1. EnsureconfidentialityConfidentiality ofrequests . . . . . . . . . . 48Requests .................49 5.1.2.Utiliize server authentication . . . . . . . . . . . . 48Utilize Server Authentication ......................50 5.1.3. AlwayskeepKeep theresource owner informed . . . . . . . 49Resource Owner Informed ............50 5.1.4. Credentials. . . . . . . . . . . . . . . . . . . . . 49........................................51 5.1.4.1. Enforcecredential storage protection best practices . . . . . . . . . . . . . . . . . . . . 50Credential Storage Protection Best Practices .................51 5.1.4.2. OnlineattacksAttacks onsecrets . . . . . . . . . . . . 51Secrets .................52 5.1.5. Tokens(access, refresh, code) . . . . . . . . . . . . 52(Access, Refresh, Code) .....................53 5.1.5.1. Limittoken scope . . . . . . . . . . . . . . . . 52Token Scope .........................53 5.1.5.2. Determine Expirationtime . . . . . . . . . . . . . . . . . 52Time .................54 5.1.5.3. Useshort expiration time . . . . . . . . . . . . 53Short Expiration Time .................54 5.1.5.4. LimitnumberNumber ofusages/ One time usage . . . . . . 53Usages or One-Time Usage ..55 5.1.5.5. BindtokensTokens to aparticular resource serverParticular Resource Server (Audience). . . . . . . . . . . . . . . . . . . . 54................55 5.1.5.6. Useendpoint addressEndpoint Address astoken audience . . . . . . 54Token Audience ....56 5.1.5.7. Use Explicitly Defined Scopes for Audience andToken scopes . . . . . . . . . . . . 54Tokens .......................56 5.1.5.8. BindtokenToken toclientClient id. . . . . . . . . . . . . 54...................56 5.1.5.9.Signed tokens . . . . . . . . . . . . . . . . . . 55Sign Self-Contained Tokens ................56 5.1.5.10.Encryption of token content . . . . . . . . . . . 55Encrypt Token Content ....................56 5.1.5.11. Adopt a Standard Assertionformats . . . . . . . . . . . . . . . . 55Format ........57 5.1.6. Accesstokens . . . . . . . . . . . . . . . . . . . . 55Tokens ......................................57 5.2. Authorization Server. . . . . . . . . . . . . . . . . . . 55......................................57 5.2.1. AuthorizationCodes . . . . . . . . . . . . . . . . . 55"codes" ..............................57 5.2.1.1. AutomaticrevocationRevocation ofderived tokens if abuse is detected . . . . . . . . . . . . . . . . 55Derived Tokens If Abuse Is Detected ...............57 5.2.2. Refreshtokens . . . . . . . . . . . . . . . . . . . . 56Tokens .....................................57 5.2.2.1. RestrictedissuanceIssuance ofrefresh tokens . . . . . . 56Refresh Tokens .....57 5.2.2.2. Binding ofrefresh tokenRefresh Token toclient_id . . . . . . 56"client_id" ...58 5.2.2.3. Refresh Token Rotation. . . . . . . . . . . . . . 56....................58 5.2.2.4.Revoke refresh tokens . . . . . . . . . . . . . . 57Revocation of Refresh Tokens ..............58 5.2.2.5. Deviceidentification . . . . . . . . . . . . . . 57Identification .....................59 5.2.2.6.X-FRAME-OPTION header . . . . . . . . . . . . . . 57X-FRAME-OPTIONS Header ....................59 5.2.3. ClientauthenticationAuthentication andauthorization . . . . . . . 57Authorization ............59 5.2.3.1. Don'tissue secretsIssue Secrets toclientClients withinappropriate security policy . . . . . . . . . . 58Inappropriate Security Policy .............60 5.2.3.2. Requireuser consentUser Consent forpublic clientsPublic Clients withoutsecret . . . . . . . . . . . . . . . . . . 59Secret ....................60 5.2.3.3.Client_id onlyIssue a "client_id" Only incombinationCombination withredirect_uri . 59"redirect_uri" ...........61 5.2.3.4.Installation-specific client secrets . . . . . . . 59Issue Installation-Specific Client Secrets ...................................61 5.2.3.5.Validation of pre-registered redirect_uri . . . . 60Validate Pre-Registered "redirect_uri" ....62 5.2.3.6. Revokeclient secrets . . . . . . . . . . . . . . 61Client Secrets .....................63 5.2.3.7. Usestrong client authentication (e.g. client_assertion / client_token) . . . . . . . . . 61Strong Client Authentication (e.g., client_assertion/client_token) .....63 5.2.4.End-user authorization . . . . . . . . . . . . . . . . 61End-User Authorization .............................63 5.2.4.1. AutomaticprocessingProcessing ofrepeated authorizations requires client validation . . . . 61Repeated Authorizations Requires Client Validation .63 5.2.4.2. Informeddecisions basedDecisions Based ontransparency . . . . . 62Transparency ..63 5.2.4.3. Validation ofclient propertiesClient Properties byend-user . . . 62End User ..................................64 5.2.4.4. Binding ofauthorization codeAuthorization "code" toclient_id . . . . 62"client_id" ...............................64 5.2.4.5. Binding ofauthorization codeAuthorization "code" toredirect_uri . . 62"redirect_uri" ............................64 5.3. Client App Security. . . . . . . . . . . . . . . . . . . 63.......................................65 5.3.1. Don'tstore credentialsStore Credentials incodeCode orresources bundledResources Bundled withsoftware packages . . . . . . . . . . . . 63Software Packages ...........65 5.3.2. Use Standardweb server protection measuresWeb Server Protection Measures (forconfig filesConfig Files anddatabases) . . . . . . . . . . . . . 63Databases) ...................65 5.3.3. StoresecretsSecrets ina secure storage . . . . . . . . . . 63Secure Storage ....................65 5.3.4. Utilizedevice lockDevice Lock toprevent unauthorized device access . . . . . . . . . . . . . . . . . . . . . . . . 64Prevent Unauthorized Device Access ......................................66 5.3.5. Linkstate parameterthe "state" Parameter touser agent session . . . . . . 64User Agent Session ...66 5.4. Resource Servers. . . . . . . . . . . . . . . . . . . . . 64..........................................66 5.4.1. Authorizationheaders . . . . . . . . . . . . . . . . 64Headers ..............................66 5.4.2. Authenticatedrequests . . . . . . . . . . . . . . . . 64Requests .............................67 5.4.3. Signedrequests . . . . . . . . . . . . . . . . . . . 65Requests ....................................67 5.5. A Word on User Interaction and User-Installed Apps. . . . 65........68 6.IANA Considerations . . . . . . . . . . . . . . . . . . . . . 66 7.Acknowledgements. . . . . . . . . . . . . . . . . . . . . . . 67 8................................................69 7. References. . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.1. Informative.....................................................69 7.1. Normative References. . . . . . . . . . . . . . . . . . 67 8.2.......................................69 7.2. Informative References. . . . . . . . . . . . . . . . . . 67 Appendix A. Document History . . . . . . . . . . . . . . . . . . 69 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 71....................................69 1. Introduction This document gives additional security considerations for OAuth, beyond those in the OAuth specification, based on a comprehensive threat model for the OAuth 2.0Protocol [I-D.ietf-oauth-v2].protocol [RFC6749]. It contains the following content: o Documents any assumptions and scope considered when creating the threat model. o Describes the security featuresin-builtbuilt into the OAuth protocol and how they are intended to thwart attacks. o Gives a comprehensive threat model for OAuth and describes the respectivecounter measurescountermeasures to thwart those threats. Threats include any intentional attacks on OAuth tokens and resources protected by OAuthtokenstokens, as well as security risks introduced if the proper security measures are not put in place. Threats are structured along the lines of the protocol structure toaidhelp development teams implement each part of the protocolsecurely. For examplesecurely, for example, all threats for grantingaccessaccess, or all threats for a particular granttypetype, or all threats for protecting the resource server. Note: This document cannot assess the probabilitynoror the risk associated with a particular threat because those aspects strongly depend on the particular application and deployment OAuth is used to protect.Similar,Similarly, impacts are given on a rather abstract level. But the information given here may serve as a foundation fordeployment- specificdeployment-specific threat models. Implementors may refine and detail the abstract threat model in order to account for the specific properties of their deployment and to come up with a risk analysis. As this document is based on the base OAuth 2.0 specification,itdoesit does not consider proposedextensions,extensions such as client registration or discovery, many of which are still under discussion. 2. Overview 2.1. ScopeTheThis security considerations document only considers clients bound to a particular deployment as supported by[I-D.ietf-oauth-v2].[RFC6749]. Such deployments have the following characteristics: o Resource server URLs are static and well-known at developmenttime,time; authorization server URLs can be static or discovered. o Token scope values(e.g.(e.g., applicable URLs and methods) are well- known at development time. o Clientregistration: Sinceregistrationof clientsis out of scope of the current corespec,specification. Therefore, this document assumes a broad variety ofoptionsoptions, from static registration during development time to dynamic registration at runtime. The following are considered out ofscope :scope: o Communication between the authorization server and resourceserverserver. o Tokenformatsformats. o Except for"Resource Owner Password Credentials"the resource owner password credentials grant type (see[I-D.ietf-oauth-v2], section[RFC6749], Section 4.3), the mechanism used by authorization servers to authenticate theuseruser. o Mechanism by which a user obtained an assertion and any resulting attacks mounted as a result of the assertion being false. o Clients not bound to a specific deployment: An example could be a mail client with support for contact list access via the portable contacts API (see[portable-contacts]).[Portable-Contacts]). Such clients cannot be registered upfront with a particular deployment and should dynamically discover the URLs relevant for the OAuth protocol. 2.2. Attack Assumptions The following assumptions relate to an attacker and resources available to anattacker: oattacker. It is assumed that: o the attacker has full access to the network between the client and authorization servers and the client and the resource server, respectively. The attacker may eavesdrop on any communications between those parties. He is not assumed to have access to communication between the authorization server and resource server. oIt is assumedan attacker has unlimited resources to mount an attack. oIt is assumed that 2two of the3three parties involved in the OAuth protocol may collude to mount an attack against the 3rd party. For example, the client and authorization server may be under control of an attacker and collude to trick a user to gain access to resources. 2.3. ArchitecturalassumptionsAssumptions This section documentstheassumptions about the features, limitations, and design options of the different entities ofaan OAuth deployment along with the security-sensitivedata-elementsdata elements managed by thoseentity.entities. These assumptions are the foundation of the threat analysis. The OAuth protocol leaves deployments with a certain degree of freedom regarding how to implement and apply the standard. The core specification defines the core concepts of an authorization server and a resource server. Both servers can be implemented in the same server entity, or they may also be different entities. Thelaterlatter is typically the case for multi-service providers with a single authentication and authorizationsystem,system andareis more typical in middleware architectures. 2.3.1. Authorization Servers The following data elements are stored or accessible on the authorization server: ouser namesusernames and passwords o client ids and secrets o client-specific refresh tokens o client-specific access tokens (in the case of handle-baseddesign -design; see Section 3.1) o HTTPS certificate/key o per-authorization process (in the case of handle-baseddesign -design; Section 3.1):redirect_uri, client_id,"redirect_uri", "client_id", authorizationcode"code" 2.3.2. Resource Server The following data elements are stored or accessible on the resource server: o user data (out of scope) o HTTPS certificate/key o either authorization server credentials (handle-baseddesign -design; see Section3.1),3.1) oroauthorization server shared secret/public key (assertion-baseddesign -design; see Section 3.1) o access tokens (per request) It is assumed that a resource server has no knowledge of refresh tokens, user passwords, or client secrets. 2.3.3. Client InOAuthOAuth, a client is an application making protected resource requests on behalf of the resource owner and with its authorization. There are different types of clients with different implementation and security characteristics, such as web, user-agent-based, and native applications. A full definition of the different client types and profiles is given in[I-D.ietf-oauth-v2],[RFC6749], Section 2.1. The following data elements are stored or accessible on the client: o client id (and client secret or corresponding client credential) o one or more refresh tokens (persistent) and access tokens (transient) perend-userend user or other security-context or delegation context o trustedCAcertification authority (CA) certificates (HTTPS) o per-authorization process:redirect_uri,"redirect_uri", authorizationcode"code" 3. Security Features These are some of the security featureswhichthat have been built into the OAuth 2.0 protocol to mitigate attacks and security issues. 3.1. Tokens OAuth makes extensive use of many kinds of tokens (access tokens, refresh tokens, authorizationcodes)."codes"). The information content of a token can be represented in twowaysways, as follows: Handle (or artifact) A 'handle' is a reference to some internal data structure within the authorization server; the internal data structure contains the attributes of the token, such as userid,id (UID), scope, etc. Handles enable simple revocation and do not require cryptographic mechanisms to protect token content from being modified. On the other hand, handles require communication between the issuing and consuming entity(e.g.(e.g., the authorization server and resource server) in order to validate the token and obtain token-bound data. This communication might haveana negative impact on performance and scalability if both entities reside on different systems. Handles are therefore typically used if the issuing and consuming entity are the same. A 'handle' token is often referred to as an 'opaque' token because the resource server does not need to be able to interpret the tokendirectly,directly; it simply uses the token.AssertionsAssertion (aka self-contained token) An assertion is a parseable token. An assertion typically has a duration, has an audience, and is digitally signed in order to ensure data integrity and origin authentication. It contains information about the user and the client. Examples of assertion formats areSAMLSecurity Assertion Markup Language (SAML) assertions [OASIS.saml-core-2.0-os] and Kerberos tickets [RFC4120]. Assertions can typicallydirectlybe directly validated and used by a resource server without interactions with the authorization server. This results in better performance and scalability indeploymentdeployments where the issuing and consumingentityentities reside on different systems. Implementing token revocation is more difficult with assertions than with handles. Tokens can be used in two ways to invoke requests on resourceserversservers, as follows: bearer token A 'bearer token' is a token that can be used by any client who has received the token(e.g. [I-D.ietf-oauth-v2-bearer]).(e.g., [RFC6750]). Because mere possession is enough to use thetokentoken, it is important that communication betweenend- pointsendpoints be secured to ensure that only authorizedend-pointsendpoints may capture the token. The bearer token is convenienttofor clientapplicationsapplications, as it does not require them to do anything to use them (such as a proof of identity). Bearer tokens have similar characteristics to web single-sign-on (SSO) cookies used in browsers. proof token A 'proof token' is a token that can only be used by a specific client. Each use of thetoken,token requires the client to perform some action that proves that it is the authorized user of the token. Examples of this areMACMAC-type access tokens, which require the client to digitally sign the resource request with a secret corresponding to the particular tokensendsent with the request(e.g.[I-D.ietf-oauth-v2-http-mac]).(e.g., [OAuth-HTTP-MAC]). 3.1.1. Scope AScopescope represents the access authorization associated with a particular token with respect to resource servers,resourcesresources, and methods on those resources. Scopes are the OAuth way to explicitly manage the power associated with an access token. A scope can be controlled by the authorization server and/or theend-userend user in order to limit access to resources for OAuth clients that these parties deem less secure or trustworthy. Optionally, the client can request the scope to apply to the token but only for a lesser scope than would otherwise be granted,e.g.e.g., to reduce the potential impact if this token is sent overnon securenon-secure channels. A scope is typically complemented by a restriction on a token's lifetime. 3.1.2. Limited Access Token Lifetime The protocol parameterexpires_in"expires_in" allows an authorization server (based on its policies or on behalf of theend-user)end user) to limit the lifetime of an access token and to pass this information to the client. This mechanism can be used to issueshort-livingshort-lived tokens to OAuth clients that the authorization server deems lesssecuresecure, or where sending tokens overnon securenon-secure channels. 3.2. Access Token An access token is used by a client to access a resource. Access tokens typically have shortlife-spanslife spans (minutes or hours) that cover typical session lifetimes. An access token may be refreshed through the use of a refresh token. The short lifespan of an accesstokentoken, in combination with the usage of refreshtokenstokens, enables the possibility of passive revocation of access authorization on the expiry of the current access token. 3.3. Refresh Token A refresh token represents a long-lasting authorization of a certain client to access resources on behalf of a resource owner. Such tokens are exchanged between the client and authorizationserver,server only. Clients use this kind of token to obtain ("refresh") new access tokens used for resource server invocations. A refresh token, coupled with a short access token lifetime, can be used to grant longer access to resources without involvingend userend-user authorization. This offers an advantage where resource servers and authorization servers are not the same entity,e.g.e.g., in a distributed environment, as the refresh token is always exchanged at the authorization server. The authorization server can revoke the refresh token at anytimetime, causing the granted access to be revoked once the current access token expires. Because of this, a short access token lifetime is important if timely revocation is a high priority. The refresh token is also a secret bound to the client identifier and client instancewhichthat originally requested theauthorization and representingauthorization; the refresh token also represents the original resource owner grant. This is ensured by the authorization process as follows: 1. The resource owner anduser-agentuser agent safely deliver the authorizationcode"code" to the client instance in the first place. 2. The client uses it immediately in secure transport-level communications to the authorization server and then securely stores the long-lived refresh token. 3. The client always uses the refresh token in secure transport- level communications to the authorization server to get an access token (and optionallyrolloverroll over the refresh token).SoSo, as long as the confidentiality of the particular token can be ensured by the client, a refresh token can also be used as an alternative means to authenticate the client instanceitself..itself. 3.4. AuthorizationCode"code" An authorizationcode"code" represents the intermediate result of a successful end-user authorization process and is used by the client to obtain access and refreshtoken.tokens. Authorizationcodes"codes" are sent to the client'sredirectionredirect URI instead of tokens for twopurposes.purposes: 1. Browser-based flows expose protocol parameters to potential attackers via URI query parameters (HTTP referrer), the browser cache, or log fileentriesentries, and could be replayed. In order to reduce this threat, short-lived authorizationcodes"codes" are passed instead of tokens and exchanged for tokens over a more secure direct connection between the client and the authorization server. 2. It is much simpler to authenticate clients during the direct request between the client and the authorization server than in the context of the indirect authorization request. The latter would require digital signatures. 3.5.RedirectionRedirect URI Aredirectionredirect URI helps to detect malicious clients and prevents phishing attacks from clients attempting to trick the user into believing the phisher is the client. The value of the actualredirectionredirect URI used in the authorization request has to be presented and is verified when an authorizationcode"code" is exchanged for tokens. This helps to preventattacks,attacks where the authorizationcode"code" is revealed through redirectors and counterfeit web application clients. The authorization server should require public clients and confidential clients using the implicit grant type to pre-register their redirect URIs and validate against the registeredredirectionredirect URI in the authorization request. 3.6.State parameter"state" Parameter Thestate"state" parameter is used to link requests and callbacks to preventCross-Site Request Forgerycross-site request forgery attacks (see Section 4.4.1.8) where an attacker authorizes access to his own resources and then tricks ausersuser into following a redirect with the attacker's token. This parameter should bind to the authenticated state in a user agent and, as per the core OAuth spec, the user agent must be capable of keeping it in a location accessible only by the client and user agent,i.e.i.e., protected by same-origin policy. 3.7. ClientIdentitifierIdentifier Authentication protocols have typically not taken into account the identity of the software component acting on behalf of theend-user.end user. OAuth does this in order to increase the security level in delegated authorization scenarios and because the client will be able to act without the user being present. OAuth uses the client identifier to collate associatedrequestrequests to the same originator, such as o a particular end-user authorization process and the corresponding request on the token's endpoint to exchange the authorizationcode"code" fortokenstokens, or o the initial authorization and issuance of a token by anend-userend user to a particular client, and subsequent requests by this client to obtain tokens without user consent (automatic processing of repeatedauthorization)authorizations) This identifier may also be used by the authorization server to display relevant registration information to a user when requesting consent for a scope requested by a particular client. The client identifier may be used to limit the number ofrequestrequests for a particular client or to charge the client per request. It may furthermore be useful to differentiate access by different clients,e.g.e.g., in server log files. OAuth defines two client types, confidential and public, based on their ability to authenticate with the authorization server(i.e.(i.e., ability to maintain the confidentiality of their client credentials). Confidential clients are capable of maintaining the confidentiality of client credentials(i.e.(i.e., a client secret associated with the client identifier) or capable of secure client authentication using other means, such as a client assertion(e.g.(e.g., SAML) or key cryptography. The latter is considered more secure. The authorization server should determine whether the client is capable of keeping its secret confidential or using secure authentication. Alternatively, theend-userend user can verify the identity of the client,e.g.e.g., by only installing trustedapplications.The redicrectionapplications. The redirect URI can be used to preventdeliveringthe delivery of credentials to a counterfeit client after obtaining end-user authorization in somecases,cases but can't be used to verify the client identifier. Clients can be categorized as follows based on the client type, profile(e.g.(e.g., native vs. webapplication -application; see[I-D.ietf-oauth-v2],[RFC6749], Section9)9), and deployment model: Deployment-independentclient_id"client_id" with pre-registeredredirect_uri"redirect_uri" and withoutclient_secret"client_secret" Such an identifier is used by multiple installations of the same software package. The identifier of such a client can only be validated with the help of the end-user. This is a viable option for native applications in order to identify the client for the purpose of displaying meta information about the client to the user and to differentiate clients in log files. Revocation of the rights associated with such a client identifier will affect ALL deployments of the respective software. Deployment-independentclient_id"client_id" with pre-registeredredirect_uri"redirect_uri" and withclient_secret"client_secret" This is an option for native applications only, since webapplicationapplications would require different redirect URIs. This category is not advisable because the client secret cannot be protected appropriately (see Section 4.1.1). Due to its security weaknesses, such client identities have the same trust level as deployment-independent clients withoutsecret.secrets. Revocation will affect ALL deployments. Deployment-specificclient_id"client_id" with pre-registeredredirect_uri"redirect_uri" and withclient_secret"client_secret" The client registration process ensures the validation of the client's properties, such asredirectionredirect URI,websiteweb site URL, web site name, and contacts. Such a client identifier can be utilized for all relevant use cases cited above. This level can be achieved for web applications in combination with a manual or user-bound registration process. Achieving this level for native applications is much more difficult. Either the installation of the application is conducted by an administrator, who validates the client's authenticity, or the process from validating the application to the installation of the application on the device and the creation of the client credentials is controlled end-to-end by a single entity(e.g.(e.g., application market provider). Revocation will affect a single deployment only. Deployment-specificclient_id"client_id" withclient_secret"client_secret" without validated properties Such a client can be recognized by the authorization server in transactions with subsequent requests(e.g.(e.g., authorization and token issuance, refresh tokenissuanceissuance, and access token refreshment). The authorization server cannot assure any property of the client toend-users.end users. Automatic processing of re-authorizations could be allowed as well. Such client credentials can be generated automatically without any validation of client properties, which makes it anotheroptionoption, especially for native applications. Revocation will affect a single deployment only. 4. Threat Model This section gives a comprehensive threat model of OAuth 2.0. Threats are grouped first by attacks directed against an OAuth component, which are the client, authorization server, and resource server. Subsequently, they are grouped by flow,e.g.e.g., obtain token or access protected resources. Every countermeasure description refers to a detailed description in Section 5. 4.1. Clients This section describes possible threats directed to OAuth clients. 4.1.1. Threat:ObtainObtaining Client Secrets The attacker could try to get access to the secret of a particular client in order to: o replay its refresh tokens and authorizationcodes,"codes", or o obtain tokens on behalf of the attacked client with the privileges of thatclient_id"client_id" acting as an instance of the client. The resulting impact wouldbe:be the following: o Client authentication of access to the authorization server can bebypassedbypassed. o Stolen refresh tokens or authorizationcodes"codes" can bereplayedreplayed. Depending on the client category, the following attacks could be utilized to obtain the client secret. Attack: Obtain Secret From Source Code or Binary: This applies for all client types. For open source projects, secrets can be extracted directly from source code in their public repositories. Secrets can be extracted from application binaries just as easily when the published source is not available to the attacker. Even if an application takes significant measures to obfuscate secrets in their applicationdistributiondistribution, one should consider that the secret can still be reverse-engineered by anyone with access to a complete functioning application bundle or binary. Countermeasures: o Don't issue secrets to public clients or clients with inappropriate security policy- Section 5.2.3.1(Section 5.2.3.1). o Require user consent for publicclients- Section 5.2.3.2clients (Section 5.2.3.2). o Use deployment-specific client secrets- Section 5.2.3.4(Section 5.2.3.4). o Revoke client secrets- Section 5.2.3.6(Section 5.2.3.6). Attack: Obtain a Deployment-Specific Secret: An attacker may try to obtain the secret from a client installation, either from a web site (web server) or a particulardevicesdevice (native application). Countermeasures: o Web server:applyApply standard web server protection measures (for config files and databases)-(see Section5.3.25.3.2). o Native applications: Store secrets inasecure local storage- Section 5.3.3(Section 5.3.3). o Revoke client secrets- Section 5.2.3.6(Section 5.2.3.6). 4.1.2. Threat:ObtainObtaining Refresh Tokens Depending on the client type, there are different ways that refresh tokens may be revealed to an attacker. The following sub-sections give a more detailed description of the different attacks with respect to different client types and further specialized countermeasures. Before detailing those threats, here are some generally applicable countermeasures: o The authorization server should validate the client id associated with the particular refresh token with every refreshrequest- Section 5.2.2.2request (Section 5.2.2.2). o Limit token scope- Section 5.1.5.1(Section 5.1.5.1). o Revoke refresh tokens- Section 5.2.2.4(Section 5.2.2.4). o Revoke client secrets- Section 5.2.3.6(Section 5.2.3.6). o Refresh tokens can automatically be replaced in order to detect unauthorized token usage by another party(Refresh(see "Refresh TokenRotation) -Rotation", Section5.2.2.35.2.2.3). Attack: Obtain Refresh Token from Webapplication:Application: An attacker may obtain the refresh tokens issued to a web application by way of overcoming the web server's security controls. Impact: Since a web application manages the user accounts of a certain site, such an attack would result in an exposure of all refresh tokens on that site to the attacker. Countermeasures: o Standard web server protection measures- Section 5.3.2(Section 5.3.2). o Use strong client authentication(e.g. client_assertion / client_token),(e.g., client_assertion/ client_token) so the attacker cannot obtain the client secret required to exchange the tokens- Section 5.2.3.7(Section 5.2.3.7). Attack: Obtain Refresh Token from Nativeclients:Clients: On native clients, leakage of a refresh token typically affects a singleuser,user only. Read from local file system: The attacker could try to get file system access on the device and read the refresh tokens. The attacker could utilize a malicious application for that purpose. Countermeasures: o Store secrets inasecure storage- Section 5.3.3(Section 5.3.3). o Utilize device lock to prevent unauthorized device access- Section 5.3.4(Section 5.3.4). Attack: Stealdevice:Device: The host device(e.g.(e.g., mobile phone) may be stolen. In that case, the attacker gets access to all applications under the identity of the legitimate user. Countermeasures: o Utilize device lock to prevent unauthorized device access- Section 5.3.4(Section 5.3.4). o Where a user knows the device has been stolen, they can revoke the affected tokens- Section 5.2.2.4(Section 5.2.2.4). Attack: Clone Device: All device data and applications are copied to another device. Applications are used as-is on the target device. Countermeasures: o Utilize device lock to prevent unauthorized device access- Section 5.3.4(Section 5.3.4). o Combine refresh token request with device identification- Section 5.2.2.5(Section 5.2.2.5). o RefreshToken Rotation - Section 5.2.2.3token rotation (Section 5.2.2.3). o Where a user knows the device has been cloned, they can usethis countermeasure - Refresh Token Revocation - Section 5.2.2.4refresh token revocation (Section 5.2.2.4). 4.1.3. Threat:ObtainObtaining Access Tokens Depending on the client type, there are different ways that access tokens may be revealed to an attacker. Access tokens could be stolen from the device if the application stores them in astorage, which isstorage device that is accessible to other applications. Impact: Where the token is a bearer token and no additional mechanism is used to identify the client, the attacker can access all resources associated with the token and its scope. Countermeasures: o Keep access tokens in transient memory and limitgrants: Section 5.1.6grants (Section 5.1.6). o Limit token scope- Section 5.1.5.1(Section 5.1.5.1). o Keep access tokens in private memory or apply same protection means as for refresh tokens- Section 5.2.2(Section 5.2.2). o Keep access token lifetime short- Section 5.1.5.3(Section 5.1.5.3). 4.1.4. Threat:End-user credentials phished using compromisedEnd-User Credentials Phished Using Compromised orembedded browserEmbedded Browser A malicious application could attempt to phish end-user passwords by misusing an embedded browser in the end-user authorization process, or by presenting its ownuser-interfaceuser interface instead of allowing a trusted system browser to render the authorization user interface. By doing so, the usual visual trust mechanisms may be bypassed(e.g. TLS(e.g., Transport Layer Security (TLS) confirmation, web site mechanisms). By using an embedded or internal client application user interface, the client application has access to additional information to which it should not have accessto (e.g. uid/ password).(e.g., UID/password). Impact: If the client application or the communication is compromised, the user would not be aware of this, and all information in the authorizationexchange could be capturedexchange, such as username andpassword.password, could be captured. Countermeasures: o The OAuth flow is designed so that client applications never need to know user passwords. Client applications should avoid directly asking users forthetheir credentials. In addition, end users could be educated about phishing attacks and best practices, such as only accessing trusted clients, as OAuth does not provide any protection against malicious applications and the end user is solely responsible for the trustworthiness of any native application installed. o Client applications could be validated prior to publication in an application market for users to access. That validation is out of scope for OAuth but could include validating that the client application handles user authentication in an appropriate way. o Client developers should not write client applications that collect authentication information directly from users and should instead delegate this task to a trusted system component,e.g.e.g., thesystem-browser.system browser. 4.1.5. Threat: Open Redirectors onclientClient An open redirector is an endpoint using a parameter to automatically redirect auser-agentuser agent to the location specified by the parameter value without any validation. If the authorization server allows the client to register only part of theredirectionredirect URI, an attacker can use an open redirector operated by the client to construct aredirectionredirect URI that will pass the authorization server validation but will send the authorizationcode"code" or access token to an endpoint under the control of the attacker. Impact: An attacker could gain access to authorizationcodes"codes" or accesstokens Countermeasuretokens. Countermeasures: orequireRequire clients to register fullredirectionredirect URISection 5.2.3.5(Section 5.2.3.5). 4.2. Authorization Endpoint 4.2.1. Threat: PasswordphishingPhishing bycounterfeit authorization serverCounterfeit Authorization Server OAuth makes no attempt to verify the authenticity of theAuthorization Server.authorization server. A hostile party could take advantage of this by intercepting theClient'sclient's requests and returning misleading or otherwise incorrect responses. This could be achieved using DNS orARPAddress Resolution Protocol (ARP) spoofing. Wide deployment of OAuth and similar protocols may cause users to become inured to the practice of being redirected towebsitesweb sites where they are asked to enter their passwords. If users are not careful to verify the authenticity of thesewebsitesweb sites before entering their credentials, it will be possible for attackers to exploit this practice to stealUsers'users' passwords. Countermeasures: o Authorization servers should consider such attacks when developing services based onOAuth,OAuth and should require the use of transport- layer security for any requests where the authenticity of the authorization server or of request responses is an issue (see Section 5.1.2). o Authorization servers should attempt to educateUsersusers about the risks posed by phishing attackspose,and should provide mechanisms that make it easy for users to confirm the authenticity of their sites. 4.2.2. Threat: Userunintentionally grants too much access scopeUnintentionally Grants Too Much Access Scope When obtainingend userend-user authorization, theend-userend user may not understand the scope of the access being granted and towhomwhom, or they may end up providing a client with access to resourceswhichthat should not be permitted. Countermeasures: o Explain the scope (resources and the permissions) the user is about to grant in an understandable way- Section 5.2.4.2(Section 5.2.4.2). o Narrowscopethe scope, based onclient -the client. When obtainingend userend-user authorization and where the client requests scope, the authorization server may want to consider whether tohonourhonor that scope based on the client identifier. That decision is between the client and authorization server and is outside the scope of this spec. The authorization server may also want to consider what scope to grant based on the client type,e.g.e.g., providing lower scope to publicclients. - Section 5.1.5.1clients (Section 5.1.5.1). 4.2.3. Threat: Maliciousclient obtains existing authorizationClient Obtains Existing Authorization byfraudFraud Authorization servers may wish to automatically process authorization requests from clientswhichthat have been previously authorized by the user. When the user is redirected to the authorization server's end- user authorization endpoint to grant access, the authorization server detects that the user has already granted access to that particular client. Instead of prompting the user for approval, the authorization server automatically redirects the user back to the client. A malicious client may exploit that feature and try to obtain such an authorizationcode"code" instead of the legitimate client. Countermeasures: o Authorization servers should not automatically process repeat authorizations to public clients unless the client is validated using a pre-registered redirect URI (Section5.2.3.5 )5.2.3.5). o Authorization servers can mitigate the risks associated with automatic processing by limiting the scope ofAccess Tokensaccess tokens obtained through automated approvals- Section 5.1.5.1(Section 5.1.5.1). 4.2.4. Threat: OpenredirectorRedirector An attacker could use the end-user authorization endpoint and theredirectionredirect URI parameter to abuse the authorization server as an open redirector. An open redirector is an endpoint using a parameter to automatically redirect auser-agentuser agent to the location specified by the parameter value without any validation. Impact: An attacker could utilize a user's trust inyouran authorization server to launch a phishing attack.CountermeasureCountermeasures: orequireRequire clients to register any fullredirection URI Section 5.2.3.5redirect URIs (Section 5.2.3.5). odon'tDon't redirect toredirection URI,a redirect URI if the client identifier orredirectionredirect URI can't be verifiedSection 5.2.3.5(Section 5.2.3.5). 4.3. TokenendpointEndpoint 4.3.1. Threat: Eavesdroppingaccess tokensAccess Tokens Attackers may attempt to eavesdrop accesstokentokens in transit from the authorization server to the client. Impact: The attacker is able to access all resources with the permissions covered by the scope of the particular access token. Countermeasures: o As per the core OAuth spec, the authorization servers must ensure that these transmissions are protected using transport-layer mechanisms such as TLS (see Section 5.1.1). o If end-to-end confidentiality cannot be guaranteed, reducing scope (see Section 5.1.5.1) and expiry time (Section 5.1.5.3) for access tokens can be used to reduce the damage in case of leaks. 4.3.2. Threat:Obtain access tokensObtaining Access Tokens fromauthorization server databaseAuthorization Server Database This threat is applicable if the authorization server stores access tokens as handles in a database. An attacker may obtain access tokens from the authorization server's database by gaining access to the database or launching a SQL injection attack. Impact:disclosureDisclosure of all accesstokenstokens. Countermeasures: o Enforce system security measures- Section 5.1.4.1.1(Section 5.1.4.1.1). o Store access token hashes only- Section 5.1.4.1.3(Section 5.1.4.1.3). o Enforce standard SQL injectionCountermeasures - Section 5.1.4.1.2countermeasures (Section 5.1.4.1.2). 4.3.3. Threat: Disclosure ofclient credentialsClient Credentials duringtransmissionTransmission An attacker could attempt to eavesdrop the transmission of client credentials between the client and server during the client authentication process or during OAuth token requests. Impact: Revelation of a client credential enabling phishing or impersonation of a client service. Countermeasures: o The transmission of client credentials must be protected using transport-layer mechanisms such as TLS (see Section 5.1.1). oAlternativeUse alternative authenticationmeans, whichmeans that do not requireto sendthe sending of plaintext credentials over the wire(e.g.(e.g., Hash-based Message AuthenticationCode)Code). 4.3.4. Threat:Obtain client secretObtaining Client Secret fromauthorization server databaseAuthorization Server Database An attacker may obtain validclient_id/secret"client_id"/secret combinations from the authorization server's database by gaining access to the database or launching a SQL injection attack. Impact:disclosureDisclosure of allclient_id/secret"client_id"/secret combinations. This allows the attacker to act on behalf of legitimate clients. Countermeasures: o Enforce system security measures- Section 5.1.4.1.1(Section 5.1.4.1.1). o Enforce standard SQL injectionCountermeasures - Section 5.1.4.1.2countermeasures (Section 5.1.4.1.2). o Ensure proper handling of credentials as perEnforce credential storage protection best practices."Enforce Credential Storage Protection Best Practices" (Section 5.1.4.1). 4.3.5. Threat:Obtain client secret by online guessingObtaining Client Secret by Online Guessing An attacker may try to guess validclient_id/secret"client_id"/secret pairs. Impact:disclosureDisclosure of a singleclient_id/secret"client_id"/secret pair. Countermeasures: o Use high entropy for secrets- Section 5.1.4.2.2(Section 5.1.4.2.2). o Lock accounts- Section 5.1.4.2.3(Section 5.1.4.2.3). o UseStrong Client Authentication - Section 5.2.3.7strong client authentication (Section 5.2.3.7). 4.4. Obtaining Authorization This section covers threatswhichthat are specific to certain flows utilized to obtain access tokens. Each flow is characterized by response types and/or grant types on the end-user authorization and token endpoint, respectively. 4.4.1. AuthorizationCode"code" 4.4.1.1. Threat: Eavesdropping orleaking authorization codesLeaking Authorization "codes" An attacker could try to eavesdrop transmission of the authorizationcode"code" between the authorization server and client. Furthermore, authorizationcodes"codes" are passed via thebrowserbrowser, which may unintentionally leak those codes to untrusted web sites and attackers in different ways: o Referrer headers:browsersBrowsers frequently pass a "referer" header when a web page embeds content, or when a user travels from one web page to another web page. These referrer headers may be sent even when the origin site does not trust the destination site. The referrer header is commonly logged for traffic analysis purposes. o Request logs:webWeb server request logs commonly include query parameters on requests. o Open redirectors:webWeb sites sometimes need to send users to another destination via a redirector. Open redirectors pose a particular risk to web-based delegation protocols because the redirector can leak verification codes to untrusted destination sites. o Browser history:webWeb browsers commonly record visited URLs in the browser history. Another user of the same web browser may be able to view URLs that were visited by previous users. Note: A description ofasimilar attacks on the SAML protocol can be found at [OASIS.sstc-saml-bindings-1.1], Section4.1.1.9.1, [gross-sec-analysis],4.1.1.9.1; [Sec-Analysis]; and[OASIS.sstc-gross-sec-analysis-response-01].[OASIS.sstc-sec-analysis-response-01]. Countermeasures: o As per the core OAuth spec, the authorization server as well as the client must ensure that these transmissions are protected using transport-layer mechanisms such as TLS (see Section 5.1.1). o The authorization server will require the client to authenticate wherever possible, so the binding of the authorizationcode"code" to a certain client can be validated in a reliable way (see Section 5.2.4.4). o Use short expiry time for authorizationcodes - Section 5.1.5.3"codes" (Section 5.1.5.3). o The authorization server should enforce aone timeone-time usage restriction (see Section 5.1.5.4). o If anAuthorization Serverauthorization server observes multiple attempts to redeem an authorizationcode,"code", theAuthorization Serverauthorization server may want to revoke all tokens granted based on the authorizationcode"code" (see Section 5.2.1.1). o In the absence of these countermeasures, reducing scope (Section 5.1.5.1) and expiry time (Section 5.1.5.3) for access tokens can be used to reduce the damage in case of leaks. o The client server may reload the target page of theredirectionredirect URI in order to automaticallycleanupclean up the browser cache. 4.4.1.2. Threat:Obtain authorization codesObtaining Authorization "codes" fromauthorization server databaseAuthorization Server Database This threat is applicable if the authorization server stores authorizationcodes"codes" as handles in a database. An attacker may obtain authorizationcodes"codes" from the authorization server's database by gaining access to the database or launching a SQL injection attack. Impact:disclosureDisclosure of all authorizationcodes,"codes", most likely along with the respectiveredirect_uri"redirect_uri" andclient_id"client_id" values. Countermeasures: o Best practices for credential storage protection should be employed- Section 5.1.4.1(Section 5.1.4.1). o Enforce system security measures- Section 5.1.4.1.1(Section 5.1.4.1.1). o Store access token hashes only- Section 5.1.4.1.3(Section 5.1.4.1.3). oStandardEnforce standard SQL injection countermeasures- Section 5.1.4.1.2(Section 5.1.4.1.2). 4.4.1.3. Threat: OnlineguessingGuessing ofauthorization codesAuthorization "codes" An attacker may try to guess valid authorizationcode"code" values and senditthe guessed code value using the grant type "code" in order to obtain a valid access token. Impact:disclosureDisclosure of a single accesstoken,token and probably also an associated refresh token. Countermeasures: o Handle-based tokens must use highentropy: Section 5.1.4.2.2entropy (Section 5.1.4.2.2). o Assertion-based tokens should besigned: Section 5.1.5.9signed (Section 5.1.5.9). o Authenticate theclient,client; this adds another value that the attacker has to guess- Section 5.2.3.4(Section 5.2.3.4). oBinding ofBind the authorizationcode"code" toredirection URI,the redirect URI; this adds another value that the attacker has to guess- Section 5.2.4.5(Section 5.2.4.5). o Use short expiry time for tokens- Section 5.1.5.3(Section 5.1.5.3). 4.4.1.4. Threat: Maliciousclient obtains authorizationClient Obtains Authorization A malicious client could pretend to be a valid client and obtain an access authorizationthatin this way. The malicious client could even utilizescreen scrapingscreen-scraping techniques in order to simulatethe usera user's consent in the authorization flow. 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 particulardevicedevice, probably in cooperation with other components of the respective ecosystem(e.g.(e.g., an application management infrastructure). The sole responsibility of the authorization server is to control access to the end-user's resourceslivingmaintained in resource servers and to prevent unauthorized access to them via the OAuth protocol. Based on this assumption, the following countermeasures are available to cope with the threat. Countermeasures: o The authorization server should authenticate the client, if possible (see Section 5.2.3.4). Note:theThe authentication takes place after theend-userend user has authorized the access. o The authorization server should validate the client'sredirectionredirect URI against the pre-registeredredirectionredirect URI, if one exists (see Section 5.2.3.5). Note: An invalid redirect URI indicates an invalidclientclient, whereas a valid redirect URI does notneccesserilynecessarily indicate a valid client. The level of confidence depends on the client type. For web applications, the level of confidence ishighhigh, since the redirect URI refers to the globally unique network endpoint of thisapplicationapplication, whose fully qualified domain name (FQDN) is also validated using HTTPS server authentication by the user agent. Incontrastcontrast, for native clients, the redirect URI typically refers to device local resources,e.g.e.g., a custom scheme.SoSo, a malicious client on a particular device can use the valid redirect URI the legitimate client uses on all other devices. o After authenticating theend-user,end user, the authorization server should ask him/her for consent. In this context, the authorization server should explain to theend-userend user the purpose, scope, and duration of the authorization the client asked for. Moreover, the authorization server should show the user any identity information it has for that client. It is up to the user to validate the binding of this data to the particular application(e.g.(e.g., Name) and to approve the authorizationrequest.request (see Section 5.2.4.3). o The authorization server should not perform automaticre- authorizationsre-authorizations for clients it is unable to reliably authenticate or validate (see Section 5.2.4.1). o If the authorization server automatically authenticates theend-end user, it may nevertheless require some user input in order to prevent screen scraping. Examples are CAPTCHAs (Completely Automated Public Turingtesttests to tell Computers and Humans Apart) or other multi-factor authentication techniques such as random questions, token code generators, etc. o The authorization server may also limit the scope of tokens it issues to clients it cannot reliably authenticate (see Section 5.1.5.1). 4.4.1.5. Threat: Authorizationcode phishing"code" Phishing A hostile party could impersonate the client site and get access to the authorizationcode."code". This could be achieved using DNS or ARP spoofing. This applies to clients, which are webapplications, thusapplications; thus, the redirect URI is not local to the host where the user's browser is running. Impact: This affects web applications and may lead to a disclosure of authorizationcodes"codes" and, potentially, the corresponding access and refresh tokens. Countermeasures: It is strongly recommended that one of the following countermeasuresisbe utilized in order to prevent this attack: o Theredirectionredirect URI of the client should point toa HTTPS protected endpointan HTTPS-protected endpoint, and the browser should be utilized to authenticate thisredirectionredirect URI using server authentication (see Section 5.1.2). o The authorization server should require that the clienttobe authenticated,i.e.i.e., confidential client, so the binding of the authorizationcode"code" to a certain client can be validated in a reliable way (see Section 5.2.4.4). 4.4.1.6. Threat: Usersession impersonationSession Impersonation A hostile party could impersonate the client site and impersonate the user's session on this client. This could be achieved using DNS or ARP spoofing. This applies to clients, which are webapplications, thusapplications; thus, the redirect URI is not local to the host where the user's browser is running. Impact: An attacker who intercepts the authorizationcode"code" as it is sent by the browser to the callback endpoint can gain access to protected resources by submitting the authorizationcode"code" to the client. The client will exchange the authorizationcode"code" for an access token and use the access token to access protected resources for the benefit of the attacker, delivering protected resources to the attacker, or modifying protected resources as directed by the attacker. If OAuth is used by the client to delegate authentication to a social site(e.g.(e.g., as in the implementation of a "Login" buttontoon a third-party social network site), the attacker can use the intercepted authorizationcode"code" to login tointo the client as the user. Note: Authenticating the client during authorizationcode"code" exchange will not help to detect such anattackattack, as it is the legitimate client that obtains the tokens. Countermeasures: o In order to prevent an attacker from impersonating theend-usersend-user's session, theredirectionredirect URI of the client should point toaan HTTPS protectedendpointendpoint, and the browser should be utilized to authenticate thisredirectionredirect URI using server authentication (see Section5.1.2)5.1.2). 4.4.1.7. Threat: Authorizationcode leakage"code" Leakage throughcounterfeit clientCounterfeit Client Theattackattacker leverages the authorizationcode"code" grant type in an attempt to get another user (victim) tolog-in,log in, authorize access to his/her resources, and subsequently obtain the authorizationcode"code" and inject it into a client application using the attacker's account. The goal is to associate an access authorization for resources of the victim with the user account of the attacker on a client site. The attacker abuses an existing client application and combines it with his own counterfeit client web site. Theattackattacker depends on the victim expecting the client application to request access to a certain resource server. 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. The attacker conducts the following flow: 1. The attacker accesses the client web site (or application) and initiates data access to a particular resource server. The client web site in turn initiates an authorization request to the resource server's authorization server. Instead of proceeding with the authorization process, the attacker modifies the authorization server end-user authorization URL as constructed by the client to include aredirectionredirect URI parameter referring to a web site under his control (attacker's web site). 2. The attacker tricks another user (the victim)to openinto opening that modified end-user authorization URI andto authorizeauthorizing access(e.g.(e.g., via an emaillink,link or blog link). The way the attacker achievesthatthis goal is out of scope. 3. Having clicked the link, the victim is requested to authenticate and authorize the client site to have access. 4. After completion of the authorization process, the authorization server redirects the user agent to the attacker's web site instead of the original client web site. 5. The attacker obtains the authorizationcode"code" from his web site by means that are out of scope of this document. 6. He then constructs aredirectionredirect URI to the target web site (or application) based on the original authorization request'sredirectionredirect URI and the newly obtained authorizationcode"code", and directs his user agent to this URL. The authorizationcode"code" is injected into the original client site (or application). 7. The client site uses the authorizationcode"code" to fetch a token from the authorization server and associates this token with the attacker's user account on this site. 8. The attacker may now access the victim's resources using the client site. Impact: The attacker gains access to the victim's resources as associated with his account on the client site. Countermeasures: o The attacker will need to use anotherredirectionredirect URI for its authorization process rather than the target web site because it needs to intercept the flow.SoSo, if the authorization server associates the authorizationcode"code" with theredirectionredirect URI of a particular end-user authorization and validates thisredirectionredirect URI with theredirectionredirect URI passed to the token's endpoint, such an attack is detected (see Section 5.2.4.5). o The authorization server may also enforce the usage and validation of pre-registered redirect URIs (see Section 5.2.3.5). This will allow foranearly recognition of authorizationcode"code" disclosure to counterfeit clients. o For native applications, one could also considerto use deployment-specificusing deployment- specific client ids and secrets (see Section5.2.3.4,5.2.3.4), along with the binding of authorizationcode"codes" toclient_id"client_ids" (see Section5.2.4.4),5.2.4.4) to detect such an attack because the attacker does not have access to the deployment-specific secret.ThusThus, he will not be able to exchange the authorizationcode."code". o The client may consider using otherflows, whichflows that are not vulnerable to this kind ofattackattack, such as"Implicit Grant" or "Resource Owner Password Credentials"the implicit grant type (see Section4.4.24.4.2) or resource owner password credentials (see Section 4.4.3). 4.4.1.8. Threat: CSRFattackAttack against redirect-uriCross-Site Request ForgeryCross-site request forgery (CSRF) is a web-based attack whereby HTTP requests are transmitted from a user that thewebsiteweb site trusts or has authenticated (e.g., via HTTP redirects or HTML forms). CSRF attacks on OAuth approvals can allow an attacker to obtain authorization to OAuth protected resources without the consent of theUser.user. This attack works against theredirectionredirect URI used in the authorizationcode"code" flow. An attacker could authorize an authorizationcode"code" to their own protected resources on an authorization server. He then aborts the redirect flow back to the client on his device and tricks the victim into executing the redirect back to the client. The client receives the redirect, fetches the token(s) from the authorizationserverserver, and associates the victim's client session with the resources accessible using the token. Impact: The user accesses resources on behalf of the attacker. The effective impact depends on the type of resource accessed. For example, the user may upload private items to an attacker's resources.OrOr, when using OAuth in3rd party3rd-party login scenarios, the user may associate his client account with the attacker's identity at the externalidentity provider. This wayIdentity Provider. In this way, the attacker could easily access the victim's data at the client by logging in from another device with his credentials at the externalidentity provider.Identity Provider. Countermeasures: o Thestate"state" parameter should be used to link the authorization request with theredirectionredirect URI used to deliver the accesstoken. Section 5.3.5token (Section 5.3.5). o Client developers andend-userend users can be educated to not follow untrusted URLs. 4.4.1.9. Threat: ClickjackingattackAttack againstauthorizationAuthorization WithClickjacking,clickjacking, a malicious site loads the target site in a transparent iFrame (see [iFrame]) overlaid on top of a set of dummy buttonswhichthat are carefully constructed to be placed directly under important buttons on the target site. When a user clicks a visible button, they are actually clicking a button (such as an "Authorize" button) on the hidden page. Impact: An attacker can steal a user's authentication credentials and access theirresources Countermeasureresources. Countermeasures: o For newer browsers, avoidance of iFrames during authorization can be enforced on the server side by using theX-FRAME-OPTIONX-FRAME-OPTIONS header- Section 5.2.2.6(Section 5.2.2.6). o For older browsers,javascriptJavaScript frame-busting (see[framebusting])[Framebusting]) techniques can be used but may not be effective in all browsers. 4.4.1.10. Threat: 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 requestsprogrammatically,programmatically and simulating the flow against the authorization server. That way, the client may gain access to the victim's resources without her approval. An authorization server will be vulnerable to thisthreat,threat if it uses non-interactive authentication mechanisms or splits the authorization flow across multiple pages. The malicious client might embed a hidden HTML user agent, interpret the HTML forms sent by the authorization server, and automatically send the corresponding formpostHTTP POST requests. As apre-requisite,prerequisite, the attacker must be able to execute the authorization process in the context of analready authenticatedalready-authenticated session of the resource owner with the authorization server. There are different ways to achieve this: o The malicious client could abuse an existing session in an external browser or cross-browser cookies on the particular device. o The malicious client could also request authorization for an initial scope acceptable to the user and then silently abuse the resulting session in his browser instance to "silently" request another scope. o Alternatively, the attacker might exploit an authorization server's ability to authenticate the resource owner automatically and without user interactions,e.g.e.g., based on certificates. In all cases, such an attack is limited to clients running on the victim's device, either within the user agent or as a native app. Please note: Such attacks cannot be prevented using CSRF countermeasures, since the attacker just "executes" the URLs as prepared by the authorization server including anynoncenonce, etc. Countermeasures: Authorization servers should decide, based on an analysis of the risk associated with this threat, whether to detect and prevent this threat. 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 o combine password authentication and user consent in a single form, o make use of CAPTCHAs, or ooruse one-time secrets sent out of band to the resource owner(e.g.(e.g., via text or instant message).AlternativelyAlternatively, in order to allow the resource owner to detect abuse, the authorization server could notify the resource owner of any approval by appropriate means,e.g.e.g., text or instantmessagemessage, ore-Mail.email. 4.4.1.11. Threat:DoS, Exhaustion of resources attacksDoS Attacks That Exhaust Resources If an authorization server includes a nontrivial amount of entropy in authorizationcodes"codes" or access tokens (limiting the number of possible codes/tokens) and automatically grants either without user intervention and has no limit oncodecodes or access tokens per user, an attacker could exhaust the pool of authorizationcodes"codes" by repeatedly directing the user's browser to requestcodeauthorization "codes" or access tokens. Countermeasures: o The authorization server should consider limiting the number of access tokens granted per user. o The authorization server should include a nontrivial amount of entropy in authorizationcodes."codes". 4.4.1.12. Threat: DoSusing manufactured authorization codesUsing Manufactured Authorization "codes" An attacker who owns a botnet can locate the redirect URIs of clients that listen on HTTP, access them with random authorizationcodes,"codes", and cause a large number of HTTPS connections to be concentrated onto the authorization server. This can result in aDoSdenial-of-service (DoS) attack on the authorization server. This attack can still be effective even when CSRF defense/the'state'"state" parameter (see Section 4.4.1.8) is deployed on the client side. With such a defense, the attacker might need to incur an additional HTTP request to obtain a valid CSRFcode/ statecode/"state" parameter. This apparently cuts down the effectiveness of the attack by a factor of 2. However, if the HTTPS/HTTP cost ratio is higher than 2 (the cost factor is estimated to be around 3.5x at[ssl-latency])[SSL-Latency]), the attacker still achieves a magnification of resource utilization at the expense of the authorization server. Impact: There are a few effects that the attacker can accomplish with this OAuth flow that they cannot easily achieve otherwise. 1. Connection laundering: With the clients as the relay between the attacker and the authorization server, the authorization server learns little or no information about the identity of the attacker. Defenses such asrate limitingrate-limiting on the offending attacker machines are less effectivedue to the difficultybecause it is difficult to identify the attacking machines. Although an attacker could also launder its connections through an anonymizing system such as Tor, the effectiveness of that approach depends on the capacity of the anonymizing system. On the other hand, a potentially large number of OAuth clients could be utilized for this attack. 2. Asymmetric resource utilization: The attacker incurs the cost of an HTTP connection and causes an HTTPS connection to be made on the authorization server;andthe attacker canco-ordinatecoordinate the timing of such HTTPS connections across multiple clients relatively easily. Although the attacker could achieve something similar, say, by including aniframeiFrame pointing to the HTTPS URL of the authorization server in an HTTP web page andlureluring web users to visit that page, timing attacks using such a scheme may be moredifficultdifficult, as it seems nontrivial to synchronize a large number of users to simultaneously visit a particular site under the attacker's control.CountermeasuresCountermeasures: o Though not a complete countermeasure by themselves, CSRF defense and the'state'"state" parameter created with secure random codes should be deployed on the client side. The client should forward the authorizationcode"code" to the authorization server only after both the CSRF token and the'state'"state" parameter are validated. o If the client authenticates the user, either through a single- sign-on protocol or through local authentication, the client should suspend the access by a user account if the number of invalid authorizationcodes"codes" submitted by this user exceeds a certain threshold. o The authorization server should send an error response to the client reporting an invalid authorizationcode"code" andrate limitrate-limit or disallow connections from clients whose number of invalid requests exceeds a threshold. 4.4.1.13. Threat: CodesubstitutionSubstitution (OAuth Login) An attacker could attempt tologin tolog into an application or web site using a victim's identity. Applications relying on identity data provided by an OAuth protected service API to login users are vulnerable to this threat. This pattern can be found in so-called "social login" scenarios. As apre-requisite,prerequisite, a resource server offers an API to obtain personal information about a userwhichthat could be interpreted as having obtained a user identity. In thissensesense, the client is treating the resource server API as an "identity" API. A client utilizes OAuth to obtain an access token for the identity API. It then queries the identity API for an identifier and uses it to look up its internal user account data (login). The clientasssumes thatassumes that, because it was able to obtain information about the user,thatthe user has been authenticated. If the client uses the grant type "code", the attacker needs to gather a valid authorizationcode"code" of the respective victim from the sameidentity providerIdentity Provider used by the target client application. The attacker tricks the victim intologinlogging into a malicious app (which may appear to be legitimate to the Identity Provider) using the sameidentity providerIdentity Provider as the target application. This results in the Identity Provider's authorization server issuing an authorizationcode"code" for the respective identity API. The malicious app then sends this code to the attacker, which in turn triggers a login process within the target application. The attacker now manipulates the authorization response and substitutes their code (bound to their identity) for the victim's code. This code is then exchanged by the client for an access token, which in turn is accepted by the identityAPIAPI, since the audience, with respect to the resource server, is correct. But since the identifier returned by the identity API is determined by the identity in the access token (issued based on the victim's code), the attacker is logged into the target application under the victim's identity. Impact:theThe attacker gains access to an application and user-specific data within the application. Countermeasures: o All clients must indicate their clientidids with every request to exchange an authorizationcode"code" for an access token. The authorization server must validate whether the particular authorizationcode"code" has been issued to the particular client. If possible, the client shall be authenticated beforehand. o Clients should use an appropriate protocol, such as OpenID (cf.[openid])[OPENID]) or SAML (cf. [OASIS.sstc-saml-bindings-1.1]) to implement user login. Both support audience restrictions on clients. 4.4.2. Implicit Grant In the implicit grant type flow, the access token is directly returned to the client as a fragment part of theredirectionredirect URI. It is assumed that the token is not sent to theredirectionredirect URItargettarget, as HTTP user agents do not send the fragment part of URIs to HTTP servers.ThusThus, an attacker cannot eavesdrop the access token on this communicationpathpath, anditthe token cannot leak through HTTPrefereereferrer headers. 4.4.2.1. Threat: Accesstoken leakToken Leak intransport/end-pointsTransport/Endpoints This token might be eavesdropped by an attacker. The token is sent from the server to the client via a URI fragment of theredirectionredirect URI. If the communication is not secured or theend-pointendpoint is not secured, the token could be leaked by parsing the returned URI. Impact:theThe attacker would be able to assume the same rights granted by the token. Countermeasures: o The authorization server should ensure confidentiality(e.g.(e.g., using TLS) of the response from the authorization server to the client (see Section 5.1.1). 4.4.2.2. Threat: Accesstoken leakToken Leak inbrowser historyBrowser History An attacker could obtain the token from the browser's history. Note that this means the attacker needs access to the particular device. Countermeasures: o Use short expiry time for tokens (see Section5.1.5.3) and reduced5.1.5.3). Reduced scope of the token may reduce the impact of that attack (see Section 5.1.5.1). o Make responsesnon-cachablenon-cacheable. 4.4.2.3. Threat: Maliciousclient obtains authorizationClient Obtains Authorization A malicious client could attempt to obtain a token by fraud. The same countermeasures as for Section 4.4.1.4 are applicable, except client authentication. 4.4.2.4. Threat: Manipulation ofscriptsScripts A hostile party could act as the client web server and replace or modify the actual implementation of the client (script). This could be achieved using DNS or ARP spoofing. This applies to clients implemented within theWeb Browserweb browser in a scripting language. Impact: The attacker could obtain user credential information and assume the full identity of the user. Countermeasures: o The authorization server should authenticate the server from which scripts are obtained (see Section 5.1.2). o The client should ensure that scripts obtained have not been altered in transport (see Section 5.1.1). o Introduceone timeone-time, per-use secrets(e.g. client_secret)(e.g., "client_secret") values that can only be used by scripts in a small time window once loaded from a server. The intention would be to reduce the effectiveness of copying client-side scripts for re-use in anattackersattacker's modified code. 4.4.2.5. Threat: CSRFattackAttack against redirect-uri CSRF attacks (see Section 4.4.1.8) also work against theredirectionredirect URI used in the implicit grant flow. An attacker could acquire an access token to their own protected resources. He could then construct aredirectionredirect URI and embed their access token in that URI. If he can trick the user into following theredirectionredirect URI and the client does not have protection against this attack, the user may have the attacker's access token authorized within their client. Impact: The user accesses resources on behalf of the attacker. The effective impact depends on the type of resource accessed. For example, the user may upload private items to an attacker's resources.OrOr, when using OAuth in3rd party3rd-party login scenarios, the user may associate his client account with the attacker's identity at the externalidentity provider. This wayIdentity Provider. In this way, the attacker could easily access the victim's data at the client by logging in from another device with his credentials at the externalidentity provider.Identity Provider. Countermeasures: o Thestate"state" parameter should be used to link the authorization request with theredirectionredirect URI used to deliver the access token. This will ensure that the client is not tricked into completing any redirect callback unless it is linked to an authorization request initiated by theclient initiated.client. Thestate"state" parameter should not beunguessableguessable, and the client should be capable of keeping thestate"state" parameter secret. o Client developers andend-userend users can be educated to not follow untrusted URLs. 4.4.2.6. Threat: TokensubstitutionSubstitution (OAuth Login) An attacker could attempt tologin tolog into an application or web site using a victim's identity. Applications relying on identity data provided by an OAuth protected service API to login users are vulnerable to this threat. This pattern can be found in so-called "social login" scenarios. As apre-requisite,prerequisite, a resource server offers an API to obtain personal information about a userwhichthat could be interpreted as having obtained a user identity. In thissensesense, the client is treating the resource server API as an "identity" API. A client utilizes OAuth to obtain an access token for the identity API. It then queries the identity API for an identifier and uses it to look up its internal user account data (login). The clientasssumes thatassumes that, because it was able to obtain information about the user,thatthe user has been authenticated. To succeed, the attacker needs to gather a valid access token of the respective victim from the sameidentity providerIdentity Provider used by the target client application. The attacker tricks the victim intologinlogging into a malicious app (which may appear to be legitimate to the Identity Provider) using the sameidentity providerIdentity Provider as the target application. This results in the Identity Provider's authorization server issuing an access token for the respective identity API. The malicious app then sends this access token to the attacker, which in turn triggers a login process within the target application. The attacker now manipulates the authorization response and substitutes their access token (bound to their identity) for the victim's access token. This token is accepted by the identityAPIAPI, since the audience, with respect to the resource server, is correct. But since the identifier returned by the identity API is determined by the identity in the access token, the attacker is logged into the target application under the victim's identity. Impact:theThe attacker gains access to an application and user-specific data within the application. Countermeasures: o Clients should use an appropriate protocol, such as OpenID (cf.[openid])[OPENID]) or SAML (cf. [OASIS.sstc-saml-bindings-1.1]) to implement user login. Both support audience restrictions on clients. 4.4.3. Resource Owner Password Credentials The"Resource Owner Password Credentials"resource owner password credentials grant type (see[I-D.ietf-oauth-v2],[RFC6749], Section 4.3), often used for legacy/migration reasons, allows a client to request an access token using anend- users user-idend-user's user id and password along with its own credential. This grant type has higher risk because it maintains theuid/password anti- pattern.UID/password anti-pattern. Additionally, because the user does not have control over the authorization process, clients using this grant type are not limited byscope,scope but instead have potentially the same capabilities as the user themselves. As there is no authorization step, the ability to offer token revocation is bypassed. Because passwords are often used for more than 1 service, thisanti- patternanti-pattern may also put at risk whatever else is accessible with the supplied credential.AdditionallyAdditionally, any easily derived equivalent(e.g.(e.g., joe@example.com and joe@example.net) might easily allow someone to guess that the same password can be used elsewhere. Impact: The resource server can only differentiate scope based on the access token being associated with a particular client. The client could also acquirelong-livinglong-lived tokens and pass them up toa attackeran attacker's web service for further abuse. The client, eavesdroppers, orend- pointsendpoints could eavesdrop the user id and password. Countermeasures: o Except for migration reasons, minimize use of this granttypetype. o The authorization server should validate the client id associated with the particular refresh token with every refresh request- Section 5.2.2.2(Section 5.2.2.2). o As per the coreOauth spec,OAuth specification, the authorization server must ensure that these transmissions are protected usingtransport-layertransport- layer mechanisms such as TLS (see Section 5.1.1). o Rather than encouraging users to use auidUID and password, service providers should instead encourage users not to use the same password for multiple services. o Limit use ofResource Owner Password Credentialresource owner password credential grants to scenarios where the client application and the authorizing service are from the same organization. 4.4.3.1. Threat: AccidentalexposureExposure ofpasswordsPasswords atclient siteClient Site If the client does not provide enough protection, an attacker or disgruntled employee could retrieve the passwords for a user. Countermeasures: o Use otherflows, whichflows that do not rely on the client's cooperation for secure resource owner credentialhandlinghandling. o Use digest authentication instead of plaintext credentialprocessingprocessing. o Obfuscate passwords inlogslogs. 4.4.3.2. Threat: Clientobtains scopesObtains Scopes withoutend-user authorizationEnd-User Authorization All interaction with the resource owner is performed by the client. Thus it might, intentionally or unintentionally, happen that the client obtains a token with scope unknownforfor, or unintendedbyby, the resource owner. For example, the resource owner might think the client needs and acquires read-only access to its media storage only but the client tries to acquire an access token with full access permissions. Countermeasures: o Use otherflows, whichflows that do not rely on the client's cooperation for resource ownerinteractioninteraction. o The authorization server may generally restrict the scope of access tokens (Section 5.1.5.1) issued by this flow. If the particular client is trustworthy and can be authenticated in a reliable way, the authorization server could relax that restriction. Resource owners may prescribe(e.g.(e.g., in their preferences) what the maximum scope is for clients using this flow. o The authorization server could notify the resource owner by an appropriatemedia, e.g. e-Mail,medium, e.g., email, of the grant issued (see Section 5.1.3). 4.4.3.3. Threat: Clientobtains refresh tokenObtains Refresh Token throughautomatic authorizationAutomatic Authorization All interaction with the resource owner is performed by the client. Thus it might, intentionally or unintentionally, happen that the client obtains a long-term authorization represented by a refresh token even if the resource owner did not intend so. Countermeasures: o Use otherflows, whichflows that do not rely on the client's cooperation for resource ownerinteractioninteraction. o The authorization server may generally refuse to issue refresh tokens in this flow (see Section 5.2.2.1). If the particular client is trustworthy and can be authenticated in a reliable way (see client authentication), the authorization server could relax that restriction. Resource owners may allow or deny(e.g.(e.g., in their preferences)to issuethe issuing of refresh tokens using this flow as well. o The authorization server could notify the resource owner by an appropriatemedia, e.g. e-Mail,medium, e.g., email, of the refresh token issued (see Section 5.1.3). 4.4.3.4. Threat:Obtain user passwordsObtaining User Passwords ontransportTransport An attacker could attempt to eavesdrop the transmission of end-user credentials with the grant type "password" between the client and server. Impact:disclosureDisclosure of a singleend-usersend-user's password. Countermeasures: o Ensure confidentiality of requests- Section 5.1.1(Section 5.1.1). o Use alternative authenticationmeans, whichmeans that do not requireto sendthe sending of plaintext credentials over the wire(e.g.(e.g., Hash-based Message AuthenticationCode)Code). 4.4.3.5. Threat:Obtain user passwordsObtaining User Passwords fromauthorization server databaseAuthorization Server Database An attacker may obtain valid username/password combinations from the authorization server's database by gaining access to the database or launching a SQL injection attack. Impact:disclosureDisclosure of all username/password combinations. The impact may exceed the domain of the authorizationserverserver, since many users tend to use the same credentials on different services. Countermeasures: o Enforce credential storage protection best practices- Section 5.1.4.1(Section 5.1.4.1). 4.4.3.6. Threat: OnlineguessingGuessing An attacker may try to guess valid username/password combinations using the grant type "password". Impact: Revelation of a single username/password combination. Countermeasures: o Utilize secure password policy- Section 5.1.4.2.1(Section 5.1.4.2.1). o Lock accounts- Section 5.1.4.2.3(Section 5.1.4.2.3). o Use tar pit- Section 5.1.4.2.4(Section 5.1.4.2.4). o Use CAPTCHAs- Section 5.1.4.2.5(Section 5.1.4.2.5). o Consider notto useusing the grant type"password""password". o Client authentication (see Section 5.2.3) will provide another authentication factor and thus hinder the attack. 4.4.4. Client Credentials Client credentials (see[I-D.ietf-oauth-v2],[RFC6749], Section 3) consist of an identifier (not secret) combined with an additional means (such as a matching client secret) of authenticating a client. The threats to this grant type are similar to those described in Section 4.4.3. 4.5. Refreshing an Access Token 4.5.1. Threat: Eavesdroppingrefresh tokensRefresh Tokens fromauthorization serverAuthorization Server An attacker may eavesdrop refresh tokens when they are transmitted from the authorization server to the client. Countermeasures: o As per the core OAuth spec, theAuthorizationauthorization servers must ensure that these transmissions are protected using transport-layer mechanisms such as TLS (see Section 5.1.1). o If end-to-end confidentiality cannot be guaranteed, reducing scope (see Section 5.1.5.1) and expiry time (see Section 5.1.5.3) for issued access tokens can be used to reduce the damage in case of leaks. 4.5.2. Threat: Obtainingrefresh tokenRefresh Token fromauthorization server databaseAuthorization Server Database This threat is applicable if the authorization server stores refresh tokens as handles in a database. An attacker may obtain refresh tokens from the authorization server's database by gaining access to the database or launching a SQL injection attack. Impact:disclosureDisclosure of all refreshtokenstokens. Countermeasures: o Enforce credential storage protection best practices- Section 5.1.4.1(Section 5.1.4.1). o Bind token to client id, if the attacker cannot obtain the required id and secret- Section 5.1.5.8(Section 5.1.5.8). 4.5.3. Threat:Obtain refresh tokenObtaining Refresh Token byonline guessingOnline Guessing An attacker may try to guess valid refresh token values and send it using the grant type "refresh_token" in order to obtain a valid access token. Impact:exposureExposure of a single refresh token and derivable access tokens. Countermeasures: o For handle-based designs- Section 5.1.4.2.2(Section 5.1.4.2.2). o For assertion-based designs- Section 5.1.5.9(Section 5.1.5.9). o Bind token to client id, because the attacker would guess the matching client id, too (see Section5.1.5.8)5.1.5.8). o Authenticate theclient,client; this adds another element that the attacker has to guess (see Section5.2.3.4)5.2.3.4). 4.5.4. Threat:Obtain refresh token phishingRefresh Token Phishing bycounterfeit authorization serverCounterfeit Authorization Server An attacker could try to obtain valid refresh tokens by proxying requests to the authorization server. Given the assumption that the authorization server URL is well-known at development time or can at least be obtained from a well-known resource server, the attacker must utilize some kind of spoofing in order to succeed. Countermeasures: o Utilize server authentication (as described in Section5.1.2)5.1.2). 4.6. Accessing Protected Resources 4.6.1. Threat: Eavesdroppingaccess tokensAccess Tokens ontransportTransport An attacker could try to obtain a valid access token on transport between the client and resource server. As access tokens are shared secrets between the authorization server and resource server, they should be treated with the same care as other credentials(e.g. end-user(e.g., end- user passwords). Countermeasures: o Access tokens sent as bearertokens,tokens should not be sent in the clear over an insecure channel. As per the core OAuth spec, transmission of access tokens must be protected using transport- layer mechanisms such as TLS (see Section 5.1.1). o A short lifetime reduces impact in case tokens are compromised (see Section 5.1.5.3). o The access token can be bound to a client's identifier and require the client to prove legitimate ownership of the token to the resource server (see Section 5.4.2). 4.6.2. Threat: Replayauthorized resource server requestsof Authorized Resource Server Requests An attacker could attempt to replay valid requests in order to obtain or to modify/destroy user data. Countermeasures: o The resource server should utilize transport security measures(e.g.(e.g., TLS) in order to prevent such attacks (see Section 5.1.1). This would prevent the attacker from capturing valid requests. o Alternatively, the resource server could employ signed requests (see Section 5.4.3) along with nonces and timestamps in order to uniquely identify requests. The resource server should detect and refuse every replayed request. 4.6.3. Threat: Guessingaccess tokensAccess Tokens Where the token is a handle, the attacker mayuseattempt to guess the access token values based on knowledge they have from other access tokens. Impact: Access to a single user's data. Countermeasures: o HandleTokenstokens should have a reasonable level of entropy (see Section 5.1.4.2.2) in order to make guessing a valid token value infeasible. o Assertion (or self-contained token) token) tokenscontents should be protected by a digital signature (see Section 5.1.5.9). o Security can be further strengthened by using a short access token duration (seeSectionSections 5.1.5.2 andSection5.1.5.3). 4.6.4. Threat: Accesstoken phishingToken Phishing bycounterfeit resource serverCounterfeit Resource Server An attacker may pretend to be a particular resource server and to accept tokens from a particular authorization server. If the client sends a valid access token to this counterfeit resource server, the server in turn may use that token to access other services on behalf of the resource owner. Countermeasures: o Clients should not make authenticated requests with an access token to unfamiliar resource servers, regardless of the presence of a secure channel. If the resource server URL is well-known to the client, it may authenticate the resource servers (see Section 5.1.2). o Associate the endpoint URL of the resource server the client talked to with the access token(e.g.(e.g., in an audience field) and validate the association at a legitimate resource server. The endpoint URL validation policy may be strict (exact match) or more relaxed(e.g.(e.g., same host). This would requireto telltelling the authorization server about the resource server endpoint URL in the authorization process. o Associate an access token with a client and authenticate the client with resource server requests (typically viasignaturea signature, in order to not disclose a secret to a potential attacker). This prevents the attack because the counterfeit server is assumed to lack the capability to correctly authenticate on behalf of the legitimate client to the resource server (Section 5.4.2). o Restrict the token scope (see Section 5.1.5.1)and orand/or limit the token to a certain resource server (Section 5.1.5.5). 4.6.5. Threat: Abuse oftokenToken bylegitimate resource serverLegitimate Resource Server orclientClient A legitimate resource server could attempt to use an access token to access another resourceservers.server. Similarly, a client could try to use a token obtained for one server on another resource server. Countermeasures: o Tokens should be restricted to particular resource servers (see Section 5.1.5.5). 4.6.6. Threat: Leak ofconfidential dataConfidential Data inHTTP-Proxies TheHTTPAuthorization scheme (OAuthProxies An OAuth HTTPAuthorization Scheme)authentication scheme as discussed in [RFC6749] is optional. However, [RFC2616] relies on the Authorization andWWW- AuthenticateWWW-Authenticate headers to distinguish authenticated content so that it can be protected. Proxies and caches, in particular, may fail to adequately protect requests not using these headers. For example, private authenticated content may be stored in (and thus be retrievable from)publicly-accessiblepublicly accessible caches. Countermeasures: o Clients and resource servers not usingthean OAuth HTTPAuthorizationauthentication scheme(OAuth HTTP Authorization Scheme - see(see Section 5.4.1) should take care to use Cache-Control headers to minimize the risk that authenticated content is not protected. SuchClientsclients should send a Cache-Control header containing the "no-store" option [RFC2616]. Resource server success (2XX status) responses to these requests should contain a Cache-Control header with the "private" option [RFC2616]. o Reducing scope (see Section 5.1.5.1) and expiry time (Section 5.1.5.3) for access tokens can be used to reduce the damage in case of leaks. 4.6.7. Threat: TokenleakageLeakage vialogfilesLog Files and HTTPreferrersReferrers If access tokens are sent via URI query parameters, such tokens may leak to log files and the HTTP "referer". Countermeasures: o UseauthorizationAuthorization headers or POST parameters instead of URI request parameters (see Section 5.4.1). o Set logging configurationappropriatelyappropriately. o Prevent unauthorized persons from access to system log files (see Section5.1.4.1.1)5.1.4.1.1). o Abuse of leaked access tokens can be prevented by enforcing authenticated requests (see Section 5.4.2). o The impact of token leakage may be reduced by limiting scope (see Section 5.1.5.1) and duration (see Section 5.1.5.3) and by enforcingone timeone-time token usage (see Section 5.1.5.4). 5. Security Considerations This section describes the countermeasures as recommended to mitigate the threatsasdescribed in Section 4. 5.1. GeneralThe generalThis section covers considerations that apply generally across all OAuth components (client, resource server, token server, anduser-agents).user agents). 5.1.1. EnsureconfidentialityConfidentiality ofrequestsRequests This is applicable to all requests sent from the client to the authorization server or resource server. While OAuth provides a mechanism for verifying the integrity of requests, it provides no guarantee of request confidentiality. Unless further precautions are taken, eavesdroppers will have full access to request content and may be able to mount interception or replay attacksthroughby usingcontentthe contents ofrequest, e.g.requests, e.g., secrets or tokens. Attacks can be mitigated by using transport-layer mechanisms such as TLS [RFC5246]. A virtual private network (VPN),e.g.e.g., based on IPsecVPNVPNs [RFC4301], may be considered as well. Note:thisThis document assumes end-to-end TLS protected connections between the respective protocol entities. Deployments deviating from this assumption by offloading TLS in between(e.g.(e.g., on the data center edge) must refine this threat model in order to account for the additional (mainly insider) threat this may cause. This is a countermeasure against the following threats: o Replay of access tokens obtained ontokensthe token's endpoint or the resource server's endpoint o Replay of refresh tokens obtained ontokensthe token's endpoint o Replay of authorizationcodes"codes" obtained ontokensthe token's endpoint (redirect?) o Replay of user passwords and client secrets 5.1.2.Utiliize server authenticationUtilize Server Authentication HTTPS server authentication or similar means can be used to authenticate the identity of a server. The goal is to reliably bind the fully qualified domain name of the server to the public key presented by the server during connection establishment (see [RFC2818]). The client should validate the binding of the server to its domain name. If the server fails to prove that binding,itthe communication is considered a man-in-the-middle attack.TheThis security measure depends on the certification authorities the client trusts for that purpose. Clients should carefully select those trusted CAs and protect the storage for trusted CA certificates from modifications. This is a countermeasure against the following threats: o Spoofing o Proxying o Phishing by counterfeit servers 5.1.3. AlwayskeepKeep theresource owner informedResource Owner Informed Transparency to the resource owner is a key element of the OAuth protocol. The user should always be in control of the authorization processes and get the necessary information tomeetmake informed decisions. Moreover, user involvement is a further security countermeasure. The user can probably recognize certain kinds of attacks better than the authorization server. Information can be presented/exchanged during the authorization process, after the authorization process, and every time the user wishes to get informed by using techniques such as: o User consentformsforms. o Notification messages(e.g. e-Mail,(e.g., email, SMS, ...). Note that notifications can be a phishing vector. Messages should be such that look-alike phishing messages cannot be derived from them. oActivity/Event logsActivity/event logs. o User self-care applications orportalsportals. 5.1.4. Credentials Thissectionssection describes countermeasures used to protect all kinds of credentials from unauthorized access and abuse. Credentials arelong termlong-term secrets, such as client secrets and user passwords as well as all kinds of tokens (refresh and accesstoken)tokens) or authorizationcodes."codes". 5.1.4.1. Enforcecredential storage protection best practicesCredential Storage Protection Best Practices Administrators should undertake industry best practices to protect the storage of credentials(see for example [owasp]).(for example, see [OWASP]). Such practices may include but are not limited to the following sub-sections. 5.1.4.1.1. Enforce Standard System Security Means A server system may be locked down so that no attacker may get access tosensiblesensitive configuration files and databases. 5.1.4.1.2. EnforcestandardStandard SQL Injection Countermeasures If a client identifier or other authentication component is queried or compared against a SQLDatabasedatabase, it may become possible for an injection attack to occur if parameters received are not validated before submission to the database. o Ensure that server code is using the minimum database privileges possible to reduce the "surface" of possible attacks. o Avoid dynamic SQL using concatenated input. If possible, use static SQL. o When using dynamic SQL, parameterize queries using bind arguments. Bind arguments eliminate the possibility of SQL injections. o Filter and sanitize the input. For example, if an identifier has a known format, ensure that the supplied value matches the identifier syntax rules. 5.1.4.1.3. Nocleartext storageCleartext Storage ofcredentialsCredentials The authorization server should not store credentials in clear text. Typical approaches are to store hashes instead or to encrypt credentials. If the credential lacks a reasonable entropy level (because it is a userpassword)password), an additional salt will harden the storage to make offline dictionary attacks more difficult. Note: Some authentication protocols require the authorization server to have access to the secret in the clear. Those protocols cannot be implemented if the server only has access to hashes. Credentials should be strongly encrypted in those cases. 5.1.4.1.4. Encryption ofcredentialsCredentials For client applications, insecurely persisted client credentials are easy targets for attackers to obtain. Store client credentials using an encrypted persistence mechanism such as a keystore or database. Note that compiling client credentials directly into client code makes client applications vulnerable to scanning as well as difficult to administer should client credentials change over time. 5.1.4.1.5. Use ofasymmetric cryptographyAsymmetric Cryptography Usage of asymmetric cryptography will free the authorization server of the obligation to manage credentials. 5.1.4.2. OnlineattacksAttacks onsecretsSecrets 5.1.4.2.1. Utilizesecure password policySecure Password Policy The authorization server may decide to enforce a complex user password policy in order to increase the user passwords' entropy to hinder online password attacks. Note that too much complexity can increase theliklihoodlikelihood that users re-use passwords or write themdowndown, or otherwise store them insecurely. 5.1.4.2.2. Usehigh entropyHigh Entropy forsecretsSecrets When creating secrets not intended for usage by human users(e.g.(e.g., client secrets or token handles), the authorization server should include a reasonable level of entropy in order to mitigate the risk of guessing attacks. The token value should be >=128 bits long and constructed from a cryptographically strong random or pseudo-random number sequence (see [RFC4086] for best current practice) generated by theAuthorization Server.authorization server. 5.1.4.2.3. LockaccountsAccounts Online attacks on passwords can be mitigated by locking the respective accounts after a certain number of failed attempts. Note: This measure can be abused to lock down legitimate service users. 5.1.4.2.4. Usetar pitTar Pit The authorization server may react on failed attempts to authenticate by username/password by temporarily locking the respective account and delaying the response for a certain duration. This duration may increase with the number of failed attempts. The objective is to slow theattackersattacker's attempts on a certain username down. Note:thisThis may require a more complex and stateful design of the authorization server. 5.1.4.2.5.UsaUse CAPTCHAs The idea is to prevent programs from automatically checking a huge number ofpasswordspasswords, by requiring human interaction. Note:thisThis has a negative impact on user experience. 5.1.5. Tokens(access, refresh, code)(Access, Refresh, Code) 5.1.5.1. Limittoken scopeToken Scope The authorization server may decide to reduce or limit the scope associated with a token. The basis of this decision is out ofscope,scope; examples are: o a client-specific policy,e.g.e.g., issue only less powerful tokens to public clients, o a service-specific policy,e.g.e.g., it is a very sensitive service, o aresource-owner specificresource-owner-specific setting, or o combinations of such policies and preferences. The authorization server may allow different scopes dependent on the grant type. For example, end-user authorization via direct interaction with theend-userend user (authorizationcode)"code") might be considered more reliable than direct authorization via grant typeusername/password."username"/"password". This means will reduce the impact of the following threats: o token leakage o token issuance to malicious software o unintended issuance oftopowerful tokens with resource owner credentials flow 5.1.5.2. Determine ExpirationtimeTime Tokens should generally expire after a reasonable duration. This complements and strengthens other security measures (such as signatures) and reduces the impact of all kinds of token leaks. Depending on the risk associated withatoken leakage, tokens may expire after a few minutes(e.g.(e.g., for payment transactions) or stay valid for hours(e.g.(e.g., read access to contacts). The expiration time is determined bya couple ofseveral factors, including: o risk associatedto awith tokenleakageleakage, o duration of the underlying access grant, o duration until the modification of an access grant should take effect, and o time required for an attacker to guess or produce a valid token. 5.1.5.3. Useshort expiration timeShort Expiration Time A short expiration time for tokens is aprotectionmeans of protection against the following threats: o replay oreduce impact oftoken leak (a short expiration time will reduce impact) o online guessing (a short expiration time will reduce the likelihood ofsuccessful online guessingsuccess) Note: Short token duration requires more precise clocksynchronisationsynchronization between the authorization server and resource server. Furthermore, shorter duration may require more token refreshes (access token) or repeated end-user authorization processes (authorizationcode"code" and refresh token). 5.1.5.4. LimitnumberNumber ofusages/ One time usageUsages or One-Time Usage The authorization server may restrict the number of requests or operationswhichthat can be performed with a certain token. This mechanism can be used to mitigate the following threats: o replay of tokens o guessing For example, if anAuthorization Serverauthorization server observes more than one attempt to redeem an authorizationcode,"code", theAuthorization Serverauthorization server may want to revoke all access tokens granted based on the authorizationcode"code" as well as reject the current request. As with the authorizationcode,"code", access tokens may also have a limited number of operations. This either forces client applications toeither re- authenticatere-authenticate and use a refresh token to obtain a fresh access token, oritforces the client to re-authorize the access token by involving the user. 5.1.5.5. BindtokensTokens to aparticular resource serverParticular Resource Server (Audience) Authorization servers in multi-service environments may consider issuing tokens with different content to different resource servers and to explicitly indicate in the token the target server to which a token is intended to besent to.sent. SAMLAssertionsassertions (see [OASIS.saml-core-2.0-os]) use the Audience element for this purpose. This countermeasure can be used in the following situations: o It reduces the impact of a successful replay attempt, since the token is applicable to a single resourceserver,server only. o It prevents abuse of a token by a rogue resource server or client, since the token can only be used on that server. It is rejected by other servers. o It reduces the impact ofaleakage of a valid token to a counterfeit resource server. 5.1.5.6. Useendpoint addressEndpoint Address astoken audienceToken Audience This may be used to indicate to a resourceserver,server which endpoint URL has been used to obtain the token. This measure will allowto detectthe detection of requests from a counterfeit resource server, since such a token will contain the endpoint URL of that server. 5.1.5.7. Use Explicitly Defined Scopes for Audience andToken scopesTokens Deployments may consider only using tokens with explicitly definedscope,scopes, where every scope is associated with a particular resource server. This approach can be used to mitigateattacks,attacks where a resource server or client uses a token for a differentthenpurpose than theintended purpose.one intended. 5.1.5.8. BindtokenToken toclientClient id An authorization server may bind a token to a certain client identifier. This identifier should be validated for every request with that token. Thismeanstechnique can beused,used to o detect token leakage and o prevent token abuse. Note: Validating the client identifier may require the target server to authenticate the client's identifier. This authentication can be based on secrets managedindependentindependently of the token(e.g. pre- registered(e.g., pre-registered client id/secret on authorization server) or sent with the token itself(e.g.(e.g., as part of the encrypted token content). 5.1.5.9.Signed tokensSign Self-Contained Tokens Self-contained tokens should be signed in order to detect any attempt to modify or produce faked tokens(e.g.(e.g., Hash-based Message Authentication Code or digitalsignatures)signatures). 5.1.5.10.Encryption of token contentEncrypt Token Content Self-contained tokens may be encrypted for confidentiality reasons or to protect system internal data. Depending on token format, keys(e.g.(e.g., symmetric keys) may have to be distributed between server nodes. The method of distribution should be defined by the token and the encryption used. 5.1.5.11. Adopt a Standard AssertionformatsFormat For service providers intending to implement an assertion-based tokendesigndesign, it is highly recommended to adopt a standard assertion format (such as SAML [OASIS.saml-core-2.0-os] orJWT [I-D.ietf-oauth-json-web-token].the JavaScript Object Notation Web Token (JWT) [OAuth-JWT]). 5.1.6. AccesstokensTokens The following measures should be used to protect accesstokenstokens: okeepKeep them in transient memory (accessible by the client applicationonly)only). o Pass tokens securely using secure transport(TLS)(TLS). o Ensure that client applications do not share tokens with 3rdpartiesparties. 5.2. Authorization Server This section describes considerations related to the OAuthAuthorization Server end-point.authorization server endpoint. 5.2.1. AuthorizationCodes"codes" 5.2.1.1. AutomaticrevocationRevocation ofderived tokens if abuse is detectedDerived Tokens If Abuse Is Detected If anAuthorization Serverauthorization server observes multiple attempts to redeem an authorization grant(e.g.(e.g., such as an authorizationcode),"code"), theAuthorization Serverauthorization server may want to revoke all tokens granted based on the authorization grant. 5.2.2. RefreshtokensTokens 5.2.2.1. RestrictedissuanceIssuance ofrefresh tokensRefresh Tokens The authorization server maydecidedecide, based on an appropriatepolicypolicy, not to issue refresh tokens. Since refresh tokens arelong termlong-term credentials, they may be subject to theft. For example, if the authorization server does not trust a client to securely store such tokens, it may refuse to issue such a client a refresh token. 5.2.2.2. Binding ofrefresh tokenRefresh Token toclient_id"client_id" The authorization server should match every refresh token to the identifier of the client to whom it was issued. The authorization server should check that the sameclient_id"client_id" is present for every request to refresh the access token. If possible(e.g.(e.g., confidential clients), the authorization server should authenticate the respective client. This is a countermeasure against refresh token theft or leakage. Note: This binding should be protected from unauthorized modifications. 5.2.2.3. Refresh Token Rotation Refresh token rotation is intended to automatically detect and prevent attempts to use the same refresh token in parallel from different apps/devices. This happens if a token gets stolen from the client and is subsequently used by both the attacker and the legitimate client. The basic idea is to change the refresh token value with every refresh request in order to detect attempts to obtain access tokens using old refresh tokens. Since the authorization server cannot determine whether the attacker or the legitimate client is trying to access, in case of such an access attempt the valid refresh token and the access authorization associated with it are both revoked. The OAuth specification supports this measure in that thetokenstoken's response allows the authorization server to return a new refresh token even for requests with grant type "refresh_token". Note:thisThis measure may cause problems in clusteredenvironmentsenvironments, since usage of the currently valid refresh token must be ensured. In such an environment, other measures might be more appropriate. 5.2.2.4.Revoke refresh tokensRevocation of Refresh Tokens The authorization server may allow clients orend-usersend users to explicitly request the invalidation of refresh tokens. A mechanism to revoke tokens is specified in[I-D.ietf-oauth-revocation].[OAuth-REVOCATION]. This is a countermeasure against: o device theft, o impersonation of a resource owner, or o suspected compromised client applications. 5.2.2.5. DeviceidentificationIdentification The authorization server may requireto bindthe binding of authentication credentials to a device identifier. The_InternationalInternational Mobile Station EquipmentIdentity_Identity [IMEI] is one example of such anidentifier,identifier; there are also operatingsystem specificsystem-specific identifiers. The authorization server could include such an identifier when authenticating user credentials in order to detect token theft from a particular device. Note: Any implementation should consider potential privacy implications of using device identifiers. 5.2.2.6.X-FRAME-OPTION headerX-FRAME-OPTIONS Header For newer browsers, avoidance of iFrames can be enforced on the server side by using theX-FRAME-OPTIONX-FRAME-OPTIONS header (see[I-D.gondrom-x-frame-options]).[X-Frame-Options]). This header can have two values, "DENY" and "SAMEORIGIN", which will block any framing or any framing by sites with a different origin, respectively. The value "ALLOW-FROM"allows iFrames forspecifies a list of trustedorigins.origins that iFrames may originate from. This is a countermeasure against the followingthreats:threat: o Clickjacking attacks 5.2.3. ClientauthenticationAuthentication andauthorizationAuthorization As described in Section 3 (Security Features), clients are identified,authenticatedauthenticated, and authorized for several purposes, such asato: o Collate requests to the same client, o Indicate to the user that the client is recognized by the authorization server, o Authorize access of clients to certain features on the authorization server or resource server, and o Log a client identifier to log files for analysis or statistics. Due to the different capabilities and characteristics of the different client types, there are different ways to support these objectives, which will be described in this section. Authorization server providers should be aware of the security policy and deployment of a particularclientsclient and adapt its treatment accordingly. For example, one approach could be to treat all clients as less trustworthy and unsecure. On the other extreme, a service provider could activate every client installation individually by an administrator and in that way gain confidence in the identity of the software package and the security of the environment in which the client isinstalled in. And thereinstalled. There are several approaches in between. 5.2.3.1. Don'tissue secretsIssue Secrets toclientClients withinappropriate security policyInappropriate Security Policy Authorization servers should not issue secrets to clients that cannot protect secrets ("public" clients). This reduces the probability of the server treating the client as strongly authenticated. For example, it is of limited benefit to create a single client id and secretwhich isthat are shared by all installations of a native application. Such a scenario requires that this secret must be transmitted from the developer via the respective distribution channel,e.g.e.g., an application market, to all installations of the application on end-user devices. A secret, burned into the source code of the application oraan associated resource bundle, is not protected from reverse engineering. Secondly, such secrets cannot berevokedrevoked, since this would immediately put all installations out of work. Moreover, since the authorization server cannot really trust the client's identifier, it would be dangerous to indicate toend-end users the trustworthiness of the client. There are other ways to achieve a reasonable security level, as described in the following sections. 5.2.3.2. Requireuser consentUser Consent forpublic clientsPublic Clients withoutsecretSecret Authorization servers should not allow automatic authorization for public clients. The authorization server may issue an individual clientid,id but should require that all authorizations are approved by theend-end user.ThisFor clients without secrets, this is a countermeasurefor clients without secretagainst the followingthreats:threat: o Impersonation of public clientapplicationsapplications. 5.2.3.3.Client_id onlyIssue a "client_id" Only incombinationCombination withredirect_uri"redirect_uri" The authorization server may issue aclient_id"client_id" and bind theclient_id"client_id" to a certain pre-configuredredirect_uri."redirect_uri". Any authorization request with anotherredirectionredirect URI is refused automatically. Alternatively, the authorization server should not accept any dynamicredirectionredirect URI for such aclient_id"client_id" and instead should always redirect to the well-known pre-configuredredirectionredirect URI. This is a countermeasure for clients without secrets against the following threats: o Cross-site scripting attacks o Impersonation of public client applications 5.2.3.4.Installation-specific client secretsIssue Installation-Specific Client Secrets An authorization server may issue separate client identifiers and corresponding secrets to the different installations of a particular client(i.e.(i.e., software package). The effect of such an approach would be to turn otherwise "public" clients back into "confidential" clients. For web applications, this could meanto createcreating oneclient_id"client_id" andclient_secret per"client_secret" for each web site on which a software package isinstalled on. Soinstalled. So, the provider of that particular site could request a client id and secret from the authorization server during the setup of the web site. This would also allowto validatethe validation of some of the properties of that web site, such asredirectionredirect URI,websiteweb site URL, and whateverproofselse proves useful. The web site provider has to ensure the security of the client secret on the site. For native applications, things are more complicated because every copy of a particular application on any device is a different installation. Installation-specific secrets in this scenario will require1. Either to obtainobtaining aclient_id"client_id" andclient_secret"client_secret" either 1. during the download process from the application market, or 2.Duringduring installation on the device. Either approach will require an automated mechanism for issuing client ids and secrets, which is currently not defined by OAuth. The first approach would allowto achievethe achievement of a certain level of trust in the authenticity of the application, whereas the second option only allowsto authenticatethe authentication of the installation but notto validatethe validation of properties of the client. But this would at least help to prevent several replay attacks. Moreover, installation-specificclient_id"client_ids" andsecretsecrets allowto selectively revokethe selective revocation of all refresh tokens of a specific installation at once. 5.2.3.5.Validation of pre-registered redirect_uriValidate Pre-Registered "redirect_uri" An authorization server should require all clients to register theirredirect_uri"redirect_uri", and theredirect_uri"redirect_uri" should be the full URI as defined in[I-D.ietf-oauth-v2].[RFC6749]. The way that this registration is performed is out of scope of this document. As per the core spec, every actualredirectionredirect URI sent with the respectiveclient_id"client_id" to the end-user authorization endpoint must match the registeredredirectionredirect URI. Where it does not match, the authorization server should assume that the inbound GET request has been sent by an attacker and refuse it. Note:theThe authorization server should not redirect the user agent back to theredirectionredirect URI of such an authorization request. Validating the pre-registeredredirect_uri"redirect_uri" is a countermeasure against the following threats: o Authorizationcode"code" leakage through counterfeit web site: allows authorization servers to detect attack attemptsalreadyafter the first redirect to an end-user authorization endpoint (Section 4.4.1.7). o OpenRedirectorredirector attack via a client redirectionendpoint. ( Section 4.1.5. )endpoint (Section 4.1.5). o OpenRedirectorredirector phishing attack via an authorization server redirection endpoint( Section 4.2.4 )(Section 4.2.4). The underlying assumption of this measure is that an attacker will need to use anotherredirectionredirect URI in order to get access to the authorizationcode."code". Deployments might consider the possibility of an attacker using spoofing attacks to avictimsvictim's device to circumvent this security measure. Note: Pre-registering clients might not scale in some deployments (manual process) or require dynamic client registration (not specified yet). With the lack of dynamic client registration,pre- registereda pre-registered "redirect_uri" only works for clients bound to certain deployments at development/configuration time. As soon as dynamic resource server discovery is required, the pre-registeredredirect_uri"redirect_uri" maybeno longer be feasible. 5.2.3.6. Revokeclient secretsClient Secrets An authorization server may revoke a client's secret in order to prevent abuse of a revealed secret. Note: This measure will immediately invalidate any authorizationcode"code" or refresh token issued to the respective client. This mightbeunintentionally impact client identifiers and secrets used across multiple deployments of a particular native or web application. This a countermeasure against: o Abuse of revealed client secrets for private clients 5.2.3.7. Usestrong client authentication (e.g. client_assertion /Strong Client Authentication (e.g., client_assertion/ client_token) By using an alternative form of authentication such as client assertion[I-D.ietf-oauth-assertions],[OAuth-ASSERTIONS], the need to distribute aclient_secret"client_secret" is eliminated. This may require the use of a secure private key store or other supplemental authentication system as specified by the client assertion issuer in its authentication process. 5.2.4.End-user authorizationEnd-User Authorization Thissecion involvessection includes considerations for authorization flows involving theend-user.end user. 5.2.4.1. AutomaticprocessingProcessing ofrepeated authorizations requires client validationRepeated Authorizations Requires Client Validation Authorization servers should NOT automatically process repeat authorizations where the client is not authenticated through a client secret or some other authentication mechanism such as a signed authentication assertion certificate (Section5.2.3.7 Use strong client authentication (e.g. client_assertion / client_token))5.2.3.7) or validation of a pre-registered redirect URI (Section5.2.3.5 Validation of pre-registered redirection URI ).5.2.3.5). 5.2.4.2. Informeddecisions basedDecisions Based ontransparencyTransparency The authorization server should clearly explain to theend-userend user what happens in the authorization process and what the consequences are. For example, the user should understand what access he is about to grant to which client for what duration. It should also be obvious to theuser,user whether the server is able to reliably certify certain client properties (web site URL, security policy). 5.2.4.3. Validation ofclient propertiesClient Properties byend-userEnd User In the authorization process, the user is typically asked to approve a client's request for authorization. This is an important security mechanism by itself because theend-userend user can be involved in the validation of client properties, such as whether the client name known to the authorization server fits the name of the web site or the application theend-userend user is using. This measure is especially helpful in situations where the authorization server is unable to authenticate the client. It is a countermeasure against: oMaliciousA malicious application o A client application masquerading as another client 5.2.4.4. Binding ofauthorization codeAuthorization "code" toclient_id"client_id" The authorization server should bind every authorizationcode"code" to the id of the respective clientwhichthat initiated the end-user authorization process. This measure is a countermeasure against: oreplayReplay of authorizationcodes"codes" with different clientcredentialscredentials, since an attacker cannot use anotherclient_id"client_id" to exchange an authorizationcode"code" into a token o Online guessing of authorizationcodes"codes" Note: This binding should be protected from unauthorized modifications(e.g.(e.g., using protected memory and/or a secure database). 5.2.4.5. Binding ofauthorization codeAuthorization "code" toredirect_uri"redirect_uri" The authorization server should be able to bind every authorizationcode"code" to the actualredirectionredirect URI used as the redirect target of the client in the end-user authorization process. This binding should be validated when the client attempts to exchange the respective authorizationcode"code" for an access token. This measure is a countermeasure against authorizationcode"code" leakage through counterfeit websitessites, since an attacker cannot use anotherredirectionredirect URI to exchange an authorizationcode"code" into a token. 5.3. Client App Security This section deals with considerations for client applications. 5.3.1. Don'tstore credentialsStore Credentials incodeCode orresources bundledResources Bundled withsoftware packagesSoftware Packages Because of thenumbersnumber of copies of client software, there is limited benefitto createin creating a single client id and secretwhichthat is shared by all installations of an application. Such an application by itself would be considered a "public"clientclient, as it cannot be presumed to be able to keep client secrets. A secret, burned into the source code of the application or an associated resource bundle, cannot be protected from reverse engineering. Secondly, such secrets cannot berevokedrevoked, since this would immediately put all installations out of work. Moreover, since the authorization server cannot really trust the client's identifier, it would be dangerous to indicate toend-end users the trustworthiness of the client. 5.3.2. Use Standardweb server protection measuresWeb Server Protection Measures (forconfig filesConfig Files anddatabases)Databases) Use standard web server protection and configuration measures- Section 5.3.2to protect the integrity of the server, databases, configuration files, and other operational components of the server. 5.3.3. StoresecretsSecrets ina secure storage TheSecure Storage There are differentwayways to store secrets of all kinds (tokens, client secrets) securely on a device or server. Most multi-user operating systems segregate the personal storage ofthedifferent system users. Moreover, most modern smartphone operating systems even supportto store app-specificthe storage of application-specific data in separate areas ofthefile systems and protectitthe data from access by other applications. Additionally, applications canimplementsimplement confidential dataitselfby using a user-supplied secret, such as a PIN or password. Another option is to swap refresh token storage to a trusted backend server. Thismeanoption in turn requires a resilient authenticationmechanismsmechanism between the client and backend server. Note: Applications should ensure that confidential data is kept confidential even after reading from secure storage, which typically meansto keepkeeping this data in the local memory of the application. 5.3.4. Utilizedevice lockDevice Lock toprevent unauthorized device accessPrevent Unauthorized Device Access On a typical modern phone, there are many "device lock" optionswhichthat can be utilized to provide additional protectionwherewhen a device is stolen or misplaced. These include PINs,passwordspasswords, and otherbiomtric featresbiometric features such as "face recognition". These are not equal in the level of security they provide. 5.3.5. Linkstate parameterthe "state" Parameter touser agent sessionUser Agent Session Thestate"state" parameter is used to link client requests and prevent CSRF attacks, forexampleexample, attacks against theredirectionredirect URI. An attacker could inject their own authorizationcode"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.(e.g., save the victim's bank account information to a protected resource controlled by the attacker). The client should utilize the "state" request parameter to send the authorization server a value that binds the request to theuser-user agent's authenticated state(e.g.(e.g., a hash of the session cookie used to authenticate theuser-agent)user agent) when making an authorization request. Once authorization has been obtained from theend-user,end user, the authorization server redirects the end-user'suser-agentuser agent back to the client with the required binding value contained in the "state" parameter. The binding value enables the client to verify the validity of the request by matching the binding value to theuser-user agent's authenticated state. 5.4. Resource Servers The following section details security considerations for resource servers. 5.4.1. AuthorizationheadersHeaders Authorization headers are recognized and specially treated by HTTP proxies and servers.ThusThus, the usage of such headers for sending access tokens to resource servers reduces the likelihood of leakage or unintended storage of authenticated requests ingeneralgeneral, and especially Authorization headers. 5.4.2. AuthenticatedrequestsRequests An authorization server may bind tokens to a certain client identifier and enable resource servers tobe able tovalidate that association on resource access. This will require the resource server to authenticate the originator of a request as the legitimate owner of a particular token. There area couple ofseveral options to implement this countermeasure: o The authorization server may associate the client identifier with the token (either internally or in the payload ofan self- containeda self-contained token). The client then uses client certificate-based HTTP authentication on the resource server's endpoint to authenticate itsidentityidentity, and the resource server validates the name with the name referenced by the token. osameSame asbefore,the option above, but the client uses his private key to sign the request to the resource server(public(the public key is either contained in the token or sent along with therequest)request). o Alternatively, the authorization server may issue a token-boundsecret,key, which the client uses in a Holder-of-Key proof toMAC (message authentication code)authenticate therequest (see [I-D.ietf-oauth-v2-http-mac]).client's use of the token. The resource server obtains the secreteitherdirectly from the authorizationserverserver, oritthe secret is contained in an encrypted section of the token.That wayIn that way, the resource server does not "know" the client but is able to validate whether the authorization server issued the token to thatclientclient. Authenticated requests are a countermeasure against abuse of tokens by counterfeit resource servers. 5.4.3. SignedrequestsRequests A resource server may decide to accept signed requests only, either to replacetransport leveltransport-level security measures or to complement such measures. Every signed request should be uniquely identifiable and should not be processed twice by the resource server. This countermeasure helps to mitigate: o modifications of the message and o replay attempts 5.5. A Word on User Interaction and User-Installed Apps OAuth, as a security protocol, is distinctive in that its flow usually involves significant user interaction, making the end user a part of the security model. This creates some important difficulties in defending against some of the threats discussed above. Some of these points have already been made, but it's worth repeating and highlighting them here. o End users must understand what they are being asked to approve (see SectionSection 5.2.4.1).5.2.4.2). Users often do not have the expertise to understand the ramifications of saying "yes" to an authorizationrequest.request and are likely not to be able to see subtle differences in the wording of requests. Malicious software can confuse the user, tricking the user into approving almost anything. o End-user devices are prone to software compromise. This has been a long-standing problem, with frequent attacks on web browsers and other parts of the user's system. But with the increasing popularity of user-installed "apps", the threat posed by compromised or malicious end-user software is verystrong,strong and is one that is very difficult to mitigate. o Be aware that users will demand to install and run such apps, and that compromised or malicious ones can steal credentials at many points in the data flow. They can intercept the very user login credentials that OAuth is designed to protect. They can request authorization far beyond what they have led the user to understand and approve. They can automate a response on behalf of the user, hiding the whole process. No solution is offered here, because none is known; this remains in the space between better security and better usability. o Addressing these issues by restricting the use of user-installed software may be practical in some limitedenvironments,environments and can be used as a countermeasure in those cases. Such restrictions are not practical in the general case, and mechanisms for after-the- fact recovery should be in place. o While end users are mostly incapable of properly vetting applications they load onto their devices, those who deployAuthorization Serversauthorization servers might have tools at their disposal to mitigate maliciousClients.clients. For example, awell run Authorization Serverwell-run authorization server must only assert client properties to theend-userend user it is effectively capable of validating,explicitelyexplicitly point out which properties it cannot validate, and indicate to theend-userend user the risk associated with granting access to the particular client. 6.IANA Considerations This document makes no request of IANA. Note to RFC Editor: this section may be removed on publication as an RFC. 7.Acknowledgements We would like to thank Stephen Farrell, Barry Leiba, Hui-Lan Lu, Francisco Corella, PeifungEE. Lam, ShaneBB. Weeden, Skylar Woodward, Niv Steingarten, Tim Bray, and James H. Manger for their comments and contributions.8.7. References8.1. Informative7.1. Normative References[I-D.ietf-oauth-v2][RFC6749] Hardt, D., "The OAuth 2.0 Authorization Framework",draft-ietf-oauth-v2-31 (work in progress), AugustRFC 6749, October 2012.[I-D.ietf-oauth-v2-bearer][RFC6750] Jones, M. and D. Hardt, "The OAuth 2.0 Authorization Framework: Bearer Token Usage",draft-ietf-oauth-v2-bearer-23 (work in progress), AugustRFC 6750, October 2012.8.2.7.2. Informative References[I-D.gondrom-x-frame-options] Ross, D. and T. Gondrom, "HTTP Header X-Frame-Options", draft-gondrom-x-frame-options-00 (work in progress), March 2012. [I-D.ietf-oauth-assertions] Campbell, B., Mortimore, C., Jones, M.,[Framebusting] Rydstedt, G., Bursztein, Boneh, D., andY. Goland, "Assertion Framework for OAuth 2.0", draft-ietf-oauth-assertions-06 (work in progress), September 2012. [I-D.ietf-oauth-json-web-token] Jones, M., Bradley, J., and N. Sakimura, "JSONC. Jackson, "Busting Frame Busting: a Study of Clickjacking Vulnerabilities on Popular Sites", IEEE 3rd WebToken (JWT)", draft-ietf-oauth-json-web-token-03 (work in progress), July 2012. [I-D.ietf-oauth-revocation] Lodderstedt, T., Dronia, S.,2.0 Security andM. Scurtescu, "Token Revocation", draft-ietf-oauth-revocation-01 (work in progress), October 2012. [I-D.ietf-oauth-v2-http-mac] Hammer-Lahav, E., "HTTP Authentication: MAC Access Authentication", draft-ietf-oauth-v2-http-mac-01 (work in progress), February 2012.Privacy Workshop, May 2010, <http://elie.im/ publication/ busting-frame-busting-a-study-of-clickjacking- vulnerabilities-on-popular-sites>. [IMEI] 3GPP, "International Mobile station Equipment Identities (IMEI)", 3GPP TS 22.0163.3.0, July 2002.11.0.0, September 2012, <http://www.3gpp.org/ftp/Specs/html-info/22016.htm>. [OASIS.saml-core-2.0-os] Cantor, S., Ed., Kemp, J., Ed., Philpott, R., Ed., and E. Maler, Ed., "Assertions andProtocolProtocols for the OASIS Security Assertion Markup Language (SAML) V2.0", OASIS Standardsaml-core- 2.0-os,saml-core-2.0-os, March2005. [OASIS.sstc-gross-sec-analysis-response-01]2005, <http:// docs.oasis-open.org/security/saml/v2.0/ saml-core-2.0-os.pdf>. [OASIS.sstc-saml-bindings-1.1] Maler, E., Ed., Mishra, P., Ed., and R. Philpott, Ed., "Bindings and Profiles for the OASIS Security Assertion Markup Language (SAML) V1.1", September 2003, <http:// www.oasis-open.org/committees/download.php/3405/ oasis-sstc-saml-bindings-1.1.pdf>. [OASIS.sstc-sec-analysis-response-01] Linn, J.,Ed.Ed., and P. Mishra, Ed., "SSTC Response to "Security Analysis of the SAML Single Sign-on Browser/ Artifact Profile"", January2005. [OASIS.sstc-saml-bindings-1.1] Maler, E.,2005, <http:// www.oasis-open.org/committees/download.php/11191/ sstc-gross-sec-analysis-response-01.pdf>. [OAuth-ASSERTIONS] Campbell, B., Mortimore, C., Jones, M., and Y. Goland, "Assertion Framework for OAuth 2.0", Work in Progress, December 2012. [OAuth-HTTP-MAC] Richer, J., Ed.,Mishra, P.,Mills, W., Ed., andR. Philpott,H. Tschofenig, Ed.,"Bindings"OAuth 2.0 Message Authentication Code (MAC) Tokens", Work in Progress, November 2012. [OAuth-JWT] Jones, M., Bradley, J., andProfiles for the OASISN. Sakimura, "JSON Web Token (JWT)", Work in Progress, December 2012. [OAuth-REVOCATION] Lodderstedt, T., Ed., Dronia, S., and M. Scurtescu, "Token Revocation", Work in Progress, November 2012. [OPENID] "OpenID Foundation Home Page", <http://openid.net/>. [OWASP] "Open Web Application SecurityAssertion Markup Language (SAML) V1.1", September 2003.Project Home Page", <https://www.owasp.org/>. [Portable-Contacts] Smarr, J., "Portable Contacts 1.0 Draft C", August 2008, <http://portablecontacts.net/>. [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000. [RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness Requirements for Security", BCP 106, RFC 4086, June 2005. [RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The Kerberos Network Authentication Service (V5)", RFC 4120, July 2005. [RFC4301] Kent, S. and K. Seo, "Security Architecture for the Internet Protocol", RFC 4301, December 2005. [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.2", RFC 5246, August 2008.[framebusting] Rydstedt, G., Bursztein, Boneh, D., and C. Jackson, "Busting Frame Busting: a Study of Clickjacking Vulnerabilities on Popular Sites", IEEE 3rd Web 2.0 Security[SSL-Latency] Sissel, J., Ed., "SSL handshake latency andPrivacy Workshop,HTTPS optimizations", June 2010.[gross-sec-analysis][Sec-Analysis] Gross, T., "Security Analysis of the SAML Single Sign-on Browser/ArtifactProfile,Profile", 19th Annual Computer Security Applications Conference, LasVegas",Vegas, December 2003. [X-Frame-Options] Ross, D. and T. Gondrom, "HTTP Header X-Frame-Options", Work in Progress, October 2012. [iFrame] World Wide Web Consortium, "Frames in HTML documents", W3C HTML 4.01,Dec 1999. [openid] "OpenID Foundation Home Page", <http://openid.net/>. [owasp] "Open Web Application Security Project Home Page", <https://www.owasp.org/>. [portable-contacts] Smarr, J., "Portable Contacts 1.0 Draft C", August 2008, <http://portablecontacts.net/>. [ssl-latency] Sissel, J., Ed., "SSL handshake latency and HTTPS optimizations", June 2010. Appendix A. Document History [[ to be removed by RFC editor before publication as an RFC ]] draft-lodderstedt-oauth-security-01 o section 4.4.1.2 - changed "resource server" to "client" in countermeasures description. o section 4.4.1.6 - changed "client shall authenticate the server" to "The browser shall be utilized to authenticate the redirection URI of the client" o section 5 - general review and alignment with public/confidential client terms o all sections - general clean-up and typo corrections draft-ietf-oauth-v2-threatmodel-00 o section 3.4 - added the purposes for using authorization codes. o extended section 4.4.1.1 o merged 4.4.1.5 into 4.4.1.2 o corrected some typos o reformulated "session fixation", renamed respective sections into "authorization code disclosure through counterfeit client" o added new section "User session impersonation" o worked out or reworked sections 2.3.3, 4.4.2.4, 4.4.4, 5.1.4.1.2, 5.1.4.1.4, 5.2.3.5 o added new threat "DoS using manufactured authorization codes" as proposed by Peifung E Lam o added XSRF and clickjacking (incl. state parameter explanation) o changed sub-section order in section 4.4.1 o incorporated feedback from Skylar Woodward (client secrets) and Shane B Weeden (refresh tokens as client instance secret) o aligned client section with core draft's client type definition o converted I-D into WG document draft-ietf-oauth-v2-threatmodel-01 o Alignment of terminology with core draft 22 (private/public client, redirect URI validation policy, replaced definition of the client categories by reference to respective core section) o Synchronisation with the core's security consideration section (UPDATE 10.12 CSRF, NEW 10.14/15) o Added Resource Owner Impersonation o Improved section 5 o Renamed Refresh Token Replacement to Refresh Token Rotation draft-ietf-oauth-v2-threatmodel-02 o Incoporated Tim Bray's review comments (e.g. removed all normative language) draft-ietf-oauth-v2-threatmodel-03 o removed 2119 boilerplate and normative reference o incorporated shepherd review feedback draft-ietf-oauth-v2-threatmodel-06 o incorporated AD review feedback draft-ietf-oauth-v2-threatmodel-07 o added new section on token substituation o made references to core and bearer normativeDecember 1999, <http://www.w3.org/TR/html4/present/frames.html#h-16.5>. Authors' Addresses Torsten Lodderstedt (editor) Deutsche Telekom AGEmail:EMail: torsten@lodderstedt.net Mark McGloin IBMEmail:EMail: mark.mcgloin@ie.ibm.com Phil Hunt Oracle CorporationEmail:EMail: phil.hunt@yahoo.com