ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ruflo Security Audit Skill 实战指南:安全扫描、CVE 修复与 STRIDE 威胁建模

2026/9/7 14:03:30 拓冰建站 浏览量
ruflo Security Audit Skill 实战指南:安全扫描、CVE 修复与 STRIDE 威胁建模 ruflo Security Audit Skill 实战指南安全扫描、CVE 修复与 STRIDE 威胁建模【免费下载链接】ruflo The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo本文以 ruflo 仓库中.agents/skills/security-audit/SKILL.md文档为主体完整讲解该安全审计 Skill 的触发条件、全部扫描命令、配套 Shell 脚本与最佳实践并结合 CLI 真实实现源码 security.ts 与配套测试用例剖析扫描管线的三阶段设计、fail-closed 参数校验和结果持久化机制。读完后你可以直接在项目中使用该 Skill 完成输入校验、路径穿越、SQL 注入、XSS、硬编码密钥与依赖 CVE 的全面检查并理解每条命令背后的实现原理。Skill 定位何时触发、何时跳过SKILL.md 将 security-audit 定义为“综合安全扫描与漏洞检测”能力覆盖输入验证input validation、路径穿越防护path traversal prevention、CVE 检测和安全编码模式强制检查。其 Frontmatter 明确给出了两类边界条件触发场景When to Trigger——出现以下任一类变更时Agent 应激活该 Skill认证实现authentication implementation授权逻辑authorization logic支付处理payment processing用户数据处理user data handling新建 API 端点API endpoint creation文件上传处理file upload handling数据库查询database queries外部 API 集成external API integration跳过场景When to Skip——以下低风险变更无需运行安全扫描对公开数据的只读操作内部开发工具静态文档样式styling变更这种“按变更类型路由”的设计保证了安全扫描只出现在真正引入攻击面的代码路径上避免在纯文档或样式提交中制造噪音。命令全集从全量扫描到单点检查SKILL.md 按功能划分了 8 组命令以下完整继承原文档的命令与示例1. 全量安全扫描Full Security Scan对代码库执行综合安全分析npx claude-flow/cli security scan --depth full带输出报告的完整示例npx claude-flow/cli security scan --depth full --output security-report.json2. 输入验证检查Input Validation Check检查输入验证问题可配合--path限定扫描范围如./src/apinpx claude-flow/cli security scan --check input-validationnpx claude-flow/cli security scan --check input-validation --path ./src/api3. 路径穿越检查Path Traversal Checknpx claude-flow/cli security scan --check path-traversal4. SQL 注入检查SQL Injection Checknpx claude-flow/cli security scan --check sql-injection5. XSS 检查XSS Checknpx claude-flow/cli security scan --check xss6. 依赖 CVE 扫描CVE Scan扫描依赖树中的已知 CVE可用--severity high过滤高危项npx claude-flow/cli security cve --scannpx claude-flow/cli security cve --scan --severity high7. 安全审计报告Security Audit Report生成完整审计报告支持指定输出格式如 markdown与输出文件npx claude-flow/cli security audit --reportnpx claude-flow/cli security audit --report --format markdown --output SECURITY.md8. 威胁建模Threat Modelingnpx claude-flow/cli security threats --analyze9. 硬编码密钥校验Validate Secretsnpx claude-flow/cli security validate --check secrets命令参数与源码实现的对照上述命令来自 SKILL.md 的文档约定而 CLI 的实际选项定义在 security.ts 中做源码级核对时需要注意以下几点事实security scan实际声明的选项为--target/-t目标路径默认.、--depth/-dquick | standard | deep默认standard、--typecode | deps | all默认all、--output/-o、--fix/-f可自动修复时自动修复。文档中使用的--depth full在源码中是已废弃取值源码通过DEPRECATED_SCAN_DEPTHS { full: deep }security.ts#L40把full归一化为deep并打印警告。源码注释解释了原因——CLI 自己的状态栏提示、发布说明和若干 agent 定义都告诉用户执行security scan --depth full硬拒绝会破坏所有既有调用方因此保留别名并告警待这些“发射源”老化后移除。未识别的枚举值采用fail-closed失败即关闭策略早期版本中未知的--depth会静默落入最浅的遍历--depth full反而比默认standard扫得更浅未知的--type会跳过所有阶段却打印 “No security issues found!” 并以退出码 0 结束——拼写错误与“干净结果”无法区分。现在这些输入在任何扫描发生前就会被显式拒绝security.ts#L77-L113。--type container在帮助文本中一直被宣传但从未有对应实现阶段源码会显式拒绝它并给出“尚未实现”的专门提示security.ts#L42-L47。--target必须存在且必须是目录否则直接报错退出防止“扫了个不存在的路径 → 零发现 → 持久化一份 CLEAN 报告”的 fail-open 链路security.ts#L115-L129。security cve实际选项为--check/-c按 CVE 编号过滤、--list/-l、--severity/-ssecurity secrets是独立子命令选项为--action/-a、--path/-p、--ignore/-i。文档中的security cve --scan、security validate --check secrets等写法应理解为“扫描依赖 CVE”“校验密钥”的语义化描述落地时以源码中的选项定义为准。扫描管线源码剖析三个阶段与深度预算security scan的核心实现security.ts#L141-L297由三个阶段组成理解它对判断“为什么扫到了/没扫到”非常关键。深度预算表目录递归深度按扫描深度分级以“全量记录”而非链式三元表达式实现新增深度级别会直接变成编译错误而不是静默变浅security.ts#L49-L54阶段quickstandard默认deep密钥扫描深度SECRET_SCAN_DEPTH3510代码模式扫描深度CODE_SCAN_DEPTH0该阶段被门控跳过510递归函数使用正向断言if (!(depthLimit 0)) return;而不是 0——因为undefined和NaN都无法通过正向断言任何非法预算都会停止递归而非禁用限深器security.ts#L209-L212。阶段一依赖审计type 为all或deps时执行在目标目录下执行npm audit --json10MB 输出缓冲解析audit.vulnerabilities按critical / high / moderate|medium / low四个级别计数并把每条漏洞含via[0].title截断到 35 字符记入 findings位置标注为package.json:包名security.ts#L146-L189。由于npm audit在发现漏洞时以非零码退出但 stdout 仍有 JSON实现中对execSync的异常做了显式捕获并复用 stdout。阶段二硬编码密钥扫描type 为all或code时执行对ts/js/json/env/yml/yaml扩展名的文件排除.d.ts跳过隐藏目录、node_modules、dist逐行匹配 5 组正则security.ts#L194-L207正则节选判定类型(?![a-zA-Z0-9_])(?:sk-\|sk_live_\|sk_test_)[a-zA-Z0-9]{10,}(?![a-zA-Z0-9_])API KeyStripe/OpenAI[]AKIA[A-Z0-9]{16}[]AWS Access Key[]ghp_[a-zA-Z0-9]{36}[]GitHub Token[]xox[baprs]-[a-zA-Z0-9-][]Slack Tokenpassword\s*[:]\s*[][^]{8,}[]忽略大小写Hardcoded Password其中 API Key 正则的写法带有明确的修复历史旧版要求引号紧邻前缀且密钥长度 ≥20会漏掉sk-1234567890abcdef这类 16 位短 key也漏掉Authorization: Bearer sk_live_...这种引号贴着 Bearer 的常见形态改用环视边界lookaround后按独立 token 匹配源码注释标注为 #2931 修复对应测试 security-scan-secret-regex-2931.test.ts。所有命中均计为 HIGH 级 “Hardcoded Secret” finding位置精确到相对路径:行号。阶段三代码安全模式分析depth 不为quick时执行对ts/js/tsx/jsx文件匹配 5 组代码风险模式security.ts#L251-L257模式节选类型级别说明eval\s*\(Eval Usagemediumeval() 可执行任意代码innerHTML\s*innerHTMLmediuminnerHTML 的 XSS 风险dangerouslySetInnerHTMLReact XSSmediumReact XSS 风险child_process.*exec[^S]Command Injectionhigh可能的命令注入\$\{.*\}.*sql\|sql.*\$\{忽略大小写SQL Injectionhigh可能的 SQL 注入这与 SKILL.md 中--check input-validation / path-traversal / sql-injection / xss单点检查项在语义上对应——扫描器把这几类风险编码为可复用的正则目录。结果输出、持久化与自动修复终端以表格输出前 20 条 findings超出部分显示 “... and N more issues”再输出含 Target/Depth/Type 与四级计数的 Scan Summary 汇总框security.ts#L301-L329。扫描结果会持久化到target/.claude/security-scans/scan-${type}-${depth}.json文件名由扫描配置决定、重复执行时覆盖而非累积过期报告状态栏的getSecurityStatusfunnel/local-signals.ts正是读取该目录反映真实扫描状态。写入是 best-effort失败不会影响扫描本身security.ts#L331-L358对应测试 security-scan-persistence.test.ts。指定--fix且存在 critical 或 high 发现时自动在目标目录执行npm audit fixsecurity.ts#L360-L373。返回值语义只有“零发现”或“无 critical 且无 high”时success为真为 CI 门禁提供退出码语义。CVE 子命令基于 npm audit 的漏洞过滤security cve不再是存根源码注释标注 #2403 起它委托给npm audit --json30 秒超时作为数据源与security scan同源再叠加两层过滤security.ts#L397-L482--check CVE-XXXX用正则CVE-\d{4}-\d{4,7}从漏洞的 title/url 文本中提取全部 CVE 编号按编号大小写不敏感过滤--severity按 severity 过滤并做了medium/moderate的别名归一npm 输出用moderate。输出为 SEVERITY / PACKAGE / CVE IDs / TITLE 四列对齐表格并在无命中时明确提示数据源为npm audit --jsonGitHub Advisory DB。若项目目录没有package.jsonJSON 解析失败命令打印警告并以退出码 2 结束。SKILL.md 中security cve --scan --severity high的“按高危过滤”意图即对应这里的--severity high能力。威胁建模子命令STRIDE 框架落地SKILL.md 的security threats --analyze对应源码中的threats子命令security.ts#L486-L731它把 STRIDE 六类威胁编码为可执行的检测规则--model支持stride | dread | pasta默认 stride--scope限定分析范围--export json可导出发现清单扫描约束最多 500 个文件MAX_FILES跳过node_modules/dist/.git与隐藏目录单文件超过 1MB 直接跳过STRIDE 模式目录security.ts#L521-L550Spoofing无认证中间件的 HTTP 端点如app.get(/path, (req...Tamperingeval()、execSync()、模板字符串拼接的exec()、new Function()等代码注入向量highInfo Disclosure硬编码凭据high、AWS Keycritical、GitHub tokenhigh、PEM 私钥头critical、非 localhost 的http://明文 URLmediumDoS检测到 Express/Fastify 时提示验证限流配置lowElevation来自请求的JSON.parsemedium、__proto__访问high原型链污染、Object.assign({}, req...)medium。git 仓库专项检查checkEnvInGit()通过git ls-files --cached检测被 git 跟踪的.env文件命中即记为 CRITICALsecurity.ts#L552-L566。缺失中间件检查对引用了 express/fastify 的服务文件检查是否缺少 helmet/lusca 安全头MEDIUM、CORS 中间件LOW、限流中间件MEDIUMsecurity.ts#L614-L648。输出包含按 STRIDE 类别的汇总表并始终附带 STRIDE 参考框架表每类威胁的评估问题与缓解示例如 Spoofing → 强认证/mTLS、Repudiation → 审计日志/签名提交。配套脚本security-scan.sh 与 cve-remediate.shSKILL.md 在 Scripts 一节声明了两个脚本文档中路径写作.agents/scripts/在仓库中的实际位置为.agents/skills/security-audit/scripts/目录脚本实际路径职责security-scansecurity-scan.sh顺序执行完整安全扫描流水线cve-remediatecve-remediate.sh自动修复已知 CVEsecurity-scan.sh采用set -e快速失败语义依次串联六个阶段与上文 scan 的阶段划分一一对应#!/bin/bash # Security Audit - Full Scan Script set -e echo Running full security scan... npx claude-flow/cli security scan --check input-validation # 输入验证 npx claude-flow/cli security scan --check path-traversal # 路径穿越 npx claude-flow/cli security scan --check sql-injection # SQL 注入 npx claude-flow/cli security scan --check xss # XSS npx claude-flow/cli security validate --check secrets # 硬编码密钥 npx claude-flow/cli security cve --scan # CVE 扫描 echo Security scan completecve-remediate.sh则是“扫描 → 修复 → 复扫”闭环#!/bin/bash # Security Audit - CVE Remediation Script set -e npx claude-flow/cli security cve --scan --severity high # 先定位高危 CVE npm audit fix # 自动修复 npx claude-flow/cli security cve --scan # 复扫确认 echo CVE remediation complete这个“修复后复扫”的模式与 CLI 内--fix后的提示“Applied available fixes (run scan again to verify)”思路一致自动化修复只承诺尽力而为验证必须重新跑一遍扫描。测试证据fail-closed 语义如何被锁定security scan的枚举校验不是口头承诺而是由专门回归测试锁定的security-scan-enum-validation.test.ts。该测试文件头注释概括了修复背景“security scanused to fail open on an unrecognised --depth, --type or ...”关键断言包括--depth bogus-value必须输出Invalid --depth bogus-value并退出而不是扫得更浅--type bogus-type与大小写异常的--type CODE均被拒绝枚举比较大小写不敏感地命中“未实现/非法”分支--type container/--type Container得到专门的“尚未实现”提示报告文件名由scan-${type}-${depth}.json构造测试验证了--type ../../../escaped之类的路径穿越值不会逃出扫描报告目录空字符串--depth 被当作未提供回落到文档声明的默认值。另有 security-scan-persistence.test.ts 覆盖扫描结果持久化路径security-scan-secret-regex-2931.test.ts 覆盖 API Key 正则的短 key 与 Bearer 形态修复。最佳实践SKILL.md 原文四条文档末尾的 Best Practices 给出四条执行纪律完整保留如下开始前先检查 memory 中已有的模式Check memory for existing patterns before starting协调时使用分层拓扑Use hierarchical topology for coordination;完成后存储成功的模式Store successful patterns after completion记录任何新学到的知识Document any new learnings。这四条把安全扫描从“一次性命令”提升为“可积累的审计经验”同类项目的发现与修复路径会沉淀进 Agent 记忆下一次审计可直接复用。参考文档说明SKILL.md 的 References 一节点名两份文档Security Checklistdocs/security-checklist.md与 OWASP Guidedocs/owasp-top10.md分别用作安全评审清单与 OWASP Top 10 缓解指南。在当前仓库快照中未检索到这两个文件因此本文不做链接引用若你在完整 checkout 中看到它们可直接配合上文命令使用。仓库根目录另有一份 SECURITY.md可作为项目安全策略的补充阅读。上手方式与适用前提运行环境命令均以npx claude-flow/cli security ...形式给出需要已安装 Node.js 环境CLI 的源码位于 v3/claude-flow/cli 目录。依赖类检查阶段一、CVE 子命令要求目标目录是带package.json的 npm 项目且npm audit可访问其 advisory 数据源。典型工作流涉及认证/授权/支付/上传/数据库查询等变更时先跑npx claude-flow/cli security scan --depth full源码会将其归一化为 deep 并提示改用--depth deep依赖问题用security cve按 severity/CVE 编号过滤必要时走cve-remediate.sh的“修复-复扫”闭环面向架构评审时运行security threats拿到按 STRIDE 分类的发现与参考框架可用--export json归档扫描报告会自动落在target/.claude/security-scans/下可被状态栏与下游流程消费无需手工整理。适用限制代码阶段模式扫描受深度预算约束quick 下阶段三完全跳过deep 才能递归 10 层威胁建模与密钥子命令各自存在 500 文件的扫描上限与 1MB 单文件大小上限超大仓库应配合--target/--scope/--path分片扫描。正则型扫描属于启发式检查源码注释亦多处将其定位为“提示复查”如 Express 检测仅提示“verify rate-limiting is configured”不能替代人工安全评审。【免费下载链接】ruflo The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考