Gh Actions - Context Script Injections

Support HackTricks

Basic Information

Зверніть увагу, що є певні github контексти, значення яких контролюються користувачем, що створює PR. Якщо github action використовує ці дані для виконання чогось, це може призвести до випадкового виконання коду. Ці контексти зазвичай закінчуються на body, default_branch, email, head_ref, label, message, name, page_name,ref, і title. Наприклад (список з цього опису):

  • github.event.comment.body

  • github.event.issue.body

  • github.event.issue.title

  • github.head_ref

  • github.pull_request.*

  • github.*.*.authors.name

  • github.*.*.authors.email

Зверніть увагу, що є менш очевидні джерела потенційно ненадійного вводу, такі як назви гілок і адреси електронної пошти, які можуть бути досить гнучкими щодо їх дозволеного вмісту. Наприклад, zzz";echo${IFS}"hello";# буде дійсною назвою гілки і може бути можливим вектором атаки для цільового репозиторію.

Example of a script injection attack

Атака через ін'єкцію скриптів може статися безпосередньо в інлайн-скрипті робочого процесу. У наступному прикладі, дія використовує вираз для перевірки дійсності заголовка запиту на злиття, але також додає ризик ін'єкції скриптів:

- 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

Перед виконанням shell-скрипта вирази всередині ${{ }} оцінюються і потім замінюються на отримані значення, що може зробити його вразливим до ін'єкцій команд shell.

Щоб ін'єктувати команди в цей робочий процес, зловмисник може створити pull request з заголовком a"; ls $GITHUB_WORKSPACE"

У цьому прикладі символ " використовується для переривання виразу title="${{ github.event.pull_request.title }}", що дозволяє виконати команду ls на runner.

Support HackTricks

Last updated