github-actions-hardening
github-actions-hardening — официальный skill GitHub для проверки безопасности workflow-файлов в .github/workflows/*.yml. Его фокус — угрозы именно GitHub Actions, которые часто не видны обычному линтеру: интерполяция недоверенных данных в shell, опасные привилегированные триггеры, чрезмерные права GITHUB_TOKEN, изменяемые ссылки на actions, утечки секретов, инъекции через GITHUB_ENV и GITHUB_OUTPUT, OIDC и риски self-hosted runner. Навык предназначен для аудита, hardening и безопасного написания workflow, а не для общего сканирования исходного кода. Проверка начинается с карты триггеров и уровня доверия. Исходник различает push и pull_request, включая fork с read-only токеном без секретов, и привилегированные pull_request_target, workflow_run, issue_comment и issues, которые работают в контексте базового репозитория. Затем навык требует пройти каждый run-блок, script в actions/github-script и входы custom action, найти выражения [object Object], определить, может ли значение контролироваться внешним участником, и проверить безопасный способ передачи через env. Особое внимание уделяется заголовкам и телам issue и pull request, имени ветки, комментарию, review и сообщениям commit. Отдельная ветка проверяет, не checkout-ит ли привилегированный workflow код fork или pull request, после чего не запускает ли его сборку, тесты, npm install или другие команды. Исходник квалифицирует такую комбинацию как критическую, потому что она связывает недоверенный код с токеном и секретами базового репозитория. Для разрешений рекомендуется deny-all или contents: read на верхнем уровне и минимальные права на уровне job; write-all и ненужные write-области считаются проблемой. Для сторонних actions проверяется полная 40-символьная SHA-ссылка вместо mutable tag или branch, а рядом рекомендуется сохранять читаемый комментарий с версией. Навык также проверяет секреты и результаты: отсутствие вывода секретов в логи, отсутствие set -x рядом с секретами, запрет передачи секретов недоверенному коду, безопасную запись многострочных недоверенных данных и persist-credentials: false там, где после checkout выполняется недоверенный код. Для OIDC рассматривается короткоживущая схема вместо долгоживущих секретов, а для self-hosted runner — риск выполнения внешнего кода. Результат должен содержать сводку по severity, группировку по типу проблемы, точную строку и место, понятный риск и исправление до/после для CRITICAL и HIGH. Ограничение простое: skill анализирует workflow и связанные границы доверия; он не применяет изменения автоматически и не заменяет проверку конкретного репозитория.
Для чего подходит
- Ревью GitHub Actions workflow
- Проверка прав GITHUB_TOKEN
- Закрепление версий actions
Установка
Сначала прочитайте SKILL.md и scripts в исходном репозитории. Затем выполните команду в каталоге проекта:
npx skills add https://github.com/github/awesome-copilot/tree/main/skills/github-actions-hardening