Gh Actions - Context Script Injections

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Informations de base

Notez qu'il existe certains contextes github dont les valeurs sont contrôlées par l'utilisateur créant la PR. Si l'action github utilise ces données pour exécuter quelque chose, cela pourrait conduire à une exécution de code arbitraire. Ces contextes se terminent généralement par body, default_branch, email, head_ref, label, message, name, page_name,ref, et title. Par exemple (liste issue de ce 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

Notez qu'il existe des sources moins évidentes d'entrées potentiellement non fiables, telles que les noms de branches et les adresses e-mail, qui peuvent être assez flexibles en termes de contenu autorisé. Par exemple, zzz";echo${IFS}"hello";# serait un nom de branche valide et pourrait être un vecteur d'attaque possible pour un dépôt cible.

Exemple d'une attaque par injection de script

Une attaque par injection de script peut se produire directement dans le script en ligne d'un workflow. Dans l'exemple suivant, une action utilise une expression pour tester la validité d'un titre de pull request, mais ajoute également le risque d'injection de 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

Avant l'exécution du script shell, les expressions à l'intérieur de ${{ }} sont évaluées puis remplacées par les valeurs résultantes, ce qui peut le rendre vulnérable à l'injection de commandes shell.

Pour injecter des commandes dans ce workflow, l'attaquant pourrait créer une pull request avec un titre de a"; ls $GITHUB_WORKSPACE"

Dans cet exemple, le caractère " est utilisé pour interrompre l'instruction title="${{ github.event.pull_request.title }}", permettant ainsi à la commande ls d'être exécutée sur le runner.

Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres moyens de soutenir HackTricks :

Dernière mise à jour