
SQLite 的 6 个'致命漏洞'全是 AI 编的:如何识别 LLM 垃圾 CVE
一个新建的 GitHub 仓库发布了 6 个 SQLite 高危漏洞通告,NVD 标为 Critical,JFrog 安全团队逐条验证后全部证伪:引用的函数不存在、行号超出文件末尾、补丁是编造的。附完整的识别方法和验证流程。
原文来源:JFrog Security Research — JFrog 安全团队验证了 6 个被 NVD 标为 Critical 的 SQLite 漏洞通告,发现全部是 AI 生成的假 CVE:函数不存在、行号超界、补丁虚构,并给出完整的识别红旗清单。
一个 GitHub 上新建的仓库(programmervuln/cveadvisory-)几天内批量发布了 SQLite 的漏洞通告,作为另外 50 多个 CVE 的一部分——JFrog 安全团队相信其中除一个外全部是 LLM 垃圾(LLM slop)。NVD 很快把这些标为 Critical,CISA 的 ADP 也表示同意。但当 JFrog 的研究人员深入验证时,所有指控都站不住脚:
- 引用的代码在那些版本里根本不存在,或者指向无关逻辑;
- 测试 PoC 载荷时它们不生效(没有触发任何崩溃);
- 这些 CVE 没有一个出现在 SQLite 的官方漏洞页面(sqlite.org/cves.html,跟踪真实漏洞的金标准);
- 用 Gptzero 检测时,仓库里所有通告都显示为 AI 生成。
其中 CVE-2026-51302 最初被 Red Hat 标为 10.0 Critical,验证期间已被降级到 7.6 High——这就是假 CVE 污染真实漏洞生态的活例子。
六条通告,六种造假方式
JFrog 建立了一套隔离的验证流程:克隆官方 sqlite/sqlite 仓库并检出目标标签(3.41.0、3.51.2、3.51.3),在隔离的 Docker 容器里编译官方发布版,把通告里的 PoC SQL 语句原样喂给 AddressSanitizer(ASan)插桩的二进制,再交叉核对 NVD 和 GHSA 的 CPE 模式与元数据。结果如下:
| CVE | 报告的漏洞 | CVSS | 审计发现 |
|---|---|---|---|
| CVE-2026-51302 | exprComputeOperands() 中的 UAF | 9.8 Critical | 该函数在 3.41 中不存在(2025 年中才加入);sqlite3ReleaseTempReg() 只是回收寄存器索引,不涉及堆释放 |
| CVE-2026-51303 | ExprListDelete() 反向引用 UAF | 9.8 Critical | 结构体中没有反向引用指针;3.51.2 到 3.51.3 的 diff 显示 src/expr.c 完全没变,"补丁"是编造的 |
| CVE-2026-51300 | sqlite3ExprDelete() UAF | 9.1 Critical | 引用的行号(1012、1026)一个是注释、一个是内存分配调用;指针在作用域末尾从不被复用 |
| CVE-2026-51297 | jsonBlobEdit() 的 UAF | 8.8 High | 该函数在目标版本中不存在(随 JSONB 实现才引入) |
| CVE-2026-51296 | jsonRemoveFunc UAF | 7.5 High | 引用行号 3555、3575,但 3.41.0 的 src/json.c 总共只有 2706 行 |
| CVE-2026-51304 | pOrderBy->nExpr 释放后使用 | 7.5 High | 通告里的单参数签名不存在;实际代码在删除后立即将指针置空,不可能解引用 |
最典型的是 CVE-2026-51302:通告声称 sqlite3ReleaseTempReg() 在 regFree1 中留下悬垂指针,之后被 exprComputeOperands() 解引用。但该函数在 SQLite 3.41 里根本不存在——2025 年中的提交才加入。而且 sqlite3ReleaseTempReg() 的机制不涉及堆释放:它只是把寄存器索引回收进数组复用,设计上就不可能产生 UAF。PoC 查询正常运行,没有崩溃,因为 bug 根本不存在。
—— 广告 ——
为什么假 CVE 能混进官方数据库
这件事暴露的是漏洞自动化摄取流程的系统性问题。对同一 GitHub 账户发布的 55 条通告做全面审计后,54 条完全是编造的,只有一条包含真实 bug 但被包在未经验证的 CVE 元数据里。
根本原因很直白:当前流程的每一步都不要求 PoC 或 bug 复现。NIST 被漏洞报告的海啸淹没,实质上暂停了深度分析;CISA 和其他授权数据发布方(ADP)试图接手自己的增强工作,但全球管道已经碎片化、积压成山。一条听起来可信的假通告可以一路滑过整个管道,进入 GHSA、下游数据库和企业扫描器。
识别 LLM 垃圾 CVE 的红旗清单
JFrog 给出了四条最有效的红旗:
- 缺少厂商佐证:官方维护者的安全页面(如 sqlite.org/cves.html)上没有任何提及。
- 提交历史缺失:参考字段里没有链接任何 commit hash 或 PR。
- 元数据矛盾:CPE 产品定义为空,或版本范围与通告叙事冲突。
- 不存在的代码引用:引用目标版本中不存在的函数,或行号超出文件末尾。
假 CVE 的真实危害
这些垃圾 CVE 不只是噪音,它们有实际破坏力:
- 企业安全团队把时间浪费在调查和修补不存在的漏洞上,污染漏洞数据库。
- 在"Critical 自动优先处理"或按漏洞评分自动开票的环境里,编造的 CVE 会变成真实的负担。
- 更危险的场景:用 AI 自动化漏洞分诊和修复的团队,遇到一条编造的 CVE 时,AI agent 会尝试定位那个不存在的函数、生成补丁、基于不存在的代码建议修改——本意是帮安全团队修复真实漏洞,结果却把整个团队引向完全错误的方向,引入不必要的变更、浪费大量时间。
给你的实用建议
要避开这类漏洞噪音:
- 不要盲目相信未经验证的来源新发布的 CVE,尤其是未知的 GitHub 账户。
- 调查 Critical 评分是否与漏洞实际情况匹配。
- 确认你的环境是否真的受该 CVE 影响。
- 尽可能在安全环境里用提供的 PoC 复现。
JFrog 已把发现正式报告给 GHSA、Red Hat 和 NVD,协助清理这些记录。
这个案例值得每个开发者记住:当 AI 生成内容可以伪造"专业"的漏洞报告时,批判性验证能力本身就是安全基础设施的一部分。下次看到一条引用了具体行号和函数的"高危漏洞"通告,先问一句:这些行号在那个版本里真的存在吗?
© 2026 四月
原文链接:https://www.aprilzz.com/tutorials/sqlite-fake-cve-llm-slop
相关文章
SQLite 藏了 16 年的 WAL-Reset 损坏 bug:检查你的版本,三步升级修复
SQLite 3.7.0 到 3.51.2 存在 WAL-Reset 竞态 bug,特定条件下导致数据库静默损坏,Tailscale 半年踩坑 19 次。本文教你检查 SQLite 版本、确认是否受影响,并安全升级到修复版本。
内网服务 TLS 证书最佳实践:用 Split-Horizon DNS 告别自签名证书
无需自签名证书、无需手动信任每个客户端,通过 Split-Horizon DNS + Let's Encrypt + 反向代理 WAF 实现内网服务的自动化 TLS 方案
Homebrew 6.0 升级迁移实战指南:掌握 Tap Trust、沙箱机制等关键新特性
Homebrew 6.0.0 正式发布,带来了 Tap Trust 安全机制、Bubblewrap Linux 沙箱、默认内部 JSON API、brew bundle 并行安装等一系列重大更新。这篇教程带你逐一了解新特性、完成安全升级迁移。