AWS Codebuild - Token Leakage
Recuperar Tokens Configurados de Github/Bitbucket
Primero, verifica si hay credenciales de origen configuradas que puedas filtrar:
Via Docker Image
Si encuentras que la autenticación, por ejemplo, a Github está configurada en la cuenta, puedes exfiltrar ese acceso (GH token o OAuth token) haciendo que Codebuild use una imagen Docker específica para ejecutar la construcción del proyecto.
Para este propósito, podrías crear un nuevo proyecto de Codebuild o cambiar el entorno de uno existente para configurar la imagen Docker.
La imagen Docker que podrías usar es https://github.com/carlospolop/docker-mitm. Esta es una imagen Docker muy básica que configurará las variables de entorno https_proxy
, http_proxy
y SSL_CERT_FILE
. Esto te permitirá interceptar la mayor parte del tráfico del host indicado en https_proxy
y http_proxy
y confiar en el CERT SSL indicado en SSL_CERT_FILE
.
Crear y subir tu propia imagen Docker MitM
Sigue las instrucciones del repositorio para configurar la dirección IP de tu proxy y configurar tu certificado SSL y construir la imagen Docker.
NO CONFIGURES
http_proxy
para no interceptar solicitudes al endpoint de metadatos.Podrías usar
ngrok
comongrok tcp 4444
para configurar el proxy a tu host.Una vez que tengas la imagen Docker construida, súbela a un repositorio público (Dockerhub, ECR...)
Configurar el entorno
Crea un nuevo proyecto de Codebuild o modifica el entorno de uno existente.
Configura el proyecto para usar la imagen Docker generada previamente.
Configurar el proxy MitM en tu host
Como se indica en el repositorio de Github, podrías usar algo como:
La versión de mitmproxy utilizada fue 9.0.1, se informó que con la versión 10 esto podría no funcionar.
Ejecuta la build y captura las credenciales
Puedes ver el token en el encabezado Authorization:
Esto también se podría hacer desde la aws cli con algo como
Via HTTP protocol
Esta vulnerabilidad fue corregida por AWS en algún momento de la semana del 20 de febrero de 2023 (creo que el viernes). Así que un atacante ya no puede abusar de ella :)
Un atacante con permisos elevados en un CodeBuild podría filtrar el token de Github/Bitbucket configurado o, si los permisos se configuraron a través de OAuth, el token OAuth temporal utilizado para acceder al código.
Un atacante podría agregar las variables de entorno http_proxy y https_proxy al proyecto de CodeBuild apuntando a su máquina (por ejemplo
http://5.tcp.eu.ngrok.io:14972
).
Luego, cambiar la URL del repositorio de github para usar HTTP en lugar de HTTPS, por ejemplo: **http://**github.com/carlospolop-forks/TestActions
Luego, ejecutar el ejemplo básico de https://github.com/synchronizing/mitm en el puerto señalado por las variables proxy (http_proxy y https_proxy)
Finalmente, haz clic en Build the project, las credenciales serán enviadas en texto claro (base64) al puerto mitm:
Ahora un atacante podrá usar el token desde su máquina, listar todos los privilegios que tiene y (ab)usar más fácilmente que usando el servicio CodeBuild directamente.
Last updated