Gh Actions - Context Script Injections

Wsparcie dla HackTricks

Podstawowe informacje

Zauważ, że istnieją pewne konteksty githuba, których wartości są kontrolowane przez użytkownika tworzącego PR. Jeśli akcja githuba używa tych danych do wykonania czegokolwiek, może to prowadzić do wykonania dowolnego kodu. Te konteksty zazwyczaj kończą się na body, default_branch, email, head_ref, label, message, name, page_name, ref i title. Na przykład (lista z tego opisu):

  • github.event.comment.body

  • github.event.issue.body

  • github.event.issue.title

  • github.head_ref

  • github.pull_request.*

  • github.*.*.authors.name

  • github.*.*.authors.email

Zauważ, że istnieją mniej oczywiste źródła potencjalnie nieufnych danych wejściowych, takie jak nazwy gałęzi i adresy e-mail, które mogą być dość elastyczne pod względem dozwolonej zawartości. Na przykład zzz";echo${IFS}"hello";# byłoby ważną nazwą gałęzi i mogłoby być możliwym wektorem ataku dla docelowego repozytorium.

Przykład ataku wstrzykiwania skryptu

Atak wstrzykiwania skryptu może wystąpić bezpośrednio w skrypcie inline workflow. W poniższym przykładzie akcja używa wyrażenia do testowania ważności tytułu pull requestu, ale także dodaje ryzyko wstrzykiwania skryptu:

- 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

Przed uruchomieniem skryptu powłoki, wyrażenia wewnątrz ${{ }}oceniane i następnie zastępowane wynikowymi wartościami, co może sprawić, że będzie wrażliwe na wstrzykiwanie poleceń powłoki.

Aby wstrzyknąć polecenia do tego przepływu pracy, atakujący mógłby stworzyć pull request z tytułem a"; ls $GITHUB_WORKSPACE"

W tym przykładzie, znak " jest używany do przerwania instrukcji title="${{ github.event.pull_request.title }}", co pozwala na wykonanie polecenia ls na runnerze.

Support HackTricks

Last updated