rfc9700v4.txt | rfc9700.txt | |||
---|---|---|---|---|
skipping to change at line 363 ¶ | skipping to change at line 363 ¶ | |||
token leakage vectors are mitigated. | token leakage vectors are mitigated. | |||
Clients SHOULD instead use the response type code (i.e., | Clients SHOULD instead use the response type code (i.e., | |||
authorization code grant type) as specified in Section 2.1.1 or any | authorization code grant type) as specified in Section 2.1.1 or any | |||
other response type that causes the authorization server to issue | other response type that causes the authorization server to issue | |||
access tokens in the token response, such as the code id_token | access tokens in the token response, such as the code id_token | |||
response type. This allows the authorization server to detect replay | response type. This allows the authorization server to detect replay | |||
attempts by attackers and generally reduces the attack surface since | attempts by attackers and generally reduces the attack surface since | |||
access tokens are not exposed in URLs. It also allows the | access tokens are not exposed in URLs. It also allows the | |||
authorization server to sender-constrain the issued tokens (see | authorization server to sender-constrain the issued tokens (see | |||
Section 2.2. | Section 2.2). | |||
2.2. Token Replay Prevention | 2.2. Token Replay Prevention | |||
2.2.1. Access Tokens | 2.2.1. Access Tokens | |||
A sender-constrained access token scopes the applicability of an | A sender-constrained access token scopes the applicability of an | |||
access token to a certain sender. This sender is obliged to | access token to a certain sender. This sender is obliged to | |||
demonstrate knowledge of a certain secret as a prerequisite for the | demonstrate knowledge of a certain secret as a prerequisite for the | |||
acceptance of that token at the recipient (e.g., a resource server). | acceptance of that token at the recipient (e.g., a resource server). | |||
skipping to change at line 985 ¶ | skipping to change at line 985 ¶ | |||
attack outlined below. | attack outlined below. | |||
Preconditions: For this variant of the attack to work, it is assumed | Preconditions: For this variant of the attack to work, it is assumed | |||
that | that | |||
* the implicit or authorization code grant is used with multiple | * the implicit or authorization code grant is used with multiple | |||
authorization servers of which one is considered "honest" (H-AS) | authorization servers of which one is considered "honest" (H-AS) | |||
and one is operated by the attacker (A-AS), and | and one is operated by the attacker (A-AS), and | |||
* the client stores the authorization server chosen by the user in a | * the client stores the authorization server chosen by the user in a | |||
session bound to the user's browser and uses the same redirection | session bound to the user's browser and uses the same redirection | |||
endpoint URI for each authorization server. | URI for each authorization server. | |||
In the following, it is further assumed that the client is registered | In the following, it is further assumed that the client is registered | |||
with H-AS (URI: https://honest.as.example, client ID: 7ZGZldHQ) and | with H-AS (URI: https://honest.as.example, client ID: 7ZGZldHQ) and | |||
with A-AS (URI: https://attacker.example, client ID: 666RVZJTA). | with A-AS (URI: https://attacker.example, client ID: 666RVZJTA). | |||
URLs shown in the following example are shortened for presentation to | URLs shown in the following example are shortened for presentation to | |||
include only parameters relevant to the attack. | include only parameters relevant to the attack. | |||
Attack on the authorization code grant: | Attack on the authorization code grant: | |||
1. The user selects to start the grant using A-AS (e.g., by clicking | 1. The user selects to start the grant using A-AS (e.g., by clicking | |||
skipping to change at line 1042 ¶ | skipping to change at line 1042 ¶ | |||
to that authorization server), as in Attacker (A2) (see | to that authorization server), as in Attacker (A2) (see | |||
Section 3). This capability can, for example, be the result of an | Section 3). This capability can, for example, be the result of an | |||
attacker-in-the-middle attack on the user's connection to the | attacker-in-the-middle attack on the user's connection to the | |||
client. In the attack, the user starts the flow with H-AS. The | client. In the attack, the user starts the flow with H-AS. The | |||
attacker intercepts this request and changes the user's selection | attacker intercepts this request and changes the user's selection | |||
to A-AS. The rest of the attack proceeds as in Step 2 and | to A-AS. The rest of the attack proceeds as in Step 2 and | |||
following above. | following above. | |||
* Implicit Grant: In the implicit grant, the attacker receives an | * Implicit Grant: In the implicit grant, the attacker receives an | |||
access token instead of the code in Step 4. The attacker's | access token instead of the code in Step 4. The attacker's | |||
authorization server receives the access token when the client | authorization server receives the access token when the client | |||
makes either a request to the A-AS userinfo endpoint or a request | makes either a request to the A-AS userinfo endpoint (defined in | |||
to the attacker's resource server (since the client believes it | [OpenID.Core]) or a request to the attacker's resource server | |||
has completed the flow with A-AS). | (since the client believes it has completed the flow with A-AS). | |||
* Per-AS Redirect URIs: If clients use different redirection URIs | * Per-AS Redirect URIs: If clients use different redirection URIs | |||
for different authorization servers, clients do not store the | for different authorization servers, clients do not store the | |||
selected authorization server in the user's session, and | selected authorization server in the user's session, and | |||
authorization servers do not check the redirection URIs properly, | authorization servers do not check the redirection URIs properly, | |||
attackers can mount an attack called "Cross-Social Network Request | attackers can mount an attack called "Cross Social-Network Request | |||
Forgery". These attacks have been observed in practice. Refer to | Forgery". These attacks have been observed in practice. Refer to | |||
[research.jcs_14] for details. | [research.jcs_14] for details. | |||
* OpenID Connect: Some variants can be used to attack OpenID | * OpenID Connect: Some variants can be used to attack OpenID | |||
Connect. In these attacks, the attacker misuses features of the | Connect. In these attacks, the attacker misuses features of the | |||
OpenID Connect Discovery [OpenID.Discovery] mechanism or replays | OpenID Connect Discovery [OpenID.Discovery] mechanism or replays | |||
access tokens or ID Tokens to conduct a mix-up attack. The | access tokens or ID Tokens to conduct a mix-up attack. The | |||
attacks are described in detail in Appendix A of | attacks are described in detail in Appendix A of | |||
[arXiv.1704.08539] and Section 6 of [arXiv.1508.04324v2] | [arXiv.1704.08539] and Section 6 of [arXiv.1508.04324v2] | |||
("Malicious Endpoints Attacks"). | ("Malicious Endpoints Attacks"). | |||
End of changes. 4 change blocks. | ||||
6 lines changed or deleted | 6 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |