Skip to content

Token reuse in invitation URLs leads to access control bypass via the use of a different enrollment flow

Critical
BeryJu published GHSA-9qwp-jf7p-vr7h Dec 23, 2022

Package

authentik

Affected versions

< 2022.11.3
< 2022.10.3

Patched versions

2022.11.4
2022.10.4

Description

Summary

Token reuse in invitation URLs leads to access control bypass via the use of a different enrollment flow than in the one provided.

Patches

authentik 2022.11.4, 2022.10.4 and 2022.12.0 fix this issue, for other versions the workaround can be used.

Impact

Only configurations using both invitations and have multiple enrollment flows with invitation stages that grant different permissions are affected. The default configuration is not vulnerable, and neither are configurations with a single enrollment flow.

Details

The vulnerability allows an attacker that knows different invitation flows names (e.g. enrollment-invitation-test and enrollment-invitation-admin) via either different invite links or via brute forcing to signup via a single invitation url for any valid invite link received (it can even be a url for a third flow as long as it's a valid invite) as the token used in the Invitations section of the Admin interface does NOT change when a different enrollment flow is selected via the interface and it is NOT bound to the selected flow, so it will be valid for any flow when used.

Workarounds

As a workaround, fixed data can be added to invitations which can be checked in the flow to deny requests. Alternatively, an identifier with high entropy (like a UUID) can be used as flow slug, mitigating the attack vector by exponentially decreasing the possibility of discovering other flows.

PoC

  1. Create two enrollment flow ( enrollment-invitation-test and enrollment-invitation-admin) in the admin interface (as you normally would)
  2. Make enrollment-invitation-test assign the test group to the user when signed up
  3. Make enrollment-invitation-admin assign the admin group to the user when signed up
  4. Generate an invitation URL via the admin interface
  5. Bind the enrollment-invitation-test to it
  6. Use the url to signup but change the enrollment-invitation-test part in the URL to enrollment-invitation-admin
  7. The URL is still valid (even though the admin interface has NOT chosen that flow to be bound to that invitation)
  8. Sign up, you're now an admin

For more information

If you have any questions or comments about this advisory:

Severity

Critical

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
Required
Scope
Changed
Confidentiality
High
Integrity
High
Availability
Low

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L

CVE ID

CVE-2022-23555

Weaknesses

Improper Access Control

The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor. Learn more on MITRE.

Credits