Vulnerable Cognito
Primero desplegamos el laboratorio:
┌──(root㉿SPARTAN-SERVER)-[/home/hacker/cloudgoat]
└─# ./cloudgoat.py create vulnerable_cognito
Using default profile "default" from config.yml...
Loading whitelist.txt...
A whitelist.txt file was found that contains at least one valid IP address or range.
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 4.16"...
- Installing hashicorp/aws v4.67.0...
- Installed hashicorp/aws v4.67.0 (signed by HashiCorp)
Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
[cloudgoat] terraform init completed with no error code.
data.aws_caller_identity.aws-account-id: Reading...
data.aws_caller_identity.aws-account-id: Read complete after 0s [id=583318501385]Al finalizar el despliegue sale el siguiente mensaje:
Nuestra auditoria comienza con la revision de la URL previamente obtenida.

Análisis del Código HTML
En el codigo fuente de esta aplicacion se encuentra la siguiente informacion:
La información encontrada en el código HTML se refiere a la configuración inicial necesaria para interactuar con Amazon Cognito, un servicio que proporciona autenticación y gestión de usuarios para aplicaciones web y móviles. Vamos a analizar detalladamente la sensibilidad de esta información y su propósito.
Fragmento de Código Analizado:
Amazon Cognito: UserPoolId y ClientId
UserPoolId:
Definición: El
UserPoolIdes un identificador único para el pool de usuarios (User Pool) en Amazon Cognito. Este ID especifica el pool de usuarios con el que la aplicación interactuará.Sensibilidad: Este identificador por sí mismo no es extremadamente sensible, pero puede proporcionar pistas sobre la infraestructura del backend a un atacante si se combina con otra información.
ClientId:
Definición: El
ClientIdes un identificador único para la aplicación cliente dentro del pool de usuarios. Este ID es utilizado para identificar la aplicación que solicita autenticación y autorización.Sensibilidad: Al igual que el
UserPoolId, elClientIdno es particularmente sensible en sí mismo. Sin embargo, puede ser considerado un vector de ataque si un atacante tiene información adicional.
Naturaleza Pública de los Identificadores
Es común que tanto UserPoolId como ClientId sean expuestos en el frontend (públicamente accesibles) ya que son necesarios para que las aplicaciones web y móviles interactúen con Amazon Cognito. Estos identificadores permiten a la aplicación saber a qué pool de usuarios y aplicación cliente debe dirigir las solicitudes de autenticación.
Fragmento de Código Analizado:
Es común Por otro lado, esta pieza de codigo divulga desde el frontend posibles rutas de usuarios privilegiados:
Realizando registro en Cognito
Intentamos iniciar sesion en el aplicativo web:

Teniendo en cuenta lo anterior, podriamos intentar ejecutar el siguiente comando:
Amazon Cognito Identity Provider (Cognito-IDP) es un servicio de Amazon Web Services (AWS) diseñado para simplificar la autenticación, autorización y gestión de usuarios en aplicaciones web y móviles. Proporciona funcionalidades esenciales para manejar el ciclo de vida de los usuarios, incluyendo el registro, inicio de sesión y gestión de perfiles, con soporte para múltiples proveedores de identidad.
Para obtener el oastify se puede utilizar colaborator de BurpSuite:

Al intentar registrar nuestro usuario, se nos retorna un error que inidica que faltan los atributos del usuarios.
El error indica que los atributos son name.givenName y name.familyName asi que el comando seria:
Luego de lo anterior se nos enviara un OTP:

El texto recibido el collaborator de BurpSuite es el siguiente:
Lo mas importante de lo anterior es el siguiente mensaje:
Por lo anterior, se procede a validar el usuario previo:
Lo anterior, indica que la confirmacion del usuario ha sido exitosa.
Ahora vamos autenticarnos con nuestro usuario:

Luego de la autenticacion, podemos apreciar lo siguiente:

Obteniendo el JWT
Ahora tomamos el JWT de las peticiones y ejecutamos el siguiente comando:
El analisis del JWT tambien lo podemos realizar con la siguiente pagina:

Cambiando atributos personalizados del usuario
Despues de lo anterior, se procede a realizar el cambio del atributo:
Luego de iniciar sesion nuevamente nos redirige a la sesion de administrador:

El fichero admin.html tiene la siguiente informacion:
Luego de lo anterior, se procede a ejecutar el siguiente comando:
Y ahora ejecutamos lo siguiente:
Se procede a realizar una autenticacion y validamos con que usuarios estamos autenticados:
En este punto un atacante podria utilizar enumerate-iam como se ha explicado previamente:
Última actualización
¿Te fue útil?
