AWS Codebuild - Token Leakage
Odzyskiwanie Skonfigurowanych Tokenów Github/Bitbucket
Najpierw sprawdź, czy są skonfigurowane jakiekolwiek poświadczenia źródłowe, które możesz wyciec:
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
.
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
jakngrok tcp 4444
, aby ustawić proxy na swoim hoście.Gdy obraz Docker zostanie zbudowany, prześlij go do publicznego repozytorium (Dockerhub, ECR...)
Ustaw środowisko
Utwórz nowy projekt Codebuild lub zmodyfikuj środowisko istniejącego.
Ustaw projekt na użycie wcześniej wygenerowanego obrazu Docker
Ustaw proxy MitM na swoim hoście
Jak wskazano w repozytorium Github, możesz użyć czegoś takiego:
Użyta wersja mitmproxy to 9.0.1, zgłoszono, że z wersją 10 to może nie działać.
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
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)
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.
Last updated