Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en el proceso de autenticación de dos factores en Pterodactyl (CVE-2021-41129)

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-287 Autenticación incorrecta
Fecha de publicación:
06/10/2021
Última modificación:
12/08/2022

Descripción

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

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:pterodactyl:panel:*:*:*:*:*:*:*:* 1.0.0 (incluyendo) 1.6.2 (excluyendo)