InfrastructureEnhanced with input5 checks
GitHub Actions Supply Chain Scanner
Analyze CI workflows for script injection, untrusted-code execution, exposed self-hosted runners, and unpinned third-party actions.
How this scan works
- Parses every workflow as YAML and analyzes it job by job, rather than pattern-matching the file as text
- Script injection: flags attacker-controlled context (github.event.issue.title, .pull_request.title, .comment.body, github.head_ref and the rest of GitHub’s documented untrusted set) interpolated into a run: block, an actions/github-script body, or an env: value that a shell later expands
- Untrusted-code execution: pull_request_target or workflow_run jobs that check out the pull-request head without a scoped permissions: block — read per job, so one scoped job no longer clears the finding for the whole file
- Self-hosted runners on a public repository, where any stranger’s pull request can execute on your hardware
- Every third-party action checked for a full commit-SHA pin vs a mutable @tag/@branch (the tj-actions/changed-files vector)
- Workflows that aren’t valid YAML still get text-level injection and runner checks, reported against the file instead of a job
