RuView 仓库 claude-flow v3 安全改造技能全解:CVE 修复清单与 secure-by-default 编码模式
本篇技术指南围绕仓库中 .claude/skills/v3-security-overhaul/SKILL.md 定义的 V3 Security Overhaul(v3 安全改造)技能展开,讲解它如何以"技能 + 安全 Agent 编排"的方式,对仓库采用的 claude-flow v3 Agent 编排系统完成从"漏洞修复"到"安全优先开发规范"的完整收口。读者读完将掌握:v3 安全域的三项关键修复(依赖漏洞、弱口令哈希、硬编码凭据)的具体落地写法,Zod 输入校验、路径穿越防护、无 Shell 命令执行三类 secure-by-default 编码模式,以及如何通过 security-architect / security-auditor 等专职 Agent 与安全扫描脚本完成自动化审计与度量。
一、技能定位:它在一个什么样的安全体系里工作
该技能是仓库 .claude/ 工作区中 claude-flow v3 技能(Skill)体系的一员,前导元数据定义了它的触发方式:
name: "V3 Security Overhaul"
description: "Complete security architecture overhaul for claude-flow v3. Addresses critical CVEs (CVE-1, CVE-2, CVE-3) and implements secure-by-default patterns. Use for security-first v3 implementation."
技能(Skill)在这里并不是一个可运行的库,而是一份可被 Agent 加载执行的作战手册:它以 YAML frontmatter 声明名称与适用场景,正文则给出并行任务编排、CVE 修复代码、安全编码范式与成功度量。它作用的运行底座由 .mcp.json 描述——仓库通过 MCP 接入 claude-flow:
{
"mcpServers": {
"claude-flow": {
"command": "npx",
"args": ["-y", "@claude-flow/cli@latest", "mcp", "start"],
"env": {
"CLAUDE_FLOW_MODE": "v3",
"CLAUDE_FLOW_HOOKS_ENABLED": "true",
"CLAUDE_FLOW_TOPOLOGY": "hierarchical-mesh",
"CLAUDE_FLOW_MAX_AGENTS": "15",
"CLAUDE_FLOW_MEMORY_BACKEND": "hybrid"
},
"autoStart": false
}
}
}
可以看到安全改造的运行前提是:MCP 模式下 CLAUDE_FLOW_MODE=v3、hooks 开启、采用 hierarchical-mesh 拓扑。技能文档面向的正是这一 v3 运行时。
二、技能主流程:并行三线并行的安全域编排
SKILL.md 用三段 Task 调用来概括技能的整体编排——三项工作并行执行,分别由不同的专职 Agent 承担:
# Initialize V3 security domain (parallel)
Task("Security architecture", "Design v3 threat model and security boundaries", "v3-security-architect")
Task("CVE remediation", "Fix CVE-1, CVE-2, CVE-3 critical vulnerabilities", "security-auditor")
Task("Security testing", "Implement TDD London School security framework", "test-architect")
| 并行任务 | 交付物 | 承担 Agent |
|---|---|---|
| Security architecture | v3 威胁模型与安全边界设计 | security-architect |
| CVE remediation | 修复 CVE-1/CVE-2/CVE-3 三类高危漏洞 | security-auditor |
| Security testing | 以 TDD London School 方式落地安全测试框架 | test-architect |
需要说明的是,SKILL 正文中的 CVE-1、CVE-2、CVE-3 是技能内部的编号分类(对应三组典型高危问题),而非真实公开 CVE 编号;同工作区内其他文档(如安全架构 Agent)会以 CVE-2024-001 这类写法扩展具体案例(见下文第三节)。
三、三类关键修复(CVE-1 / CVE-2 / CVE-3)逐项落地
CVE-1:脆弱依赖 —— 升级与审计
CVE-1 对应"供应链依赖带病上线"类问题,修复动作分两步:先把核心依赖升级到已修复版本,再以 high 为阈值执行 npm 依赖审计:
npm update @anthropic-ai/claude-code@^2.0.31
npm audit --audit-level high
--audit-level high的含义是:仅当存在high/critical级别漏洞时令命令以非零状态退出,便于 CI 门禁捕获。若团队使用npm audit fix自动修复,应仅用于锁文件内可无损升级的传递依赖,避免破坏主版本约束。- 在 v3 体系中这一环节还会被自动化 Worker 承接:.claude/helpers/security-scanner.sh 中
check_npm_audit()与run_scan()会把审计结论写入.claude-flow/security/audit-status.json;Worker 端cves.tracked字段即维护着["CVE-1", "CVE-2", "CVE-3"]三项目标,并标记"remediated": 3。
CVE-2:弱口令哈希 —— 从 SHA-256 裸盐升级到 bcrypt(12)
CVE-2 的病灶是"手写哈希 + 硬编码盐"。原文档给出前后对照:
// ❌ Old: SHA-256 with hardcoded salt
const hash = crypto.createHash('sha256').update(password + salt).digest('hex');
// ✅ New: bcrypt with 12 rounds
import bcrypt from 'bcrypt';
const hash = await bcrypt.hash(password, 12);
实践要点:
- 旧实现的问题在于 SHA-256 属于快速哈希,GPU 爆破成本极低,且盐被硬编码在代码中,同盐彩虹表可直接复用;
digest('hex')输出也不携带盐信息。 bcrypt.hash(password, 12)中12为 cost factor(轮数对数),内部自动生成随机盐并随密文一并存储,校验时调用bcrypt.compare(password, storedHash)即可,无需自行管理盐。- 对 Node.js 运行时的替代可参考
crypto.scrypt(内置、免额外依赖),但该技能文档选择 bcrypt 并明确以 12 轮为基线。对于登录接口,还应叠加速率限制,避免在线爆破——这一点在 security-auditor 的 OWASP A07/A01 检测模式中有对应覆盖。
CVE-3:硬编码凭据 —— 用 CSPRNG 动态生成
CVE-3 针对代码/配置中写死的 API Key 与口令,修复范式是"运行时生成、绝不入库":
// ✅ Generate secure random credentials
const apiKey = crypto.randomBytes(32).toString('hex');
randomBytes(32)基于操作系统级 CSPRNG,256 位熵足够作为高强度密钥;toString('hex')输出 64 位十六进制字符串。- 与之配套的反向检测在 v3 安全域中是自动化的:
.claude/helpers/security-scanner.sh的scan_secrets()会按password=、api_key=、secret=、token=、private_key等模式在src/与v3/目录做正则扫描并剔除node_modules/.git;security-auditor 还内置了更精细的 Secret 正则库,可识别 AWS AKIA 前缀访问密钥、OpenAIsk-密钥、GitHubghp_Token、JWT、数据库连接串与 PEM 私钥块等,用于在代码审查阶段拦截新凭据落盘。
四、secure-by-default:三类安全编码范式
技能文档将修复动作沉淀为三个可复用的"安全默认值"模式,并逐一给出可直接使用的代码。
模式一:Zod 驱动的输入校验
所有进入 Agent 编排系统的外部数据先过 Schema 白名单校验,拒绝而非容忍非法输入:
import { z } from 'zod';
const TaskSchema = z.object({
taskId: z.string().uuid(),
content: z.string().max(10000),
agentType: z.enum(['security', 'core', 'integration'])
});
taskId必须是合法 UUID(z.string().uuid()),防止在日志与索引中注入任意 ID;content设max(10000)上限,限制提示词/任务内容的体积膨胀,间接缓解资源耗尽类风险;agentType用z.enum([...])把取值收敛到白名单,从源头杜绝"未知 Agent 类型"被投递执行。- 该设计也呼应 security-auditor 中 OWASP A04:2021 Insecure Design 的检测规则——其正则会标记
req.body.xxx周围缺少validate/sanitize/zod之类的代码路径,防止"无输入校验直连下游"。
模式二:路径穿越防护
凡是把用户输入拼接进文件路径的位置,都必须先做归一化再校验前缀归属:
function securePath(userPath: string, allowedPrefix: string): string {
const resolved = path.resolve(allowedPrefix, userPath);
if (!resolved.startsWith(path.resolve(allowedPrefix))) {
throw new SecurityError('Path traversal detected');
}
return resolved;
}
path.resolve(allowedPrefix, userPath)会先把../../etc/passwd这类相对穿越量折叠成绝对路径;随后用startsWith断言结果仍位于授权目录内,从而拦截目录穿越(对应 OWASP A01:2021 中的 Path Traversal 检测模式)。- 使用
startsWith判断前缀时建议携带路径分隔符边界(如path.resolve(prefix) + path.sep)以避免"前缀撞名"误判——该技能给出的示例为教学基线,落地时可在边界上进一步收紧。
模式三:无 Shell 解释的命令执行
用 child_process.execFile 替代 exec/spawn + shell 字符串,从根上消除命令注入面:
import { execFile } from 'child_process';
// ✅ Safe: No shell interpretation
const { stdout } = await execFile('git', [userInput], { shell: false });
- 当
shell: false(默认值)时,参数以数组形式直接交给操作系统,;、|、$()、反引号等元字符不会被 shell 解释,用户输入最多成为普通参数。 - 这正是 v3 威胁模型的直接对应物:security-architect 在 CVE 追踪表中为命令注入类问题给出的安全替代同样是
execFile(cmd, args.map(arg => shellEscape(arg)), ...),并把child_process.exec(、shelljs.exec(、模板字符串拼命令列为待检模式;security-auditor 的 OWASP A03:2021 Injection 正则亦会捕获exec/spawn/execSync直接吞入请求输入的情况。
五、技能背后的专职 Agent 与检测纵深
SKILL 负责"编排与规范",真正的检测/修复能力由 .claude/agents/v3/ 下的专职安全 Agent 文档提供,它们构成安全改造的纵深。以下文件在技能快速启动中被显式或隐式引用:
-
security-architect.md:负责威胁建模与安全架构。其正文定义了 STRIDE 六类威胁(Spoofing / Tampering / Repudiation / Information Disclosure / Denial of Service / Elevation of Privilege)与 DREAD 风险量化评分(
damage + reproducibility + exploitability + affectedUsers + discoverability取均值,>=8判 critical、>=6判 high、>=4判 medium),并提供 Zero-Trust"永不信任、持续验证"的参考实现。同时它维护一份criticalCVEs追踪表,把通用问题映射为带 CVSS 分值与补丁版本的具体案例:CVE-2024-001:经eval/new Function触发的任意代码执行,CVSS 9.8,修复建议为改用vm.runInContext沙箱;CVE-2024-002:经 shell 元字符导致的命令注入,CVSS 9.1,修复建议为execFile显式参数化;CVE-2024-003:配置深合并时的原型污染,CVSS 7.5,修复建议为递归合并时跳过__proto__/constructor/prototype。
-
security-auditor.md:负责漏洞扫描、CVE 检索与合规审计。其正文给出覆盖 OWASP Top 10 (2021) 全部 10 类的检测模式集合(A01 越权到 A10 SSRF),以及依赖审计(
npm audit、Pythonsafety check -r、Snyk)、合规审计(SOC2 的 CC6.1/CC6.6/CC7.2,GDPR 的删除权/可携带权/同意,HIPAA 的 PHI 保护与审计追踪)等可落地模式。 -
aidefence-guardian.md:AI 安全防御侧翼,监控各 Agent 输入/输出中的提示注入、越狱、角色切换、编码攻击与 PII 泄露,并对输入做
<10ms量级的安全检测(其声明"实际约 0.06ms"),构成面向 LLM 编排自身的第二道防线。
此外,.claude/agents/v3/ 还包含 claims-authorizer.md(基于声明的细粒度授权)、injection-analyst.md、pii-detector.md 等,说明 v3 安全域是一个成建制的多 Agent 体系。
六、自动化审计 Worker:把度量接到脚本上
技能定义的"成功度量"需要可观测出口。仓库内的 .claude/helpers/security-scanner.sh 就是一个与技能配套的独立安全扫描 Worker,它提供四种调用模式:
# 执行一次完整扫描
bash .claude/helpers/security-scanner.sh run
# 节流检查(距上次扫描不足 30 分钟则跳过)
bash .claude/helpers/security-scanner.sh check
# 忽略节流强制扫描
bash .claude/helpers/security-scanner.sh force
# 读取最近一次扫描状态
bash .claude/helpers/security-scanner.sh status
Worker 的核心逻辑与技能口径一一对应:
- 机密扫描
scan_secrets():对password=、api[_-]?key=、secret=、token=、private[_-]?key五类模式做全量 grep; - 漏洞模式扫描
scan_vulnerabilities():统计execute((注入风险)、exec(/spawn((命令注入风险)、eval((动态执行风险)三类的出现频次(测试文件除外); - 依赖审计
check_npm_audit():检测package-lock.json是否存在,存在即认为受控; - 状态机收敛:总问题数
>10判critical,>0判warning,否则clean;结果落盘为.claude-flow/security/scan-results.json,同时把audit-status.json更新为{"status":"CLEAN","cvesFixed":3}。
由此,SKILL 中"100% 修复三类关键 CVE"的声明在脚本侧有可复核的状态字段支撑,二者互为印证。
七、成功度量与使用边界
SKILL.md 将改造完成度收敛为四项成功度量(它们属于技能设定的验收基线,需结合实际扫描结果复核,而非已证实的仓库事实):
- Security Score: 90/100(
npm audit+ 自定义扫描综合评分); - CVE Resolution: 三类关键漏洞 100% 修复;
- Test Coverage: 安全关键代码测试覆盖率 >95%;
- Implementation: 全部安全模式完成文档化与测试化。
使用该技能时的边界与前提,依据仓库现状可以归纳为:
- 技能的运行依托 claude-flow v3 CLI 与 MCP 接入(见 .mcp.json),例如 Agent hooks 中出现的
npx claude-flow@v3alpha memory search-patterns、security cve --search、hooks session-start等命令,均以@claude-flow/cli的 v3alpha 版本为前提; - 技能与同目录其他 v3 技能(memory-unification、performance-optimization、swarm-coordination、integration-deep 等)共同构成对该 v3 运行时多个维度(记忆、性能、协同、集成)的改造覆盖,安全域是其中横向贯穿的一环;
- SKILL 中的
CVE-1/2/3属技能内部问题分类编号,不应与公开 CVE 数据库条目直接等同;需要公开 CVE 检索与比对时,应由 security-auditor 的 CVE 检索能力负责。
八、小结:一份可被 Agent 与工程师共同执行的"安全第一"作战手册
.v3-security-overhaul SKILL 的价值在于把一次完整的安全改造同时编码为机器可执行的编排(并行 Task + 专职 Agent)与人可审阅的规范(三类 CVE 修复代码 + 三种 secure-by-default 模式)。它既不取代安全工程师的判断,也不依赖一次性人工检查——修复动作被 bcrypt、Zod、execFile、securePath 等样板沉淀为可复用的"默认正确写法",检测动作被 Agent 正则库与 security-scanner.sh 自动化,度量动作被 audit-status.json 等状态文件持续追踪。对于希望在自己团队复刻这套打法的读者,最直接的路径是:先阅读本技能原文 SKILL.md,再对照两个专职 Agent 文档补齐检测纵深,最后用 security-scanner 脚本把度量接入日常 CI。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python07
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00