Gh Actions - Context Script Injections
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:
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