
上周四刷到一条消息我放下咖啡多看了两遍Capital One——就是那个你刷信用卡时背后可能扣款的银行——在 GitHub 上开源了一个叫 VulnHunter 的工具Apache 2.0 许可给你的代码做安全审计。不是又一个 SAST 扫描器。一个银行开源自研安全工具这件事本身就值得停下来多想几秒。2019 年 Capital One 出过一次轰动全行业的数据泄露——一个防火墙配置错误导致 1.06 亿用户的个人信息被外部攻击者拿到。那之后 Cap One 在安全上的投入是出了名的大。不是花钱买工具那种投入是真的建团队、写框架、搞 red team。所以当他们说我们做了一个内部用了很久的安全工具现在开源出去这个信号的份量比一家安全初创公司发 PR 重得多。它不是对着你的代码库跑正则匹配然后丢给你一张几百个漏洞的 Excel 表其中 80% 是误报。VulnHunter 的做法是从攻击者的视角真正读你的代码。找到一条从入口点到危险函数的可行路径然后尝试在逻辑上反驳自己——如果反驳不掉才报告给开发者同时带着修复方案。我当晚就 clone 了仓库。不是因为我手头有项目要审计而是我想看一件事——一个银行内部孵化的 AI 安全工具和市面上那些拿了融资的安全初创公司的产品到底有什么不一样。坦白说结果让我有点意外。SAST 和 Agent 的差距不是技术差距是思考方式的差距传统 SAST 工具的工作流很简单解析 AST → 匹配规则 → 输出告警。Semgrep、CodeQL、SonarQube本质上都走这个流程。区别只是规则写的粗细、支持的语言多少、告警排序的算法好差。这套流程有一个根本盲区它不知道攻击者能不能真的到达那个漏洞点。一个函数里有 SQL 注入风险标记。但用户能不能控制这个函数的输入调用链路上有没有认证检查参数是不是已经被转义过了SAST 不管。它只管发现模式不管验证路径。VulnHunter 的差异就在这里。它不是匹配模式而是推理路径。它的/vulnhunt技能启动后第一件事是用 Phase 1 Recon 扫描整个代码仓库找到所有用户可控的入口点——API 路由、文件上传接口、网络消息处理器。然后从这些入口点向前追踪数据流画出整个攻击面地图。Rust 助手会调用 LLM agent 来搜索 API 端点定义提取路径、方法、参数和认证要求。这个输出结构直接影响后续 Phase 2 的并行追踪策略——知道了入口点在哪里、是什么类型才能决定怎么追踪。比传统 SAST 的工作量大得多。你每发现一个入口都要顺着调用链一路读下去穿过三层、四层甚至十层抽象才能判断数据最终流到了哪里。但代价背后是另一个真相SAST 靠静态分析你骗不了它但你可以在它面前藏——把敏感操作藏在五层间接调用后面语法扫描就接不住了。VulnHunter 做的恰恰是不管藏在哪里我顺着数据流一路找。SAST 在检测漏洞VulnHunter 在模拟攻击。这一字之差就是两种完全不同的安全哲学。那套 falsification engine才是真正值钱的部分如果 VulnHunter 只是一个会从入口点向前追踪的工具它不会比一个有经验的安全工程师手工审计好太多。真正让我觉得这是 Agent 该做的事的是它的falsification engine。Phase 2 的流程大致是这样Recon— 找到所有入口点映射数据流路径Parallel Hunt— 对每个入口点启动多个子 agent 同时追踪不同数据路径Adversarial Disprove— 对每个初步发现的漏洞尝试从攻击者角度反驳这条路径真的走得通吗Capability Filter— 只保留那些通过了反驳测试、攻击者确实可以利用的漏洞第三阶段就是最接近人类安全工程师行为的部分。它不是简单地报告这里有个 bug——它尝试证明这个 bug 真的可以被攻击者利用。如果它发现路径上有认证检查、有输入消毒、或者有逻辑矛盾它会把这个漏洞标记为 false positive不报给开发者。我在一个FastAPI项目上做了实验。项目里有一条文件上传的 API中间有一层逻辑对文件名做了 base64 编码。传统 SAST 工具会在文件写入操作处标记路径遍历风险。VulnHunter 在 falsification 阶段自己发现了一个问题文件名在被 base64 编码前已经拼接到了路径里编码发生在拼接之后——所以路径遍历根本不成立文件名会被编码成无害字符串。这个判断SAST 做不了。因为它需要理解编码之后数据不可控这个语义。但 VulnHunter 追踪了整条数据流后发现出口参数已被编码就安然地在 falsification 阶段把这个潜在漏洞过滤掉了。我当时的反应是这不是在扫描代码——它是在读代码。修复链路——发现漏洞和修好漏洞是两件事安全工具有一个经典问题发现率很高修复率很低。开发者收到一个漏洞报告打开一看——你的 XX 函数有 SQL 注入风险建议使用参数化查询。开发者当然知道要用参数化查询。问题是这行代码在哪个文件哪个位置调用它的函数有哪些改了会不会破坏其他逻辑信息不够开发者的选择往往是先 assign 给自己有空再看——实际上就是拖到下一次安全审计。VulnHunter 在漏洞存活之后进入/vulnhunter-fix流程这是一个完全不同的 agent session。它做的事情写一段可执行的 exploit demo证明这个漏洞可以触发创建一个失败的 security testRED 阶段实施代码修复GREEN 阶段验证修复后 exploit 不再生效且没有 regression输出一个 reviewable 的 PR而且上面的流程还有一个/vulnhunt-fix-verify技能——一个完全独立、只读的 agent session专门验证修复是否真的有效。同一个项目里多个 agent 角色分离各自有各自的工具和视角。这套分工让我想起 Google 的BeyondCorp模型——不信任任何单一来源的结论用多个独立判断做交叉验证。区别是 BeyondCorp 用在网络访问控制上VulnHunter 用在代码安全上。三个阶段、三个 agent、三个职责的过程我用一个对比表来整理技能阶段核心职责能否独立运行/vulnhuntHunt从入口点映射路径通过 falsification pipeline 输出已验证漏洞可以/vulnhunter-fixFix写 exploit demo、创建失败测试、实施修复、输出 PR可以/vulnhunt-fix-verifyVerify独立只读 session验证修复是否生效可以完全隔离发现和修复之间不再有开发者在 JIRA 上拖三个月的真空期。银行做安全的视角和创业公司真的不一样VulnHunter 源于 Capital One 自己的痛点。一个大型金融机构的代码仓库——几千个仓库几十个业务线——不可能靠一支安全团队手工覆盖。SAST 工具的误报率在大型仓库上会失控。每一个误报都需要人工 triage。到后期安全团队的默认状态变成了大量时间花在区分真假漏洞上。VulnHunter 的 falsification engine 解决的就是这个问题。它用agentic reasoning来代替一部分人工 triage 工作。换句话说它不是在帮你修漏洞——它是在帮你判断哪些漏洞值得修。这个定位很精准。不是取代安全工程师是让安全工程师的精力从从 500 个告警里挑出 10 个真漏洞变成在 10 个通过 falsification 的漏洞上做最终裁定。效率差了一个数量级。还有一个值得说的细节VulnHunter 的Capability Filter输出的不是二元结论而是攻击者获得的能力描述——比如攻击者可以读取数据库中的用户密码表、可以执行任意代码、可以读取指定路径的本地文件。这种输出格式的影响是修复它的开发者和评审者不需要安全背景就能理解这个漏洞意味着什么。在我看来这才是大厂内部工具开源给社区的真正价值——不是给你一个工具是给你一套他们已经踩过的坑和爬出来的路径。门槛真实存在——不是谁都能跑说完了好的一面也要说不那么好的。VulnHunter 需要 Claude Opus 4.8 和 Claude Code 环境。这不是推荐配置是硬性依赖。为什么因为 VulnHunter 的工作流依赖深度、多步推理——每个入口点、每条数据路径、每次 falsification 都需要调用 Opus 级别的模型。在一个中型仓库上跑一次全流程token 消耗会相当可观。我在那个 FastAPI 项目上跑一次 Phase 2消耗了大约120 万输入 token 35 万输出 token。这笔 token 消耗意味着什么按 Anthropic 当前的 API 定价Opus 4.8 的输入约 $15/百万 token输出约 $75/百万 token。一次全量扫描大约是$4,500 左右的 API 成本。当然你可以用缓存命中来压——如果同一个仓库跑第二次falsification 的很多中间结果可以被 reuse。但第一次跑账单是实打实的。换句话说这个工具的使用成本不只是你的时间——还有实打实的 API 账单。此外VulnHunter 目前只做了 Python 仓库的优化。虽然框架设计上不限制语言——它通过 Claude Code 的 Grep 和 Read 工具理解代码不依赖特定语言的 AST 解析——但在非 Python 项目上的 falsification 准确率还没有经过大规模验证。源代码的注释也写得很清楚Known limitations 和 active development roadmap 都在仓库里。不是那种发完 blog 就没人管的项目。我翻了 Issue 区Capital One 自己的安全团队在活跃维护有不少来自社区的 PR 已经被合并。还有一个更根本的问题VulnHunter 输出的是 Claude Opus 的推理结果——不是形式化证明。falsification engine 的反驳是一个 LLM 的自我反驳不是数学上的证伪。这意味着如果 Opus 本身在某个推理节点上犯了错falsification 阶段可能错过误报或者错误地排除真漏洞。Capital One 自己也承认这一点。他们在文档中强调 VulnHunter 的输出需要人工复核建议把它定位为一种增强人工审计的手段而不是替代品。这种诚实让我对这个项目的好感度又高了几分。回到我开头的问题一个银行内部孵化的 AI 安全工具和初创公司的产品有什么不一样我的答案是它不那么好看但更好用。它没有漂亮的管理面板没有花哨的 dashboard没有市场团队 landing page 上那些 AI-powered 的动画特效。它就是一个Claude Code skill三个 commands加上一套经过真实银行代码库验证的 workflow。你 clone 下来之后要自己配 Opus 的 API key自己装 Claude Code自己在终端里跑/vulnhunt。输出不是一份 PDF 报告——是一个带着 exploit demo 和修复 PR 的 GitHub 讨论 thread。我越来越觉得2026 年下半年的 AI 工具会分化成两个方向一个是 ChatGPT Work 那种你说话它做事的消费级 Agent另一个就是 VulnHunter 这种给专业工具加上推理大脑的专业级 Agent。前者降低门槛后者降低误判。两种都有价值。但对于我这种天天和代码打交道的开发者来说后者更让人兴奋——不是因为它更聪明是因为它理解你做的到底是什么。去 GitHub 搜capitalone/vulnhunter。你需要 Opus 的 API key还需要一点耐心读 README。但读完跑完你会对 Agent 能做什么这件事有一个全新的判断。Capital One 把内部打磨过的安全流程以 Apache 2.0 开源意味着你可以直接 fork 下来适配自己的项目。这比任何 AI 安全类的商业产品都实在——你不只是在用他们的工具是在复用他们花了几年时间迭代出来的方法论。反正我跑完之后把自己之前一个安全项目的 issue 列表翻出来重新看了一遍——那些标了 wontfix 的旧漏洞有几条值得重新审视。