Zum Inhalt springen

GitHub Actions Validator · CI/CD

Erkennen Sie Workflow-Fehler und Sicherheitslücken, bevor Sie pushen.

Fügen Sie einen GitHub Actions Workflow ein und erhalten Sie dessen YAML-Fehler plus die Sicherheitsfehlkonfigurationen, die gewöhnliche Linter überspringen — sofort, in Ihrem Browser. Ohne Installation, ohne Anmeldung.

Läuft in Ihrem Browser Keine Anmeldung Sicherheitsorientiert Aktualisiert am 19.07.2026

GitHub Actions Workflow Validator Playground

.github/workflows/ci.yml

Runs entirely in your browser — nothing is uploaded.

Tip: press Esc to release keyboard focus from the editor.

Results

Load an example or paste a workflow, then validate to see YAML errors and security checks here.

Die Lücke

Syntax ist der einfache Teil.

actionlint meistert die Workflow-Syntax — Ausdruckstypisierung, Job-Abhängigkeiten, sogar shellcheck auf Ihren run-Blöcken. Verwenden Sie es weiter. Aber ein Workflow kann vollkommen gültiges YAML sein und trotzdem einem Angreifer Ihre Secrets übergeben.

Die gefährlichen Fehler sind Sicherheitsfehler: nicht vertrauenswürdigen Fork-Code unter pull_request_target auszuführen, von Angreifern kontrollierten Text in eine Shell zu interpolieren, eine Drittanbieter-Action über einen Tag einzubinden, den ihr Autor unbemerkt verschieben kann, oder einem Job ein write-all-Token zu gewähren, der nur lesen muss. Das sind die Muster hinter realen Supply-Chain-Vorfällen — siehe GitHubs Security-Hardening-Leitfaden und das Pwn-Request-Writeup.

Dieser Validator prüft beides — das YAML und die Sicherheitsfehlkonfigurationen — sodass Sie einen GitHub Actions Workflow vor dem Push validieren können, ohne etwas zu installieren und ohne dass etwas hochgeladen wird.

Sehen Sie die vollständige Liste in den Sicherheitsprüfungen, oder probieren Sie das Live-Playground oben aus.

Die Pipeline

So funktioniert es.

Fünf deterministische Schritte laufen bei jeder Validierung von Anfang bis Ende durch — jedes Mal komplett in Ihrem Browser-Tab.

  1. Das YAML parsen.

    Ihr Workflow wird mit einem YAML-Reader geparst — Syntaxfehler, falsche Einrückung und strukturelle Probleme werden mit der Zeile gemeldet, die den Fehler verursacht hat.

  2. Den Workflow abbilden.

    Trigger, Jobs, Berechtigungen und jeder Schritt werden in ein Modell eingelesen, damit der Analyzer weiß, was wann und mit welchem Token läuft.

  3. Die Prüfungen ausführen.

    Jede Sicherheitsregel durchläuft das Modell — auf der Suche nach riskanten Trigger-+-Checkout-Kombinationen, nicht vertrauenswürdigen Ausdrücken in run-Blöcken, veränderbaren Action-Pins und zu weit gefassten Berechtigungen.

  4. Nach Schweregrad sortieren.

    Befunde werden als hoch, mittel oder niedrig eingestuft, sodass die Pwn-Request- und Injection-Risiken nach oben rücken, noch vor Stil-Kleinigkeiten.

  5. Die Lösung zeigen.

    Jeder Befund verknüpft die genaue Stelle mit einer konkreten Behebung — dem sicheren Trigger, dem env-Variablen-Muster, dem gepinnten SHA, der eingegrenzten Berechtigung.

Sicherheitsprüfungen

Die 4 Prüfungen, auf die es ankommt.

Über die YAML-Gültigkeit hinaus sucht der Analyzer nach den Fehlkonfigurationen, die zu durchgesickerten Secrets und kompromittierten Pipelines führen. Jede der folgenden zeigt das riskante Muster und die Lösung.

pull_request_target + checkout (Pwn-Request)

Schweregrad High

Ein pull_request_target-Workflow läuft mit den Secrets des Basis-Repos und einem Lese-/Schreib-Token, kann aber aus jedem beliebigen Fork ausgelöst werden. Das Auschecken und Ausführen des PR-Heads führt nicht vertrauenswürdigen Code mit Ihren Secrets aus.

Riskant

.github/workflows/ci.yml
# DANGEROUS — runs fork code with base-repo secrets
on: pull_request_target
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - run: npm ci && npm run build   # attacker's code, your token

Behoben

.github/workflows/ci.yml
# SAFE — untrusted code runs with no secrets
on: pull_request          # not pull_request_target
permissions:
  contents: read
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4   # checks out the PR safely
      - run: npm ci && npm run build

Script Injection über ${{ github.* }}

Schweregrad High

