gha-security-review
GitHub Actions security review for workflow exploitation vulnerabilities.
Skill by getsentryOfficial
Install
Works with Claude Code. Read the repository before you give any tool access to your data.
npx agentmarket install skill/getsentry-gha-security-review
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: devops, security, productivity, security-scanning, ci-cd
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/gha-security-review
Tools it pre-approves 5
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
ReadGrepGlobBashTask
What's inside
- Skill name
gha-security-review- Description
- GitHub Actions security review for workflow exploitation vulnerabilities. Use when asked to "review GitHub Actions", "audit workflows", "check CI security", "GHA security", "workflow security review", or review .github/workflows/ for pwn requests, expression injection, credential theft, and supply chain attacks. Exploitation-focused with concrete PoC scenarios.
- License
- Apache-2.0
- Allowed tools
- Read, Grep, Glob, Bash, Task
- Instructions
- 188 lines in SKILL.md · view on GitHub
Before installing
- Pre-approves any shell command
Files (10)
- SKILL.md
- ai-prompt-injection-via-ci.md · references/
- comment-triggered-commands.md · references/
- credential-escalation.md · references/
- expression-injection.md · references/
- permissions-and-secrets.md · references/
- pwn-request.md · references/
- real-world-attacks.md · references/
- runner-infrastructure.md · references/
- supply-chain.md · references/
SKILL.md (first lines)
<!--
Attack patterns and real-world examples sourced from the HackerBot Claw campaign analysis
by StepSecurity (2025): https://www.stepsecurity.io/blog/hackerbot-claw-github-actions-exploitation
-->
# GitHub Actions Security Review
Find exploitable vulnerabilities in GitHub Actions workflows. Every finding MUST include a concrete exploitation scenario — if you can't build the attack, don't report it.
This skill encodes attack patterns from real GitHub Actions exploits — not generic CI/CD theory.
## Scope
Review the workflows provided (file, diff, or repo). Research the codebase as needed to trace complete attack paths before reporting.
### Files to Review
- `.github/workflows/*.yml` — all workflow definitions
- `action.yml` / `action.yaml` — composite actions in the repo
- `.github/actions/*/action.yml` — local reusable actions
- Config files loaded by workflows: `CLAUDE.md`, `AGENTS.md`, `Makefile`, shell scripts under `.github/`
### Out of Scope
- Workflows in other repositories (only note the dependency)
- GitHub App installation permissions (note if relevant)
## Threat Model
Only report vulnerabilities exploitable by an **external attacker** — someone **without** write access to the repository. The attacker can open PRs from forks, create issues, and post comments. They cannot push to branches, trigger `workflow_dispatch`, or trigger manual workflows.
**Do not flag** vulnerabilities that require write access to exploit:
- `workflow_dispatch` input injection — requires write access to trigger
- Expression injection in `push`-only workflows on protected branches
- `workflow_call` input injection where all callers are internal
- Secrets in `workflow_dispatch`/`schedule`-only workflows
## Confidence
Report only **HIGH** and **MEDIUM** confidence findings. Do not report theoretical issues.
| Confidence | Criteria | Action |
|---|---|---|
| **HIGH** | Traced the full attack path, confirmed exploitable | Report with exploitation scenario and fix |
| **MEDIUM** | Attack path partially confirmed, uncertain link | Report as needs verification |
| **LOW** | Theoretical or mitigated elsewhere | Do not report |
For each HIGH finding, provide all five elements:
1. **Entry point** — How does the attacker get in? (fork PR, issue comment, branch name, etc.)
2. **Payload** — What does the attacker send? (actual code/YAML/input)
3. **Execution mechanism** — How does the payload run? (expression expansion, checkout + script, etc.)
4. **Impact** — What does the attacker gain? (token theft, code execution, repo write access)
5. **PoC sketch** — Concrete steps an attacker would follow
If you cannot construct all five, report as MEDIUM (needs verification).
---
## Step 1: Classify Triggers and Load References
For each workflow, identify triggers and load the appropriate reference:
| Trigger / Pattern | Load Reference |
|---|---|
| `pull_request_target` | `references/pwn-request.md` |
| `issue_comment` with command parsing | `references/comment-triggered-commands.md` |
| `${{ }}` in `run:` blocks | `references/expression-injection.md` |
| PATs / deploy keys / elevated credentials | `references/credential-escalation.md` |
| Checkout PR code + config file loading | `references/ai-prompt-injection-via-ci.md` |
| Third-party actions (especially unpinned) | `references/supply-chain.md` |
| `permissions:` block or secrets usage | `references/permissions-and-secrets.md` |
| Self-hosted runners, cache/artifact usage | `references/runner-infrastructure.md` |
| Any confirmed finding | `references/real-world-attacks.md` |
Load references selectively — only what's relevant to the triggers found.
## Step 2: Check for Vulnerability Classes
### Check 1: Pwn Request
Does the workflow use `pull_request_target` AND check out fork code?
- Look for `actions/checkout` with `ref:` pointing to PR head
- Look for local actions (`./.github/actions/`) that would come from the fork
- Check if any `run:` step executes code from the checked-out PR
### Check 2: Expression Injection
Are `${{ }}` expressions used inside `run:` blocks in externally-triggerable workflows?
- Map every `${{ }}` expression in every `run:` step
- Confirm the value is attacker-controlled (PR title, branch name, comment body — not numeric IDs, SHAs, or repository names)
- Confirm the expression is in a `run:` block, not `if:`, `with:`, or job-level `env:`
### Check 3: Unauthorized Command Execution
Does an `issue_comment`-triggered workflow execute commands without authorization?
- Is there an `author_association` check?
- Can any GitHub user trigger the command?
- Does the command handler also use injectable expressions?
### Check 4: Credential Escalation
Are elevated credentials (PATs, deploy keys) accessible to untrusted code?
- What's the blast radius of each secret?
- Could a compromised workflow steal long-lived tokens?
### Check 5: Config File Poisoning
Does the workflow load configuration from PR-supplied files?
- AI agent instructions: `CLAUDE.md`, `AGENTS.md`, `.cursorrules`
- Build configuration: `Makefile`, shell scripts
### Check 6: Supply Chain
Are **third-party** actions securely pinned to full SHAs?
- Pin third-party / external actions and reusable workflows only
- Do **not** flag first-party `actions/*` or `github/*` on version tags
- Do **not** flag same-repo / vendored (`./.github/actions/...`) as supply-chain pinning issues
- Only report when the job has secrets, OIDC, write token, release, deploy, package, or signing power — unprivileged read-only CI is not a findingFrom getsentry/skills, Apache-2.0.
More from getsentry/skills
- 0.827score
triage-frontend-issues
getsentryOfficial
Triage new issues in the Sentry `javascript` project by archiving non-actionable noise.
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.827score
django-access-review
getsentryOfficial
Django access control and IDOR security review.
SkillAFreshness: A★ 1.1KClaude Code - 0.827score
secret-serialization
getsentryOfficial
Finds secrets, tokens, passwords, and API keys that can leak through generated serialization: Python dataclass repr and asdict, attrs, pydantic model_dump…
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.827score
security-model
getsentryOfficial
Define, review, or update SECURITY_MODEL.md files that tell security review tools a repository's threat model, trust boundaries, invariants, reportable…
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.827score
skill-scanner
getsentryOfficial
Scan agent skills for security issues.
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.827score
security-review
getsentryOfficial
Security code review for vulnerabilities.
SkillAFreshness: A★ 1.1KClaude Code - 0.821score
django-perf-review
getsentryOfficial
Django performance code review.
SkillAFreshness: A★ 1.1KClaude Code - 0.818score
pr-screenshots
getsentryOfficial
Capture screenshots of the Sentry UI in a web browser, lay them out in a pull request description as before/after tables, and upload them with `gh --attach`.
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.817score
claude-settings-audit
getsentryOfficial
Analyze a repository to generate recommended Claude Code settings.json permissions.
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.777score
iterate-pr
getsentryOfficial
Iterate on a PR until actionable CI passes and high/medium review feedback is addressed.
SkillBFreshness: B★ 1.1KClaude Code +9 - 0.724score
prompt-optimizer
getsentryOfficial
Creates, optimizes, and iteratively refines agent prompts, system prompts, developer prompts, and reusable prompt templates.
SkillCFreshness: C★ 1.1KClaude Code +9 - 0.724score
gh-review-requests
getsentryOfficial
Fetch unread GitHub notifications for open PRs where review is requested from a specified team or opened by a team member.
SkillCFreshness: C★ 1.1KClaude Code +9
Compare and alternatives
Featured in
Signals
- Stars
- 1,083
- Forks
- 60
- Open issues
- 7
- Last commit (this folder)
- Sep 29, 2026 (28 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/getsentry/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Same skill elsewhere
Copies of this SKILL.md published by others; search shows only one of them.
More from getsentry
- 0.827score
secret-serialization
getsentryOfficial
Finds secrets, tokens, passwords, and API keys that can leak through generated serialization: Python dataclass repr and asdict, attrs, pydantic model_dump…
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.827score
security-model
getsentryOfficial
Define, review, or update SECURITY_MODEL.md files that tell security review tools a repository's threat model, trust boundaries, invariants, reportable…
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.827score
security-review
getsentryOfficial
Security code review for vulnerabilities.
SkillAFreshness: A★ 1.1KClaude Code - 0.827score
skill-scanner
getsentryOfficial
Scan agent skills for security issues.
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.827score
triage-frontend-issues
getsentryOfficial
Triage new issues in the Sentry `javascript` project by archiving non-actionable noise.
SkillAFreshness: A★ 1.1KClaude Code +9 - 0.827score
django-access-review
getsentryOfficial
Django access control and IDOR security review.
SkillAFreshness: A★ 1.1KClaude Code
Cite this page
gha-security-review skill. Agent Mart. https://agentmart.dev/skills/getsentry-gha-security-review (last updated 2026-10-24)