Инструменты и эксплойтыКритический

Как предотвратить атаки внедрения в GitHub Actions: Руководство по обнаружению и защите

3 мин чтенияИсточник: GitHub Blog - Security
Bar chart showing OWASP Top 10 vulnerabilities detected by CodeQL in 2024, highlighting injection attacks as the most common risk

Узнайте, как защитить репозитории GitHub от атак внедрения в рабочие процессы (workflow injections), используя встроенные инструменты, безопасные практики и автоматическое сканирование.

Как предотвратить атаки внедрения в GitHub Actions

Атаки внедрения в рабочие процессы GitHub Actions входят в число наиболее распространённых уязвимостей в репозиториях GitHub, согласно отчёту GitHub’s 2024 Octoverse. Эти атаки эксплуатируют ненадёжные входные данные в рабочих процессах (workflows), позволяя злоумышленникам выполнять вредоносные команды с правами уровня workflow. Специалисты по безопасности могут снизить эти риски с помощью встроенных инструментов GitHub, безопасных практик кодирования и автоматического сканирования.

Технические детали атак внедрения в workflow

Атаки внедрения в GitHub Actions происходят, когда злоумышленник отправляет вредоносные входные данные — например, название issue или имя ветки — которые впоследствии выполняются рабочим процессом. Уязвимость возникает из-за синтаксиса ${{}}, который расширяет ненадёжные входные данные во время предобработки, потенциально изменяя поведение workflow. Например:

- name: print title
  run: echo "${{ github.event.issue.title }}"

Злоумышленник может создать название issue, например `touch pwned.txt`, которое выполнится как команда при запуске workflow. Поскольку рабочие процессы часто наследуют повышенные права, это может привести к несанкционированному доступу или утечке данных.

Основные векторы атак

  • Расширение ненадёжных входных данных: Прямое использование ${{}} в командах run.
  • Повышение привилегий: Рабочие процессы с избыточными правами (например, доступ на запись или раскрытие секретов).
  • Триггер pull_request_target: Обходит стандартные ограничения безопасности, предоставляя форкам PR доступ к секретам и правам на запись.

Анализ последствий

Успешные атаки внедрения в workflow могут привести к:

  • Выполнению произвольного кода: Вредоносные команды выполняются с правами workflow.
  • Утечкам данных: Раскрытие секретов репозитория или конфиденциальных файлов.
  • Компрометации репозитория: Несанкционированные изменения кода или CI/CD-конвейеров.

Риск распространяется не только на ветку main — злоумышленники могут атаковать любую публично доступную ветку с уязвимыми workflow.

Стратегии защиты

1. Использование переменных окружения для ненадёжных входных данных

Избегайте прямого расширения ненадёжных входных данных в командах run. Вместо этого передавайте данные через переменные окружения:

- name: print title
  env:
    TITLE: ${{ github.event.issue.title }}
  run: echo "$TITLE"

Хотя это не санитизирует входные данные, такой подход ограничивает поверхность атаки, предотвращая внедрение команд.

2. Принцип минимальных привилегий

Ограничивайте права workflow с помощью ключа permissions для GITHUB_TOKEN:

permissions:
  contents: read
  issues: write

По умолчанию предоставляйте доступ только на чтение, если права на запись не требуются явно.

3. Избегайте использования pull_request_target

Используйте pull_request вместо pull_request_target, чтобы блокировать форкам PR доступ к секретам или правам на запись. Если использование pull_request_target неизбежно, проводите аудит workflow на предмет рисков внедрения и ограничивайте права.

4. Сканирование workflow с помощью CodeQL

CodeQL от GitHub теперь поддерживает автоматическое сканирование рабочих процессов GitHub Actions. Включите его следующим образом:

  • Стандартная настройка: Автоматически сканирует защищённые ветки.
  • Расширенная настройка: Добавьте actions в список целевых языков в конфигурации CodeQL.

Трэкинг заражённых данных (taint tracking) в CodeQL выявляет потоки ненадёжных данных, обнаруживая скрытые риски внедрения.

Рекомендации

  • Сканируйте все ветки: Уязвимости в feature-ветках могут быть эксплуатированы, даже если main защищена.
  • Сочетайте инструменты с ручной проверкой: Ни один инструмент не эффективен на 100% — поддерживайте мышление, ориентированное на безопасность.
  • Обучайте команды: Делитесь четырёхчастной серией GitHub по защите workflow.

Следующие шаги

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

Дополнительные сведения см. в документации GitHub по безопасности workflow.

Поделиться

TwitterLinkedIn