Запись архива

GitHub ввёл cache-mode для Actions: разграничение прав на кеш на уровне джобов и защита от cache poisoning

GitHub запустил cache-mode — параметр, позволяющий задавать права на чтение и запись кеша для каждого воркфлоу или отдельного задания. Это снижает риски cache poisoning в CI/CD, особенно при работе с внешними участниками и в AI-сборках, где кеширование зависимостей критично.

Редактор GitHub Actions с параметром cache-mode, установленным в значение read для отдельного задания в воркфлоу
Редактор GitHub Actions с параметром cache-mode, установленным в значение read для отдельного задания в воркфлоу
Изображение из исходного материала

GitHub объявил о всеобщей доступности параметра cache-mode для сервиса GitHub Actions. Настройка, ставшая доступной на всех тарифных планах с 10 сентября 2026 года, позволяет разработчикам применять принцип минимально необходимых привилегий к хранилищу кеша — на уровне как всего воркфлоу, так и отдельного задания (job).

До сих пор управление доступом к кешу в Actions было фактически бинарным: либо кеш доступен, либо нет. В сложных пайплайнах, где участвуют внешние контрибьюторы или выполняются задачи с разным уровнем доверия, это создавало риски: недоверенный шаг мог перезаписать кеш с зависимостями, что открывало путь для атак на цепочку поставок через подмену артефактов сборки.

Как работает иерархия прав cache-mode

Параметр cache-mode встраивается непосредственно в синтаксис YAML-конфигурации воркфлоу. Разработчик может задать одно из четырёх значений — read, write, read-write или write-only — как на уровне всего файла, так и для конкретного job. При этом настройка задания (job-level) полностью переопределяет глобальную настройку воркфлоу.

Важный архитектурный нюанс: cache-mode жёстко контролируется сервисом кеширования GitHub при использовании переиспользуемых воркфлоу (reusable workflows). Вызываемый дочерний воркфлоу не может получить больше прав на доступ к кешу, чем ему делегировал родительский процесс. Это предотвращает сценарии, при которых сторонний шаблон или экшен мог бы неявно расширить свои привилегии.

Защита от cache poisoning на низкодоверенных триггерах

Отдельное внимание в релизе уделено событиям с низким уровнем доверия — в первую очередь pull_request_target. Для таких триггеров Actions исторически устанавливает безопасный режим кеша только для чтения. Если разработчик явно объявляет cache-mode: write или cache-mode: write-only для такого события, платформа выводит предупреждающую аннотацию в интерфейсе GitHub Actions.

В официальном блоге GitHub подчёркивают: «Явное объявление write или write-only для этих событий может повысить риск cache poisoning, поэтому Actions добавляет предупреждающую аннотацию, когда объявленный режим предоставляет доступ на запись». Если параметр cache-mode не указан, воркфлоу продолжают использовать существующие безопасные настройки по умолчанию.

Практическое значение для AI/ML-пайплайнов

Для разработчиков, использующих CI/CD для сборки моделей машинного обучения, cache-mode даёт инструмент для разделения процессов, которые должны читать кеш, и тех, которые могут его записывать. Типичный сценарий: этап загрузки предобученных весов (например, из Hugging Face Hub или локального кеша pip) может работать в режиме read, а этап сборки артефактов обучения — только в режиме write.

В контексте публичных репозиториев, где внешние участники могут отправлять pull request, настройка только на чтение для недоверенных воркфлоу защищает базовые образы и кешированные зависимости от подмены на модифицированные бинарные файлы. Это особенно критично для сборок, включающих CUDA-зависимости, LLM-инструменты и большие кеши компиляции.

Что остаётся за кадром

GitHub не раскрывает, планируется ли поддержка cache-mode для self-hosted runners на системах с прокси или кеширующими серверами. В текущей документации указано, что изменения вступают в силу немедленно на серверах github.com для всех тарифных планов без необходимости обновления локальных агентов.

Для проектов, использующих экшены третьих сторон с доступом к кешу, рекомендуется провести аудит конфигурации перед включением режимов записи в контексте публичных пулл-реквестов. Разработчикам стоит проверить, не объявлен ли cache-mode: write в reusable workflows, которые вызываются из недоверенных контекстов.

Дополнительные источники

Официальный блог GitHub: https://github.blog/changelog/2026-09-10-control-github-actions-cache-access-with-cache-mode

Документация по синтаксису cache-mode: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#cache-mode

Обсуждение в GitHub Community: https://github.com/orgs/community/discussions

Источники