# Detecting Supply Chain Attacks In CI CD

> 扫描 GitHub Actions 工作流和 CI/CD 流水线配置，检测供应链攻击（Supply Chain Attack）向量， 包括未固定的 Action 版本、通过表达式的脚本注入、依赖混淆（Dependency Confusion）和密钥泄露。 使用 PyGithub 和 YAML 解析进行自动化审计。适用于加固 CI/CD 流水线或调查被攻击的构建系统。

- Skill: `killvxk/detecting-supply-chain-attacks-in-ci-cd` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/detecting-supply-chain-attacks-in-ci-cd`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/detecting-supply-chain-attacks-in-ci-cd/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/detecting-supply-chain-attacks-in-ci-cd

---


# 检测 CI/CD 中的供应链攻击

## 使用说明

通过解析 GitHub Actions YAML 文件，检查未固定的依赖、脚本注入向量和密钥泄露，扫描 CI/CD 工作流文件中的供应链风险。

```python
import yaml
from pathlib import Path

for wf in Path(".github/workflows").glob("*.yml"):
    with open(wf) as f:
        workflow = yaml.safe_load(f)
    for job_name, job in workflow.get("jobs", {}).items():
        for step in job.get("steps", []):
            uses = step.get("uses", "")
            if uses and "@" in uses and not uses.split("@")[1].startswith("sha"):
                print(f"Unpinned action: {uses} in {wf.name}")
```

关键供应链风险：
1. 未固定到 SHA 的 GitHub Actions（使用 @main 而非提交哈希）
2. 通过 `${{ github.event }}` 表达式的脚本注入
3. GITHUB_TOKEN 权限过于宽松
4. 对仓库有写入权限的第三方 Action
5. 通过公有/私有包名冲突的依赖混淆

## 示例

```python
# 检查 run 步骤中的脚本注入
for step in job.get("steps", []):
    run_cmd = step.get("run", "")
    if "${{" in run_cmd and "github.event" in run_cmd:
        print(f"Script injection risk: {run_cmd[:80]}")
```

