GitHub Actions Security Checker (Free)

Find the workflow line that lets a stranger's pull request run code with your secrets, and the one-line fix.

GitHub Actions Security Checker (Free) product illustration

What it does

An offline checker for .github/workflows/*.yml that finds the mistakes behind most GitHub Actions breaches: script injection from issue and PR titles, pull_request_target "pwn requests", actions pinned to movable tags, over-broad GITHUB_TOKEN permissions, plain-text secrets, curl | bash, and self-hosted runners exposed to forks. Every finding comes with the line number and a concrete fix.

  • Python 3.9+, standard library only (it ships its own small YAML reader). No account, no network, nothing uploaded.
  • Output: readable text, JSON, GitHub annotations (--format github) or SARIF for code scanning (--format sarif).
  • Exit code 1 when there are errors, so it can fail CI. --fail-on warning makes it stricter.
  • Includes a Claude Code skill (skills/github-actions-security) so Claude runs the check and fixes the workflow for you.

What you get

The screenshot is real output from the kit’s own commands. Tested from a fresh download of this exact zip: ./run_tests.sh ran 15 tests OK on Python 3.13 and 3.10.

Real terminal output from GitHub Actions Security Checker: demo and passing tests

Use

python3 -m ghasec                      # checks ./.github/workflows
python3 -m ghasec path/to/repo --min-level warning
python3 -m ghasec .github/workflows/release.yml --format json

Run ./demo.sh to see it on the example workflows and ./run_tests.sh for the 15 tests.

Rules

IdFindsLevel
GHA001${{ github.event.issue.title }}, PR title/body, branch names, comments, commit messages pasted into run: or github-script (inputs: warning)error
GHA002pull_request_target / workflow_run that checks out the PR's head; pull_request_target and issue_comment triggerserror / warning / note
GHA003uses: without a full commit SHA (branch = error, third-party tag = warning, actions/* tag = note); docker images without a digesterror-note
GHA004no permissions: block, or write-allwarning / error
GHA005actions/checkout without persist-credentials: falsenote
GHA006secrets: inheritwarning
GHA007self-hosted runners on workflows that pull requests can trigger (--private to relax)warning
GHA008curl ...bashwarning
GHA009tokens and keys written in plain text, echoing secretserror / warning
GHA010ACTIONS_ALLOW_UNSECURE_COMMANDS: trueerror
GHA012jobs without timeout-minutesnote

In CI

- run: python3 -m ghasec --format github --min-level warning

Copy the ghasec/ folder into your repo (or a tools repo) first. Ignore a rule with --ignore GHA005,GHA012.

Honest limits

  • It reads workflow files; it doesn't see repository settings (default token permissions, fork approval rules) or the code inside the actions you call.
  • Pattern-based: it can miss injection that goes through intermediate outputs, and it can flag a value you've already validated. Read each finding.
  • The YAML reader covers what workflows use; anchors and aliases are reported as parse errors.
  • Not affiliated with GitHub.

Format and license

Zip, 18 KB, v1.0, 14 files. Free to use, modify and share for any purpose, including commercial work, as long as this notice stays in copies. Not affiliated with or endorsed by GitHub.

FAQ

Is it free?
Yes, enter your email for the newsletter or download directly.
Does it upload my workflows?
No, it reads the files on your computer and never connects to the network.
How is it different from zizmor or actionlint?
Those are excellent; this one is a single Python folder with no install, explains each fix in plain words and ships a Claude Code skill that applies the fixes.
How do I get the files?
Click Download free. The zip downloads straight away: no checkout, no account.
Do I have to sign up for the newsletter?
No. The form is optional and the download works without it.

Get GitHub Actions Security Checker (Free)

Free GitHub Actions security checker: script injection, pull_request_target, unpinned actions, token permissions and secrets, with fixes. Offline, SARIF.

Pairs well with

DownloadFree

Free Schema Markup Validator

Free schema markup validator: check JSON-LD against Google's rich result rules, spot retired FAQ and HowTo markup, bad prices and dates. Files, folders or URLs.

View Free Schema Markup Validator
DownloadFree

Postgres Health Check (Free)

Free read-only Postgres health check: invalid indexes, wraparound, sequences near limit, missing FK indexes, duplicate indexes and more. Markdown or JSON.

View Postgres Health Check (Free)

Related

1 email a week: new x402 + MCP tools and free kits.

Short weekly digest of new x402 + MCP tools and free kits, including the MCP OAuth Checker. The download above works without signing up. No spam, unsubscribe any time.