Das Interpolieren eines von Angreifern kontrollierbaren Werts — eines PR-Titels, Branch-Namens oder Issue-Texts — direkt in einen run-Block ermöglicht es diesem Wert, aus der Zeichenkette auszubrechen und als Shell-Befehle ausgeführt zu werden.

Riskant

step
# DANGEROUS — title is substituted into the shell verbatim
- run: echo "Title: ${{ github.event.pull_request.title }}"
  # a title of  a"; rm -rf ~ #  runs as a command

Behoben

step
# SAFE — pass through env, quote, treat as data
- env:
    TITLE: ${{ github.event.pull_request.title }}
  run: echo "Title: $TITLE"

Ungepinnte Drittanbieter-Actions

Schweregrad Medium

Eine Tag- oder Branch-Referenz (@v4, @main) ist veränderbar — der Maintainer der Action oder jeder, der dessen Konto kompromittiert, kann sie auf neuen Code verschieben, der dann in Ihrer Pipeline mit Ihrem Token läuft.

Riskant

step
# RISKY — mutable references can change under you
- uses: some-org/deploy-action@v2
- uses: another-org/setup@main

Behoben

step
# SAFE — pin to an immutable full commit SHA
- uses: some-org/deploy-action@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0  # v2.3.1
- uses: another-org/setup@0f1e2d3c4b5a69788796a5b4c3d2e1f00112233  # main @ 2024-05

Zu weit gefasste GITHUB_TOKEN-Berechtigungen

Schweregrad Medium

permissions: write-all (oder ein weggelassener permissions-Block bei einem permissiven Standard) gibt jedem Schritt ein Token, das Code pushen, Pakete veröffentlichen und Issues bearbeiten kann — weit mehr, als die meisten Jobs benötigen.

Riskant

.github/workflows/ci.yml
# RISKY — every job gets a fully privileged token
permissions: write-all
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: ./run-tests.sh

Behoben

.github/workflows/ci.yml
# SAFE — least privilege, scoped to what's needed
permissions:
  contents: read
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: ./run-tests.sh

Berechtigungen können pro Job oder für den gesamten Workflow eingegrenzt werden — siehe GitHubs Berechtigungsreferenz. Pipe-to-Shell- und Secrets-in-Pull-Request-Erkennung laufen ebenfalls bereits heute, weiteres folgt in Kürze.

Statische Analyse

Eine Anmerkung zum Umfang: Dies ist ein statischer Analyzer — er liest Ihren Workflow, ohne ihn auszuführen, sodass er die oben genannten signalstarken Fehlkonfigurations-Muster und die YAML-Fehler erfasst, aber keine Jobs ausführt und nicht die Live-Inhalte referenzierter Actions auflöst. Behandeln Sie ein sauberes Ergebnis als starke Sicherheit vor dem Push, und kombinieren Sie es dennoch mit actionlint, Branch-Schutz und Least-Privilege-Standards auf Organisationsebene.

FAQ

Fragen, beantwortet.

Tippen Sie auf eine Frage, um die Antwort aufzuklappen.

Zwei Dinge gleichzeitig. Erstens parst er das YAML Ihres Workflows und meldet Syntaxfehler, falsche Einrückung und strukturelle Fehler — also die Dinge, die einen Lauf scheitern lassen, bevor auch nur ein einziger Schritt ausgeführt wird. Zweitens, und das ist wichtiger, führt er eine Reihe von Prüfungen auf Sicherheitsfehlkonfigurationen durch, die gewöhnliche Linter überspringen: das „Pwn-Request“-Muster aus pull_request_target + checkout, Script Injection über nicht vertrauenswürdige ${{ github.* }}-Ausdrücke, Drittanbieter-Actions, die auf einen veränderbaren Tag statt auf einen Commit-SHA gepinnt sind, sowie zu weit gefasste Berechtigungen wie write-all. Sie erhalten Fehler und gefährliche Muster in einem einzigen Durchlauf.

Nein. Der Validator läuft zu 100 % clientseitig. Das YAML Ihres Workflows wird in Ihrem Browser-Tab geparst und analysiert — nichts wird auf einen Server hochgeladen, und es gibt kein Konto und keine Anmeldung. Sie können bedenkenlos interne oder proprietäre Workflows einfügen, auch solche mit Secret-Namen und privaten Runner-Labels.

actionlint ist hervorragend bei Syntax, Ausdruckstypisierung und der shellcheck-Integration — und Sie sollten es weiterhin verwenden. Aber die Fehler, die Repositories tatsächlich kompromittieren, sind Sicherheitsfehler: nicht vertrauenswürdigen Code mit einem privilegierten Token auszuführen, von Angreifern kontrollierten Text direkt in eine Shell zu interpolieren oder eine Drittanbieter-Action über einen Tag einzubinden, den ihr Autor unbemerkt verschieben kann. Dieses Tool konzentriert sich auf genau diese Sicherheitsfehlkonfigurationen, validiert zudem das YAML und benötigt keinerlei Installation.

