Gh Actions - Context Script Injections

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

Beachten Sie, dass es bestimmte GitHub-Kontexte gibt, deren Werte vom Benutzer kontrolliert werden, der die PR erstellt. Wenn die GitHub-Aktion diese Daten zur Ausführung von etwas verwendet, könnte dies zu beliebiger Codeausführung führen. Diese Kontexte enden typischerweise mit body, default_branch, email, head_ref, label, message, name, page_name,ref und title. Zum Beispiel (Liste aus diesem Bericht):

  • github.event.comment.body

  • github.event.issue.body

  • github.event.issue.title

  • github.head_ref

  • github.pull_request.*

  • github.*.*.authors.name

  • github.*.*.authors.email

Beachten Sie, dass es weniger offensichtliche Quellen für potenziell nicht vertrauenswürdige Eingaben gibt, wie z. B. Branch-Namen und E-Mail-Adressen, die in Bezug auf ihren erlaubten Inhalt ziemlich flexibel sein können. Zum Beispiel wäre zzz";echo${IFS}"hello";# ein gültiger Branch-Name und könnte ein mögliches Angriffsvektor für ein Ziel-Repository sein.

Beispiel eines Skripteinschubangriffs

Ein Skripteinschubangriff kann direkt innerhalb des Inline-Skripts eines Workflows auftreten. Im folgenden Beispiel verwendet eine Aktion einen Ausdruck, um die Gültigkeit eines Pull-Request-Titels zu überprüfen, fügt jedoch auch das Risiko eines Skripteinschubs hinzu:

- 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

Bevor das Shell-Skript ausgeführt wird, werden die Ausdrücke innerhalb von ${{ }} ausgewertet und dann durch die resultierenden Werte ersetzt, was es anfällig für Shell-Befehlsinjektion machen kann.

Um Befehle in diesen Workflow einzuspeisen, könnte der Angreifer einen Pull-Request mit dem Titel a"; ls $GITHUB_WORKSPACE" erstellen.

In diesem Beispiel wird das Zeichen " verwendet, um die Anweisung title="${{ github.event.pull_request.title }}" zu unterbrechen, was es dem ls-Befehl ermöglicht, auf dem Runner ausgeführt zu werden.

Last updated