Gh Actions - Context Script Injections
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 niezaufanego wejścia, 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 poprawną nazwą gałęzi i mogłoby stanowić potencjalny wektor ataku na docelowe repozytorium.
Przykład ataku wstrzykiwania skryptów
Atak wstrzykiwania skryptów może wystąpić bezpośrednio w skrypcie w linii workflow. W poniższym przykładzie akcja używa wyrażenia do sprawdzenia poprawności tytułu pull requestu, ale także naraża na ryzyko wstrzyknięcie skryptu:
Przed uruchomieniem skryptu powłoki, wyrażenia wewnątrz ${{ }}
są oceniane a następnie zastępowane wynikającymi wartościami, co może sprawić, że jest podatny na wstrzyknięcie poleceń powłoki.
Aby wstrzyknąć polecenia do tego workflow, atakujący mógłby utworzyć żądanie pull 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.
Last updated