$npx -y skills add hypnguyen1209/offensive-claude --skill cicd-supply-chainUse when attacking or auditing a CI/CD pipeline or software supply chain — pwn requests, poisoned pipeline execution, compromised/mutable-tag actions, dependency confusion, registry worms, runner backdoors, OIDC trust abuse, SLSA/provenance
| 1 | # CI/CD Pipeline Poisoning & Supply-Chain Attacks |
| 2 | |
| 3 | ## When to Activate |
| 4 | |
| 5 | - Auditing or attacking GitHub Actions / GitLab CI / Jenkins pipelines for code execution |
| 6 | - Hunting `pull_request_target` / `workflow_run` "pwn requests" and Poisoned Pipeline Execution (PPE) |
| 7 | - Assessing compromised third-party Actions, mutable version tags, and Actions cache poisoning |
| 8 | - Dependency confusion, typo/slopsquatting, and malicious package/install-hook payloads |
| 9 | - Self-hosted / non-ephemeral runner abuse and runner backdoors |
| 10 | - CI secret exfiltration and OIDC cloud-role (AWS/GCP/Azure) trust-policy abuse |
| 11 | - Validating SLSA build provenance and signing gates (defense / blue-team validation) |
| 12 | |
| 13 | ## Technique Map |
| 14 | |
| 15 | | Technique | ATT&CK | CWE | Reference | Script | |
| 16 | |-----------|--------|-----|-----------|--------| |
| 17 | | Pwn request (`pull_request_target` checkout of fork head) | T1195.001 | CWE-269 | references/pipeline-poisoning.md | scripts/workflow_auditor.py | |
| 18 | | Script injection (`${{ github.event.* }}` into `run:`) | T1059 | CWE-94 | references/pipeline-poisoning.md | scripts/workflow_auditor.py | |
| 19 | | Direct / Indirect PPE (workflow or build-file modification) | T1195.001 | CWE-913 | references/pipeline-poisoning.md | scripts/workflow_auditor.py | |
| 20 | | GitLab `.gitlab-ci.yml` poisoning / pipeline-as-user (CVE-2024-6678) | T1648 | CWE-863 | references/pipeline-poisoning.md | scripts/workflow_auditor.py | |
| 21 | | Compromised Action via mutable tag (CVE-2025-30066 tj-actions) | T1195.001 | CWE-494 | references/action-dependency-compromise.md | scripts/malicious_action_scanner.py | |
| 22 | | Transitive Action compromise (CVE-2025-30154 reviewdog) | T1195.001 | CWE-1357 | references/action-dependency-compromise.md | scripts/malicious_action_scanner.py | |
| 23 | | Actions cache poisoning (cross-workflow escalation) | T1525 | CWE-349 | references/action-dependency-compromise.md | scripts/malicious_action_scanner.py | |
| 24 | | Dependency confusion (internal name on public registry) | T1195.002 | CWE-427 | references/package-registry-attacks.md | scripts/dependency_confusion.py | |
| 25 | | Typo / slopsquatting + malicious install hook | T1195.002 | CWE-829 | references/package-registry-attacks.md | scripts/dependency_confusion.py | |
| 26 | | Self-replicating registry worm (Shai-Hulud npm) | T1195.002 | CWE-829 | references/package-registry-attacks.md | scripts/malicious_action_scanner.py | |
| 27 | | Self-hosted / non-ephemeral runner abuse & backdoor | T1199 | CWE-668 | references/runner-attacks.md | scripts/runner_recon.sh | |
| 28 | | Jenkins Script Console RCE (`/script`, CVE-2024-23897) | T1648 | CWE-306 | references/runner-attacks.md | scripts/runner_recon.sh | |
| 29 | | CI secret exfiltration (`toJSON(secrets)`, GhostAction) | T1552.004 | CWE-522 | references/secrets-oidc-abuse.md | scripts/oidc_trust_auditor.py | |
| 30 | | OIDC trust-policy abuse (missing/`*` `sub`, wrong org wildcard) | T1078.004 | CWE-1390 | references/secrets-oidc-abuse.md | scripts/oidc_trust_auditor.py | |
| 31 | | Build provenance / signing gate validation (defense) | T1195 | CWE-347 | references/build-integrity-defense.md | scripts/provenance_verify.sh | |
| 32 | |
| 33 | ## Quick Start |
| 34 | |
| 35 | ```bash |
| 36 | # 0. Recon: enumerate workflows, triggers, used actions across an org (read-only token) |
| 37 | gh repo list ORG --limit 1000 --json nameWithOwner -q '.[].nameWithOwner' > repos.txt |
| 38 | python3 scripts/workflow_auditor.py --repos repos.txt --token "$GH_TOKEN" --out findings.json |
| 39 | |
| 40 | # 1. Static audit any cloned repo for pwn-requests + injection sinks (offline, no token) |
| 41 | git clone https://github.com |