Mapped every skill to NIST CSF 2.0 subcategory IDs (GV/ID/PR/DE/RS/RC functions)
based on subdomain and content analysis. Restores 11 skills corrupted during
prior rebase, re-enriching with ATLAS, D3FEND, NIST AI RMF, and CSF 2.0 fields.
All 754 skills now carry structured mappings for all 5 security frameworks:
- MITRE ATT&CK (in tags)
- MITRE ATLAS v5.5 (atlas_techniques)
- MITRE D3FEND v1.3 (d3fend_techniques)
- NIST AI RMF 1.0 (nist_ai_rmf)
- NIST CSF 2.0 (nist_csf)
Scans GitHub Actions workflows and CI/CD pipeline configurations for supply chain attack vectors including unpinned actions, script injection via expressions, dependency confusion, and secrets exposure. Uses PyGithub and YAML parsing for automated audit. Use when hardening CI/CD pipelines or investigating compromised build systems.
cybersecurity
security-operations
detecting
supply
chain
attacks
1.0
mahipal
Apache-2.0
AML.T0010
AML.T0104
GOVERN-5.2
MAP-1.6
MANAGE-2.2
DE.CM-01
RS.MA-01
GV.OV-01
DE.AE-02
Detecting Supply Chain Attacks in CI/CD
When to Use
When investigating security incidents that require detecting supply chain attacks in ci cd
When building detection rules or threat hunting queries for this domain
When SOC analysts need structured procedures for this analysis type
When validating security monitoring coverage for related attack techniques
Prerequisites
Familiarity with security operations concepts and tools
Access to a test or lab environment for safe execution
Python 3.8+ with required dependencies installed
Appropriate authorization for any testing activities
Instructions
Scan CI/CD workflow files for supply chain risks by parsing GitHub Actions YAML,
checking for unpinned dependencies, script injection vectors, and secrets exposure.
importyamlfrompathlibimportPathforwfinPath(".github/workflows").glob("*.yml"):withopen(wf)asf:workflow=yaml.safe_load(f)forjob_name,jobinworkflow.get("jobs",{}).items():forstepinjob.get("steps",[]):uses=step.get("uses","")ifusesand"@"inusesandnotuses.split("@")[1].startswith("sha"):print(f"Unpinned action: {uses} in {wf.name}")
Key supply chain risks:
Unpinned GitHub Actions (using @main instead of SHA)
Script injection via ${{ github.event }} expressions
Overly permissive GITHUB_TOKEN permissions
Third-party actions with write access to repo
Dependency confusion via public/private package name collision
Examples
# Check for script injection in run stepsforstepinjob.get("steps",[]):run_cmd=step.get("run","")if"${{"inrun_cmdand"github.event"inrun_cmd:print(f"Script injection risk: {run_cmd[:80]}")