// For flags

CVE-2021-41129

Authentication bypass in Pterodactyl

Severity Score

8.1
*CVSS v3.1

Exploit Likelihood

*EPSS

Affected Versions

*CPE

Public Exploits

0
*Multiple Sources

Exploited in Wild

-
*KEV

Decision

-
*SSVC
Descriptions

Pterodactyl is an open-source game server management panel built with PHP 7, React, and Go. A malicious user can modify the contents of a `confirmation_token` input during the two-factor authentication process to reference a cache value not associated with the login attempt. In rare cases this can allow a malicious actor to authenticate as a random user in the Panel. The malicious user must target an account with two-factor authentication enabled, and then must provide a correct two-factor authentication token before being authenticated as that user. Due to a validation flaw in the logic handling user authentication during the two-factor authentication process a malicious user can trick the system into loading credentials for an arbitrary user by modifying the token sent to the server. This authentication flaw is present in the `LoginCheckpointController@__invoke` method which handles two-factor authentication for a user. This controller looks for a request input parameter called `confirmation_token` which is expected to be a 64 character random alpha-numeric string that references a value within the Panel's cache containing a `user_id` value. This value is then used to fetch the user that attempted to login, and lookup their two-factor authentication token. Due to the design of this system, any element in the cache that contains only digits could be referenced by a malicious user, and whatever value is stored at that position would be used as the `user_id`. There are a few different areas of the Panel that store values into the cache that are integers, and a user who determines what those cache keys are could pass one of those keys which would cause this code pathway to reference an arbitrary user. At its heart this is a high-risk login bypass vulnerability. However, there are a few additional conditions that must be met in order for this to be successfully executed, notably: 1.) The account referenced by the malicious cache key must have two-factor authentication enabled. An account without two-factor authentication would cause an exception to be triggered by the authentication logic, thusly exiting this authentication flow. 2.) Even if the malicious user is able to reference a valid cache key that references a valid user account with two-factor authentication, they must provide a valid two-factor authentication token. However, due to the design of this endpoint once a valid user account is found with two-factor authentication enabled there is no rate-limiting present, thusly allowing an attacker to brute force combinations until successful. This leads to a third condition that must be met: 3.) For the duration of this attack sequence the cache key being referenced must continue to exist with a valid `user_id` value. Depending on the specific key being used for this attack, this value may disappear quickly, or be changed by other random user interactions on the Panel, outside the control of the attacker. In order to mitigate this vulnerability the underlying authentication logic was changed to use an encrypted session store that the user is therefore unable to control the value of. This completely removed the use of a user-controlled value being used. In addition, the code was audited to ensure this type of vulnerability is not present elsewhere.

Pterodactyl es un panel de administración de servidores de juegos de código abierto construido con PHP 7, React y Go. Un usuario malicioso puede modificar el contenido de una entrada "confirmation_token" durante el proceso de autenticación de dos factores para hacer referencia a un valor de caché no asociado con el intento de inicio de sesión. En casos excepcionales, esto puede permitir a un actor malicioso autenticarse como un usuario aleatorio en el Panel. El usuario malicioso debe dirigirse a una cuenta con la autenticación de dos factores habilitada y luego debe proporcionar un token de autenticación de dos factores correcto antes de ser autenticado como dicho usuario. Debido a un fallo de comprobación en la lógica que administra la autenticación de usuario durante el proceso de autenticación de dos factores, un usuario malicioso puede engañar al sistema para que cargue las credenciales de un usuario arbitrario modificando el token enviado al servidor. Este fallo de autenticación está presente en el método "LoginCheckpointController@__invoke" que maneja la autenticación de dos factores para un usuario. Este controlador busca un parámetro de entrada de la petición llamado "confirmation_token" que se espera que sea una cadena alfanumérica aleatoria de 64 caracteres que hace referencia a un valor dentro de la caché del Panel que contiene un valor "user_id". Este valor es usado para recuperar el usuario que ha intentado iniciar sesión y buscar su token de autenticación de dos factores. Debido al diseño de este sistema, cualquier elemento de la caché que contenga sólo dígitos podría ser referenciado por un usuario malicioso, y cualquier valor almacenado en esa posición sería usado como el "user_id". Se presentan algunas áreas diferentes del Panel que almacenan valores en la caché que son enteros, y un usuario que determine cuáles son esas claves de la caché podría pasar una de esas claves que causaría que esta vía de código hiciera referencia a un usuario arbitrario. En el fondo, se trata de una vulnerabilidad de alto riesgo para omitir el inicio de sesión. Sin embargo, hay algunas condiciones adicionales que deben cumplirse para que esto se ejecute con éxito, en particular 1.) La cuenta a la que hace referencia la clave de caché maliciosa debe tener habilitada la autenticación de dos factores. Una cuenta sin la autenticación de dos factores causaría una excepción en la lógica de autenticación, saliendo así de este flujo de autenticación. 2.) Incluso si el usuario malicioso es capaz de hacer referencia a una clave de caché válida que hace referencia a una cuenta de usuario válida con autenticación de dos factores, debe proporcionar un token de autenticación de dos factores válido. Sin embargo, debido al diseño de este endpoint, una vez que se encuentra una cuenta de usuario válida con la autenticación de dos factores habilitada, no hay límite de velocidad presente, permitiendo así a un atacante hacer combinaciones de fuerza bruta hasta tener éxito. Esto conlleva a una tercera condición que debe cumplirse: 3.) Durante la duración de esta secuencia de ataque, la clave de caché a la que se hace referencia debe seguir existiendo con un valor válido de "user_id". Dependiendo de la llave específica que se esté usando para este ataque, este valor puede desaparecer rápidamente, o ser cambiado por otras interacciones aleatorias del usuario en el Panel, fuera del control del atacante. Para mitigar esta vulnerabilidad, se modificó la lógica de autenticación subyacente para utilizar un almacén de sesión cifrado, cuyo valor no puede ser controlado por el usuario. Esto eliminó por completo el uso de un valor controlado por el usuario. Además, se auditó el código para asegurar que este tipo de vulnerabilidad no está presente en otros lugares

*Credits: N/A
CVSS Scores
Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High
Attack Vector
Network
Attack Complexity
Medium
Authentication
None
Confidentiality
Partial
Integrity
Partial
Availability
Partial
* Common Vulnerability Scoring System
SSVC
  • Decision:-
Exploitation
-
Automatable
-
Tech. Impact
-
* Organization's Worst-case Scenario
Timeline
  • 2021-09-15 CVE Reserved
  • 2021-10-06 CVE Published
  • 2024-08-04 CVE Updated
  • 2024-09-24 EPSS Updated
  • ---------- Exploited in Wild
  • ---------- KEV Due Date
  • ---------- First Exploit
CWE
  • CWE-287: Improper Authentication
  • CWE-502: Deserialization of Untrusted Data
  • CWE-639: Authorization Bypass Through User-Controlled Key
  • CWE-807: Reliance on Untrusted Inputs in a Security Decision
CAPEC
Affected Vendors, Products, and Versions
Vendor Product Version Other Status
Vendor Product Version Other Status <-- --> Vendor Product Version Other Status
Pterodactyl
Search vendor "Pterodactyl"
Panel
Search vendor "Pterodactyl" for product "Panel"
>= 1.0.0 < 1.6.2
Search vendor "Pterodactyl" for product "Panel" and version " >= 1.0.0 < 1.6.2"
-
Affected