Skip to content

UnbearableDev/github-actions-audit

Repository files navigation

GitHub Actions Security Audit

MCP server that audits .github/workflows/*.yml files for supply-chain risks. Catches script injection, leaked tokens, unpinned actions, broad permissions, and pull_request_target foot-guns — the patterns behind several 2024–2025 supply-chain incidents.

Built by Unbearable TechTips. Pay-per-event — only billed when a tool is actually called.


Available on

  • Apify Actor Store — primary, metered usage (PPE)
  • MCPize — pending submission
  • MCP.so — pending submission
  • PulseMCP — pending submission
  • Smithery — pending submission
  • Glama — pending submission

Newsletter: Unbearable TechTips Weekly · All Actors: github.com/UnbearableDev

What it does

Point any MCP-capable client (Claude Desktop, Cursor, n8n, Make, Zapier, custom agents) at this server, hand it a workflow YAML, and get back structured findings with:

  • Severity — high / medium / low / info
  • Affected job and step — exact location of the problem
  • Description — why it matters, with the actual attack vector
  • Remediation — what to do about it
  • Fix snippet — YAML you can paste directly

Tools

Tool Purpose
audit_workflow(workflow_yaml? | workflow_url?, min_severity='low') Run all checks
check_secrets(...) Secret-leakage paths only
check_permissions(...) GITHUB_TOKEN scope issues only
check_action_pinning(...) Action version-pinning only
check_runner_security(...) Self-hosted runner + script injection
check_workflow_config(...) Timeout / config hygiene
list_checks(category?) Browse the catalog

Provide exactly one of workflow_yaml (paste the content) or workflow_url (HTTPS URL — typically a GitHub raw URL to a specific workflow file).

Check catalog (v1: 13 checks)

ID Category Severity Title
GHA-001 secrets high Secret interpolated directly into run: script
GHA-002 secrets high Secret printed via echo / set-output
GHA-003 secrets medium Secret used in if: condition
GHA-004 secrets high Hardcoded credential pattern in env:
GHA-010 permissions high permissions: write-all granted
GHA-011 permissions medium No top-level permissions: (inherits broad default)
GHA-013 permissions high pull_request_target + checkout PR head = PWNing pattern
GHA-020 action_pinning high Third-party action pinned to mutable tag
GHA-021 action_pinning high Third-party action pinned to mutable branch
GHA-022 action_pinning medium First-party action not SHA-pinned
GHA-030 runner_security medium Self-hosted runner used on pull_request from forks
GHA-032 runner_security high Script injection via untrusted github.event.* interpolation
GHA-040 workflow_config low No timeout-minutes on job

Pricing

Event USD
Any audit / check_* tool call $0.02
list_checks discovery $0.005

Connecting from Claude Desktop

{
  "mcpServers": {
    "gha-audit": {
      "transport": "streamable-http",
      "url": "https://YOUR-ACTOR-URL.apify.actor/mcp"
    }
  }
}

Sibling MCPs from Unbearable TechTips

What's NOT covered (yet)

  • Reusable workflow auditing (multi-file resolution)
  • CodeQL-grade dataflow tracking
  • Marketplace-listed action reputation scoring

Source / contact

Source: github.com/UnbearableDev/github-actions-audit. Issues + ideas: unbearabledev@gmail.com.

Releases

No releases published

Packages

 
 
 

Contributors