Gh Actions - Context Script Injections
Informazioni di Base
Nota che ci sono certi contesti github i cui valori sono controllati dall'utente che crea la PR. Se l'azione github utilizza quei dati per eseguire qualcosa, potrebbe portare a esecuzione di codice arbitrario. Questi contesti tipicamente terminano con body
, default_branch
, email
, head_ref
, label
, message
, name
, page_name
,ref
, e title
. Ad esempio (elenco da questo writeup):
github.event.comment.body
github.event.issue.body
github.event.issue.title
github.head_ref
github.pull_request.*
github.*.*.authors.name
github.*.*.authors.email
Nota che ci sono fonti meno ovvie di input potenzialmente non fidati, come nomi di branch e indirizzi email, che possono essere abbastanza flessibili in termini di contenuto permesso. Ad esempio, zzz";echo${IFS}"hello";#
sarebbe un nome di branch valido e rappresenterebbe un possibile vettore di attacco per un repository target.
Esempio di attacco di iniezione di script
Un attacco di iniezione di script può verificarsi direttamente all'interno di uno script inline di un workflow. Nel seguente esempio, un'azione utilizza un espressione per testare la validità di un titolo di pull request, ma aggiunge anche il rischio di iniezione di script:
Prima che lo script shell venga eseguito, le espressioni all'interno di ${{ }}
vengono valutate e poi sostituite con i valori risultanti, il che può renderlo vulnerabile all'iniezione di comandi shell.
Per iniettare comandi in questo flusso di lavoro, 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