文章标题:Myths in R2Land
正文: Mythos 凭借 OpenBSD、FreeBSD 和 FFmpeg 中的老漏洞登上了头条。
Mozilla 的 AI 辅助加固工作始于 2026 年 2 月,Firefox v150 在 4 月 21 日发布了 271 个 Mythos 修复。这大约是 100 多名开发者两个月的工作量。
10 月 10 日,Anthropic 的 OSS Scanner 发布,允许开源项目运行他们的漏洞扫描器并私下收到提交的报告。
由维护者来审查、修复、测试并发布这些报告,我认为这种方式算是一种不错的协议,也是一种将这一强大工具免费带给开源软件的有益方式。
看到公告后,我立刻启动 codex,做了我能做的最省事的一件事:提示它替我填写 Anthropic 的表单,并向他们的 oss-scanner 仓库提交一个 PR,把 radare2 纳入他们的审批审查流程。
两周后,凌晨 1 点,我收到一封邮件,372 份写得完美、结构良好的报告通过邮件送达,附有复现器、ASan 崩溃日志、复现步骤、CWE 细节和 Markdown 说明。我测试了每一份报告,在这一批里没有发现任何误报。
我早已获得 OpenAI Daybreak 的早期访问权限,并在今年早些时候修复了所有漏洞,所以 Mythos 确实找到了更多!
在多年活跃的漏洞研究和对一个主要由我维护、超过 1M LOC 的代码库的良好编码实践之后,使用静态代码分析和动态插桩、用 valgrind 和 ASan 进行模糊测试,我对发现的数量和质量印象深刻。
该项目的安全准则规定,任何已知漏洞须在 24 小时内公开披露并修复。
这是一个挑战,主要考虑到 radare2 是由一个人作为业余项目维护的
我认为我用 GPT6.1 构建的提示词对 Mythos 找到一些非常小众的点帮助很大,但他们的私有 harness 值得大加称赞:它如何用 AddressSanitizer 构建 r2、运行它、烹制复现器并验证发现。
我需要一个计划,显然也需要更好的工具。
所以我通知了我所在的 NowSecure 公司,为我分配几周时间专注于修复它们,而在 4 天之内我修复了其中大约 200 个。感谢 Opus 5.5 和 DeepseekFlash。

补丁的质量
Anthropic 在报告中附带了建议的补丁。漏洞是真实的,但补丁往往需要返工:
- 他们修复的是症状而不是根本原因。
- 他们忽略了修复中重要的设计决策。
- 他们在附近的代码中留下了类似的漏洞。
复现器证明某处有问题。选择正确的修复仍然需要理解代码本应如何工作。
漏洞类型
报告涵盖了越界读写、格式化字符串漏洞、命令和 ANSI 转义注入、沙箱逃逸、路径遍历、信息泄露、逻辑和网络信任问题、认证绕过,以及拒绝服务,包括分配炸弹。远远超出了 90 年代经典的栈溢出。我不得不排定优先级并开始削减列表。
组织公告
我在本地 radare2 源码树中创建了一个目录,并在 README.md 中记录了其结构和工作规则:
- Attic/ 存放已解决的报告。
- TODO.md 跟踪已完成和待处理的工作。
- status.sh 显示有多少发现已修复、多少仍待处理。
- Findings/ 包含完整的报告集。
每个发现都带有自己的文件:
0$ find ANT-2026-1YX7HRIB/
ANT-2026-1YX7HRIB/
ANT-2026-1YX7HRIB/REPORT.md
ANT-2026-1YX7HRIB/patches
ANT-2026-1YX7HRIB/patches/1.patch
ANT-2026-1YX7HRIB/repro.d
ANT-2026-1YX7HRIB/repro.d/hostile.rapatch
ANT-2026-1YX7HRIB/repro
0$
REPORT.md 文件以这样的头部开头:
0$ cat ANT-2026-1YX7HRIB/REPORT.md
==================================
ANT-2026-1YX7HRIB [high] CWE-693 authz
rapatch2 -s sandbox bypass: patch files can run r2 and shell commands
Location: libr/main/rapatch2.c:58 in rapatch_file()
Commit: 3f7b70a89ef13e367b63791c21782ad57edbca4b
==================================
有了这个头部,任何 agent 都很容易创建一个脚本来生成 json,然后使用 jq 单行命令查询数据,但模型和人类更喜欢 markdown,所以它构建了几个引用 ID 的表格,使得将它们作为待办列表跟踪、用 vim 写我的注释等变得容易。
现在我想我可以直接构建一个基于 sqlite 的工具来处理所有这些,而且我可能会消耗少得多的 token。
哪些智能体?
需要明确的是,我做了大量的手动审查和测试,但 3 个 harness 在这个过程中帮了我很多:我使用了 Claude 搭配 Opus 5.5、Codex 搭配 GPT-6.1 Astra,以及我自己的编码 agent PocketMai,搭配 DeepSeek Flash。
但提示工程已死,对吧?
我倾向于问很多问题,flash 模型在这方面很棒,在不到 5 秒内我就能获得见解并澄清 TLDR。我讨厌阅读 AI 生成的垃圾内容,而问题的描述方式可能比 bug 本身更难理解。
我还使用自定义提示,这些提示会扩展成更长的指令。在审查代码后,我会附加我自己的问题和观察,以便 agent 理解我的关注点、优先级以及需要再次查看的部分。
这些是我在 pmai 中使用的一些提示,也可以通过 radare2-skills 获得:
- $tldr:使用短句、表情符号和要点总结最后一条消息。
- $qa:提出 10 个利基的简短问题,并进行研究,用一个表示是/否的表情符号回答它们。
- $review:审查更改的正确性,包括安全性和内存安全之外的问题。
- $logic:查找逻辑 bug。
- $pattern:从补丁和复现器中提取 bug 模式,然后在代码的特定区域搜索类似问题。
循环
在单独的工作树上运行 harness,并生成一次子代理通常是不够的。
那些提示可以放入一个无限循环中:调查一个发现,修复它,审查修复,并在其他地方搜索相同的模式。跟进一份 Anthropic 报告可能会发现另外四个 bug。
我手动检查了每一个新发现。最初的 372 份报告增长到大约 1,500 个发现,包括重复项和需要更广泛重新设计的问题。这有很多要处理,但它也让我更清楚地了解代码需要在哪里工作,以及接下来哪些更改值得做。
报告
在这个数量级上,咨询工作本身就成了一个项目。对于每个案例,我需要审查报告、复现 bug、评估其影响、确定引入它的提交、检查修复是否覆盖相关案例,并全部记录下来。
没有更好的工具,我无法做到这一点,所以我写了 gsadv:一个用于注册安全咨询、请求 CVE 以及使用不同 agent harness 分析报告的 TUI。
这个工具显然需要它自己的文章!
推动 r2 前进
AI 正在为 r2 带来更多贡献者,以及审查他们贡献的新颖更好的方式。它帮助我们发现更多 bug、探索替代方案,并基于我们实际可以测试的代码做出更好的设计决策。
也许我太老了,不能只在第一个提示后盲目合并每个提交,或者在没有人参与循环的情况下自动化,但确实它显然带来了不同,将软件开发的繁重工作提升到另一个水平,帮助我学习新技能并专注于重要的事情,而不是花几天时间手动测试我想到的 5 个不同选项的性能影响。
R2Land 中的迷思
这加快了整个流程,从想法或 bug 报告,到测试、基准测试、重新设计以及审查每一处更改。仍有很多工作要做,但这些工具有助于我们让 r2 保持更新,并推动它朝着目标前进:成为用于智能体逆向工程的最佳软件。