Individual skill
github-actions-injection
GitHub Actions ${{ }} expression injection — attacker-controlled context (issue/PR title, body, branch name, commit message) substituted into run: steps, unsafe pull_request_target + PR-head checkout, GITHUB_TOKEN scope abuse, artifact/cache poisoning, action tag-vs-SHA pinning.
packages/decepticon/decepticon/skills/standard/exploit/cicd/github-actions-injection/SKILL.md
Source commit df879550544d36b6b1e69062f05adae28537adf2
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Not checked yet
- Last checked
- Nov 8, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 6,566
- Repository last updated
- Nov 7, 2026
- License
- Apache-2.0
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- agent Repository topic
- ai Repository topic
- cybersecurity Repository topic
- hacking Repository topic
- langchain Repository topic
- langgraph Repository topic
- llm Repository topic
- generative-ai Repository topic
- pentesting Repository topic
- pentest Repository topic
- ci-cd,-github-actions,-expression-injection,-script-injection Declared skill tag
- engineering Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
Read excerpt
# GitHub Actions Expression Injection
`${{ <expr> }}` is interpolated by the runner **before** the shell sees the line. If the expression sources from untrusted `github.event.*`, the substituted text is parsed by `bash` (or `pwsh`) as code — full RCE on the runner, with whatever token + secrets the job exposes.
## Untrusted context — the sinks
These fields are attacker-controllable in fork PRs, issues, comments, branches:
| Context | Source | Notes |
|---|---|---|
| `github.event.issue.title` / `.body` | issue create / edit | any logged-in user |
| `github.event.pull_request.title` / `.body` | PR create / edit | any forker |
| `github.event.pull_request.head.ref` | branch name on fork | `;` `$()` `\`` are valid Git branch chars |
| `github.event.comment.body` | issue/PR comment | broad reach |