源文档 docs/07-worked-example.md
渲染 sky-skills / anthropic-design / md-mirror

07 · 端到端示例:一个 ioctl 错误路径内存泄漏(虚构 /dev/foo)

本页所有名字、地址、数值都是虚构的,用来把本库六类工具串成一次完整流程。真实项目把 foo 换成你的驱动即可。

场景(虚构)

某 vendor 驱动 foo.ko 提供字符设备 /dev/foo,其 foo_ioctl()FOO_IOC_SUBMIT 命令在错误路径漏 fput():copy_to_user 失败时,本该释放的 struct file* 没释放,sync_file_create() 拿到的 file refcount 永不归还。每次失败调用泄漏约几百字节内核 slab,普通 shell 即可触发,无上限

漏洞性质 → 决定工具选择

性质 推论
不是公开 CVE(自研驱动里新找的 bug) ① 的 cvehound / kernel-cve-tool / linux_kernel_cves 查不到
"错误路径漏释放"代码逻辑 bug + 有源码 ⑤ LLM 源码审计 + 静态规则是主场
要动态证明 + 系统化找同类 ③ syzkaller + kmemleak(+ KernelGPT 生成 ioctl 描述)⭕
出厂是 .ko 二进制 ⑥ 逆向核对 shipped 二进制确含此 bug ⭕

核心提醒:别指望 ① 的 CVE 扫描器"检测"到这种洞——它们只认公开 CVE 库。这个 bug 靠源码审计 + 静态规则 + 动态 fuzz 找。

测试方案(5 阶段)

Phase 1 · 静态确认 + 举一反三(有源码,主场)

Phase 2 · 动态复现(证明真泄漏)

Phase 3 · 系统化扩展(自动找同类)

Phase 4 · 修复验证

Phase 5 · 影响定级(纸面,给修复排期)

工具映射速查

工具 对这种 bug 怎么用
trailofbits c-review ⭕⭕ 核心 审 handler,确认错误路径漏 fput
trailofbits variant-analysis ⭕⭕ 核心 举一反三扫同款漏释放
trailofbits static-analysis ⭕⭕ CodeQL/Semgrep 查"分配后某返回路径未释放"
entry-point-analyzer / fp-check 划审计范围 / 疑点验真假
claude-code-security-review 审修复 diff,确认 fput 补对
KernelGPT ⭕⭕ 核心 生成 ioctl 的 syzkaller 描述
harness(本库) L3 ⭕⭕ 核心 定向复现 + slab 监控
GhidraMCP / radare2-mcp 逆向 shipped .ko 复核错误路径无 fput
cvehound / kernel-cve-tool 只查公开 CVE,这种查不到