GitHub Actions переводит кэш в режим только для чтения для ненадежных триггеров, закрывая опасную уязвимость

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

GitHub Actions переводит кэш в режим только для чтения для ненадежных триггеров, закрывая опасную уязвимость. Фото: из архива компании

Это нововведение реализует принцип минимальных привилегий и, что самое главное, предотвращает распространенные пути повышения привилегий через отравление кэша, когда злоумышленники могли внедрять вредоносный код в доверенные рабочие процессы, такие как push или schedule.

Ранее служба Actions выдавала токены кэша для чтения и записи для каждого события рабочего процесса, включая опасные триггеры, такие как pull_request_target, issue_comment и каскады запросов на слияние workflow_run, что позволяло внешнему субъекту через внедрение скриптов записывать данные в кэш ветки по умолчанию. Теперь GitHub выдает токен кэша только для чтения, когда инициирующее событие является ненадежным, то есть его может запустить кто-то кроме участников проекта, и контекст выполнения рабочего процесса с областью действия кэша определяется с помощью общего SHA-хеша ветки по умолчанию.

Наиболее распространенные триггеры рабочих процессов, которые записывают данные в кэш ветки по умолчанию, включая push, schedule, workflow_dispatch, repository_dispatch, delete, registry_package и page_build, а также любой триггер, использующий область действия, отличную от ветки по умолчанию, например pull_request и release, сохраняют полное кэширование на чтение и запись, так что легитимные сценарии не пострадают.

Однако это изменение приводит к регрессии кэширования для небольшого набора ненадежных рабочих процессов, которые записывают данные в кэш из контекста default-branch-SHA, и при ограничении записи actions/cache теперь просто логирует предупреждение в журнале выполнения, а задание продолжается без сохранения.

Чтобы сохранить преимущества кэширования в этих рабочих процессах, потребуется отдельный рабочий процесс, запускаемый событием с доступом к кэшу на чтение и запись, например, push, который будет выполнять сохранение кэша, позволяя последующим рабочим процессам с доступом только для чтения восстанавливать и использовать его.

Это обновление, которое будет применено как к github.com, так и к GitHub с использованием Data Residency, является прямым ответом на реальные атаки, включая нашумевший инцидент с компрометацией Ultralytics, где злоумышленники через pull_request_target отравили кэш pip и получили контроль над публикацией в PyPI, а также на многочисленные исследования, документирующие, как кэш может быть использован для эскалации привилегий.

Actions переводит кэш в режим только для чтения для ненадежных триггеров, закрывая опасную уязвимость. Фото: СС0

Это нововведение реализует принцип минимальных привилегий и, что самое главное, предотвращает распространенные пути повышения привилегий через отравление кэша, когда злоумышленники могли внедрять вредоносный код в доверенные рабочие процессы, такие как push или schedule.

Ранее служба Actions выдавала токены кэша для чтения и записи для каждого события рабочего процесса, включая опасные триггеры, такие как pull_request_target, issue_comment и каскады запросов на слияние workflow_run, что позволяло внешнему субъекту через внедрение скриптов записывать данные в кэш ветки по умолчанию. Теперь GitHub выдает токен кэша только для чтения, когда инициирующее событие является ненадежным, то есть его может запустить кто-то кроме участников проекта, и контекст выполнения рабочего процесса с областью действия кэша определяется с помощью общего SHA-хеша ветки по умолчанию.

Наиболее распространенные триггеры рабочих процессов, которые записывают данные в кэш ветки по умолчанию, включая push, schedule, workflow_dispatch, repository_dispatch, delete, registry_package и page_build, а также любой триггер, использующий область действия, отличную от ветки по умолчанию, например pull_request и release, сохраняют полное кэширование на чтение и запись, так что легитимные сценарии не пострадают.

Однако это изменение приводит к регрессии кэширования для небольшого набора ненадежных рабочих процессов, которые записывают данные в кэш из контекста default-branch-SHA, и при ограничении записи actions/cache теперь просто логирует предупреждение в журнале выполнения, а задание продолжается без сохранения.

Чтобы сохранить преимущества кэширования в этих рабочих процессах, потребуется отдельный рабочий процесс, запускаемый событием с доступом к кэшу на чтение и запись, например, push, который будет выполнять сохранение кэша, позволяя последующим рабочим процессам с доступом только для чтения восстанавливать и использовать его.

Это обновление, которое будет применено как к github.com, так и к GitHub с использованием Data Residency, является прямым ответом на реальные атаки, включая нашумевший инцидент с компрометацией Ultralytics, где злоумышленники через pull_request_target отравили кэш pip и получили контроль над публикацией в PyPI, а также на многочисленные исследования, документирующие, как кэш может быть использован для эскалации привилегий.

Упомянутый сервис
GitHub Сервис для хостинга кода, хранения IT-проектов и их совместной разработки.
Сервис для хостинга кода, хранения IT-проектов и их совместной разработки.

Актуальное

NASA и Red Hat создают автономного ИИ-врача для астронавтов: система CMO-DA работает без связи с Землёй
Alibaba ввела полный запрет на использование Claude на фоне обвинений в шпионаже и краже технологий
Контакты Outlook на iOS станут общесистемными: интеграция с Телефоном, Сообщениями и Siri запланирована на январь 2027 года
Ещё…

Популярные теги