教程·阅读约 2 分钟·
SQLite 的 6 个'致命漏洞'全是 AI 编的:如何识别 LLM 垃圾 CVE

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 的研究人员深入验证时,所有指控都站不住脚:

  1. 引用的代码在那些版本里根本不存在,或者指向无关逻辑;
  2. 测试 PoC 载荷时它们不生效(没有触发任何崩溃);
  3. 这些 CVE 没有一个出现在 SQLite 的官方漏洞页面(sqlite.org/cves.html,跟踪真实漏洞的金标准);
  4. 用 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-51302exprComputeOperands() 中的 UAF9.8 Critical该函数在 3.41 中不存在(2025 年中才加入);sqlite3ReleaseTempReg() 只是回收寄存器索引,不涉及堆释放
CVE-2026-51303ExprListDelete() 反向引用 UAF9.8 Critical结构体中没有反向引用指针;3.51.2 到 3.51.3 的 diff 显示 src/expr.c 完全没变,"补丁"是编造的
CVE-2026-51300sqlite3ExprDelete() UAF9.1 Critical引用的行号(1012、1026)一个是注释、一个是内存分配调用;指针在作用域末尾从不被复用
CVE-2026-51297jsonBlobEdit() 的 UAF8.8 High该函数在目标版本中不存在(随 JSONB 实现才引入)
CVE-2026-51296jsonRemoveFunc UAF7.5 High引用行号 3555、3575,但 3.41.0 的 src/json.c 总共只有 2706 行
CVE-2026-51304pOrderBy->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 给出了四条最有效的红旗:

  1. 缺少厂商佐证:官方维护者的安全页面(如 sqlite.org/cves.html)上没有任何提及。
  2. 提交历史缺失:参考字段里没有链接任何 commit hash 或 PR。
  3. 元数据矛盾:CPE 产品定义为空,或版本范围与通告叙事冲突。
  4. 不存在的代码引用:引用目标版本中不存在的函数,或行号超出文件末尾。

假 CVE 的真实危害

这些垃圾 CVE 不只是噪音,它们有实际破坏力:

  • 企业安全团队把时间浪费在调查和修补不存在的漏洞上,污染漏洞数据库。
  • 在"Critical 自动优先处理"或按漏洞评分自动开票的环境里,编造的 CVE 会变成真实的负担。
  • 更危险的场景:用 AI 自动化漏洞分诊和修复的团队,遇到一条编造的 CVE 时,AI agent 会尝试定位那个不存在的函数、生成补丁、基于不存在的代码建议修改——本意是帮安全团队修复真实漏洞,结果却把整个团队引向完全错误的方向,引入不必要的变更、浪费大量时间。

给你的实用建议

要避开这类漏洞噪音:

  • 不要盲目相信未经验证的来源新发布的 CVE,尤其是未知的 GitHub 账户。
  • 调查 Critical 评分是否与漏洞实际情况匹配。
  • 确认你的环境是否真的受该 CVE 影响。
  • 尽可能在安全环境里用提供的 PoC 复现

JFrog 已把发现正式报告给 GHSA、Red Hat 和 NVD,协助清理这些记录。

这个案例值得每个开发者记住:当 AI 生成内容可以伪造"专业"的漏洞报告时,批判性验证能力本身就是安全基础设施的一部分。下次看到一条引用了具体行号和函数的"高危漏洞"通告,先问一句:这些行号在那个版本里真的存在吗?

分享到
微博Twitter

© 2026 四月

原文链接:https://www.aprilzz.com/tutorials/sqlite-fake-cve-llm-slop