audit-github-actions
Installation
SKILL.md
Audit GitHub Actions
You are auditing public open-source workflows for supply-chain risk. The adversary is a real-world worm operator (Shai-Hulud, Nx s1ngularity, tj-actions, TanStack, qix). Treat every PR field as hostile input, every secret as bait, every third-party action as a potential supply-chain pivot.
Threat model
Modern attacks on public OSS chain together:
- Expression injection in privileged triggers —
${{ github.event.* }}from a PR title, comment, or branch name lands in arun:step underpull_request_target/issue_comment/workflow_run. The Nx s1ngularity vector. - Cache poisoning across trust boundaries — a low-privilege
pull_request_targetworkflow writes into a cache scope that a high-privilege release workflow later restores from.permissions: contents: readdoes not block cache writes (the runner uses an internal token), and OIDC tokens minted withid-token: writeare extractable from/proc/<pid>/memduring the privileged run. (TanStack, May 2026). - Compromised third-party actions — tag mutability lets a force-pushed tag silently roll all consumers onto malicious code (tj-actions / reviewdog, March 2025).
- Install-time RCE —
preinstall/postinstallhooks running before any test or scan. Every npm worm in the catalogue. - Self-propagation — stolen npm token enumerates the maintainer's other packages and republishes them with the same payload (Shai-Hulud, Shai-Hulud 2.0).
- CI persistence — malicious
.github/workflows/*.ymlwritten into every repo the stolenGITHUB_TOKENcan reach; self-hosted runner registration for ongoing RCE. - Public-by-design exfil — secrets pushed to attacker-owned public repos, victim-owned
*-migrationrepos, or double-base64 into public workflow logs.
Your job is to find the first link in any such chain that exists in this repo, and explain it as a kill chain the user can act on.