Ein durch pull_request_target ausgelöster Workflow läuft im Kontext des Basis-Repositorys — mit Zugriff auf dessen Secrets und einem Lese-/Schreib-GITHUB_TOKEN — kann aber durch einen Pull Request aus jedem beliebigen Fork ausgelöst werden. Wenn dieser Workflow zusätzlich den PR-Head auscheckt (actions/checkout mit der PR-Ref) und ihn dann baut, testet oder Skripte daraus ausführt, wird der Code aus dem Fork eines Angreifers mit Ihren Secrets ausgeführt. Das ist der klassische „Pwn-Request“. Der Validator markiert pull_request_target immer dann, wenn es mit einem Checkout von nicht vertrauenswürdigem PR-Code kombiniert wird.

Wenn Sie einen Ausdruck wie ${{ github.event.issue.title }} oder ${{ github.head_ref }} direkt in einen run:-Shell-Block einbetten, ersetzt GitHub den rohen, von Angreifern kontrollierbaren Wert in Ihrem Skript, bevor die Shell ihn parst. Ein Titel von a"; rm -rf / # wird ausführbar. Die Lösung besteht darin, nicht vertrauenswürdige Werte über eine env:-Variable zu übergeben und sie als "$TITLE" zu referenzieren, sodass die Shell sie als Daten und niemals als Code behandelt. Der Validator markiert nicht vertrauenswürdige github-Kontextausdrücke, die innerhalb von run-Schritten verwendet werden.

Eine Referenz wie actions/checkout@v4 oder some-org/action@main zeigt auf einen Tag oder Branch, den der Maintainer der Action — oder ein Angreifer, der dessen Konto kompromittiert — jederzeit auf neuen Code verschieben kann, und dieser Code läuft dann in Ihrer Pipeline mit Ihrem Token. Das Pinnen auf einen vollständigen 40-stelligen Commit-SHA (uses: actions/checkout@<sha>) macht die Version unveränderlich. Der Validator markiert Drittanbieter-Actions, die auf einen veränderbaren Tag oder Branch gepinnt sind.

Nein. Dieser Validator ist ein unabhängiges Community-Tool und steht in keiner Verbindung zu GitHub, Inc., wird von diesem nicht unterstützt oder gesponsert. „GitHub“ und „GitHub Actions“ werden hier ausschließlich beschreibend verwendet, um das Workflow-Format zu kennzeichnen, das das Tool prüft.

Fügen Sie das YAML des Workflows in einen browserbasierten Validator ein, um Fehler vor dem Commit abzufangen — ohne Installation und ohne Push. Dieses Tool führt den vollständigen Prüfsatz (YAML-Struktur plus Sicherheitsfehlkonfigurationen) vollständig in Ihrem Browser aus, sodass Sie sofortiges Feedback zu Syntaxfehlern, fehlendem runs-on, falschen Trigger-Namen und gefährlichen Mustern wie ungepinnten Actions oder Script Injection erhalten, bevor der Workflow GitHub jemals erreicht.

Häufige Probleme sind ein fehlendes runs-on bei einem Job, ein Schritt, der sowohl uses als auch run angibt, eine needs-Referenz, die auf einen nicht existierenden Job zeigt, ein ungültiger Trigger-Event-Name und falsche YAML-Einrückung. Der Validator erkennt jedes dieser Probleme als strukturellen Fehler mit der Zeilennummer, an der es auftritt, sodass Sie sie beheben können, bevor der Lauf auf GitHub scheitert.

Die meisten statischen Checker — actionlint, zizmor, action-validator — benötigen eine CLI oder eine Rust-/Go-Toolchain. Dieser Validator ist kostenlos, erfordert keine Installation und keine Anmeldung und läuft vollständig in Ihrem Browser. Er prüft sowohl die YAML-Gültigkeit als auch die Sicherheitsfehlkonfigurationen (ungepinnte Actions, Template Injection, gefährliche Trigger, zu weit gefasste Token-Berechtigungen), die auch die CLI-Tools abdecken, ganz ohne lokale Einrichtung.

More free, private DevOps tools.

Der GitHub Actions Validator ist eines von vielen Tools in OpsCanopy — einem wachsenden Schirm browserbasierter Validatoren, Konverter und Tester, die niemals einen Server berühren.

Neu bei Docker?  Zum Docker-Guide →

29 kostenlose Tools, jedes einzelne offlinefähig — opscanopy.com funktioniert ohne Registrierung, und nichts wird hochgeladen.

Verwandte Tools: der CVE-Ignore-Konverter und AlertLint, der Loki-Regel-Tester. Durchsuchen Sie das vollständige Tools-Verzeichnis.

Nicht verbunden mit, unterstützt von oder gesponsert durch GitHub, Inc. GitHub und GitHub Actions sind Marken von GitHub, Inc., hier ausschließlich beschreibend verwendet, um das Workflow-Format zu kennzeichnen, das dieses Tool prüft.