Gh Actions - Context Script Injections
Informazioni di base
Si noti che ci sono determinati contesti di github i cui valori sono controllati dall'utente che crea la PR. Se l'azione di github utilizza quei dati per eseguire qualcosa, potrebbe portare a una esecuzione di codice arbitraria. Questi contesti terminano tipicamente con body
, default_branch
, email
, head_ref
, label
, message
, name
, page_name
,ref
e title
. Ad esempio (elenco da questo articolo):
github.event.comment.body
github.event.issue.body
github.event.issue.title
github.head_ref
github.pull_request.*
github.*.*.authors.name
github.*.*.authors.email
Si noti che ci sono fonti meno ovvie di input potenzialmente non attendibili, come i nomi dei branch e gli indirizzi email, che possono essere piuttosto flessibili in termini di contenuto consentito. Ad esempio, zzz";echo${IFS}"hello";#
sarebbe un nome di branch valido e potrebbe essere un possibile vettore di attacco per un repository target.
Esempio di un attacco di iniezione di script
Un attacco di iniezione di script può verificarsi direttamente all'interno dello script inline di un flusso di lavoro. Nell'esempio seguente, un'azione utilizza un'espressione per testare la validità del titolo di una pull request, ma aggiunge anche il rischio di iniezione di script:
Prima dell'esecuzione dello script shell, le espressioni all'interno di ${{ }}
vengono valutate e quindi sostituite con i valori risultanti, il che può renderlo vulnerabile all'iniezione di comandi shell.
Per iniettare comandi in questo workflow, l'attaccante potrebbe creare una pull request con un titolo di a"; ls $GITHUB_WORKSPACE"
In questo esempio, il carattere "
viene utilizzato per interrompere l'istruzione title=
"${{ github.event.pull_request.title }}"
, consentendo l'esecuzione del comando ls
sul runner.
Last updated