Gh Actions - Context Script Injections

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

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:

- 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

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.

Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated