zizmor показал, почему парсеры CI критичны для безопасности

Тестирование и исправление zizmor раскрывает слабости GitHub Actions и важность точного анализа CI для защиты секретов и артефактов.

2026-06-02 GIGATAP Team #security
#GitHub Actions#Supply Chain Security#Open Source Security

Проблема не только в плохих workflow#

Trail of Bits три месяца работала над укреплением zizmor, статического анализатора GitHub Actions. Фокус был узкий, но критичный: может ли инструмент правильно парсить YAML, используемый реальными проектами.

GitHub Actions — ядро инфраструктуры open-source. Слабый workflow может раскрыть секреты, выполнить код злоумышленника или опубликовать скомпрометированные артефакты. Пример марта 2026 с aquasecurity/trivy-action показывает, что злоумышленники использовали поведение CI для кражи секретов и внедрения бэкдоров.

Статический анализатор полезен только если он корректно читает workflow. Сбои, неверная интерпретация YAML или неправильные локаторы создают слепые зоны для мейнтейнеров.

Trail of Bits исправила несколько таких ошибок в zizmor. Триггером стал YAML anchors в GitHub Actions (сентябрь 2025), позволяющий определять значение один раз и повторно использовать через алиасы. Это снижает дублирование, но усложняет анализ: часть workflow может зависеть от определения в другом месте файла.

Что тестировалось#

Была собрана реальная тестовая база. Через BigQuery GitHub dataset выбрали 10,000 популярных репозиториев (2022–2025), отфильтровали 6,612 с GitHub Actions и скачали все workflow файлы — всего 41,253 YAML.

zizmor падал на 45 workflow — небольшой процент, но критичный для безопасности. Каждое падение — потенциальная слепая зона.

Только 43 workflow использовали anchors (~0,1%). Некоторые из них — ключевые open-source проекты. GitHub Actions теперь поддерживает anchors, и их использование может расти.

Выделялись два паттерна: повторное использование шагов между job (Bitcoin Core CI) и закрепление action через SHA для последующего reuse. Оба требуют корректного разрешения нелокального YAML.

Ошибки с anchors#

Обнаружено четыре бага:

  1. Алиасы внутри списков обрабатывались некорректно. Zizmor трактовал содержимое как развернутое, что могло вызвать падение или неверные локаторы.
  2. Префиксы anchors попадали в значения в flow sequences, что ломало шаги.
  3. Дублированные anchors вызывали панику — YAML допускает переопределение, Zizmor предполагал уникальность.
  4. Скалярные алиасы ломали один путь аудита из-за лишнего уровня индирекции.

Эти баги — не эксплуатационные, а парсерные. Статический анализ требует точной модели языка. Trail of Bits исправила их, добавила интеграционные тесты и обновила документацию.

Другие проблемы корпуса#

Корпус выявил баги вне anchors:

  • Edge-case десериализации: числа вместо строк, float вместо int, строки вместо mapping. Zizmor отвергал весь workflow.
  • Вычислитель выражений GitHub Actions: проверен и согласован с официальными тестами.
  • Некоторые падения связаны с upstream зависимостями; были созданы issues и pull requests.

20 issues и 15 PR закрыли проект.

Значение для CI-безопасности#

Zizmor стал лучше анализировать workflows. GitHub Actions — не просто конфигурация, а план исполнения с доступом к секретам, токенам, сборкам, публикациям. Неправильный анализ = слепые зоны = риски supply-chain.

YAML полон сюрпризов: anchors, aliases, implicit typing, дубли, flow sequences и platform-specific особенности создают разрыв между человеческим восприятием и инструментом.

Для мейнтейнеров: anchors не опасны сами по себе, но сложные YAML повышают стоимость проверки. Используя anchors для сокращения дублирования, убедитесь, что линтеры и сканеры их корректно обрабатывают.

Для авторов инструментов метод важнее: соберите реальные данные, запустите анализатор, проанализируйте сбои, превратите их в тесты. Синтетика необходима, но недостаточна.

Что проверить#

  • Запустите zizmor или аналогичный анализатор на активных workflow, особенно для релизов и публикаций.
  • Следите за падениями и ошибками парсинга; не игнорируйте их.
  • Если используются YAML anchors или aliases, убедитесь, что инструменты их поддерживают.
  • Предпочитайте закрепленные action references и проверяйте паттерны reuse.
  • Внимательно проверяйте workflows с выражениями, где данные PR, issues или пользовательский ввод влияют на shell команды или привилегированные шаги.

Парсер CI — часть периметра безопасности.