Осознание риска внедрения скриптов
При создании рабочих процессов, [пользовательских действий и составных действий](/actions/tutorials/create-actions/create-a-composite-action) следует всегда учитывать, может ли код выполнять ненадежные входные данные от злоумышленников. Это может произойти, когда злоумышленник добавляет в контекст вредоносные команды и сценарии. При запуске рабочего процесса эти строки могут быть интерпретированы как код, который затем выполняется в средстве выполнения тестов.
Злоумышленники могут добавлять собственное вредоносное содержимое в githubконтекст, что следует рассматривать как потенциально ненадежные входные данные. Эти контексты обычно заканчиваются на body, default_branch, email, head_ref, label, message, name, page_name,ref и title. Например, github.event.issue.title или github.event.pull_request.body.
Следует убедиться, что эти значения не передаются непосредственно в рабочие процессы, действия, вызовы API или куда-либо еще, где они могут быть интерпретированы как исполняемый код. Применяя ту же оборонительную позицию программирования, которую вы будете использовать для любого другого кода привилегированного приложения, вы можете помочь в обеспечении безопасности использования GitHub Actions. Сведения о некоторых шагах, которые может предпринять злоумышленник, см. в разделе Справочник по безопасному использованию.
Кроме того, существуют и другие менее очевидные источники потенциально ненадежных входных данных, такие как имена ветвей и адреса электронной почты, которые могут быть весьма гибкими с точки зрения разрешенного содержания. Например, zzz";echo${IFS}"hello";# будет допустимым именем ветви и возможным вектором атаки на целевой репозиторий.
В следующих разделах показано, как снизить риск внедрения скриптов.
Пример атаки путем внедрения сценария
Атака путем внедрения сценария может произойти непосредственно во встроенном сценарии рабочего процесса. В следующем примере действие использует выражение для проверки достоверности заголовка запроса на вытягивание, но также добавляет риск внедрения сценария:
- name: Check PR title
run: |
title="${{ github.event.pull_request.title }}"
if [[ $title =~ ^octocat ]]; then
echo "PR title starts with 'octocat'"
exit 0
else
echo "PR title did not start with 'octocat'"
exit 1
fi
Этот пример уязвим для внедрения сценария, так как команда run выполняется во временном сценарии оболочки в средстве выполнения тестов. Перед запуском скрипта оболочки вычисляются выражения внутри ${{ }} , а затем заменяются результируемыми значениями, что может сделать его уязвимым для внедрения команд оболочки.
Чтобы внедрить команды в этот рабочий процесс, злоумышленник может создать запрос на вытягивание с заголовком a"; ls $GITHUB_WORKSPACE":

В этом примере " символ используется для прерыванияtitle="${{ github.event.pull_request.title }}"инструкции, что позволяет ls выполнять команду в средстве выполнения. Вы увидите выходные данные команды ls в журнале:
Run title="a"; ls $GITHUB_WORKSPACE""
README.md
code.yml
example.js
Рекомендации по обеспечению безопасности средств выполнения см. в разделе Справочник по безопасному использованию.