Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sqlite-fts5-securedel — SQLite 3.53.4 - 高危 - 本地 - 崩溃 - FTS5 secure-delete PutVarint 页脚越界 | Kitploit
工具/GitHubGitHub/abraxas/sqlite-fts5-securedel
静态分析内存取证漏洞分析漏洞利用模糊测试二进制分析论文与研究数据库安全
GitHubabraxas/sqlite-fts5-securedel

sqlite-fts5-securedel

SQLite 3.53.4 - 高危 - 本地 - 崩溃 - FTS5 secure-delete PutVarint 页脚越界

查看仓库
287天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - sqlite-fts5-securedel

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sqlite-fts5-securedel

技术分析文章:https://abraxaslabs.tech/research/sqlite-fts5-securedel

sqlite-fts5-securedel

类别: 崩溃 可达性: 本地

SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) - Hwaci

fts5DoSecureDelete 在 nPg = iPgIdx 之后使用 sqlite3Fts5PutVarint 重建 FTS5 叶子页脚。页脚解码得到的键偏移量没有针对原始 blob 做上限检查,因此 PutVarint 游标会越过 nn + FTS5_DATA_PADDING(20)。典型情况下需要额外的 SQLITE_ENABLE_FTS5。攻击数据库已经使用了 secure-delete。

这是后续 trunk Fossil 9cd4f9e920 / Git d9de6eedbe91 / branch-3.53 34171bee08(2026-08-11,YEONBA)的遗留问题。该提交晚于本次 GA。它不是 CVE-2026-11824:在此版本上,fts5LeafRead 已经会拒绝 szLeaf<4。

ID暂无 CVE
类别崩溃(ASan 大小为 1 的 WRITE;未演示 RCE)
可达性本地(打开特制的 FTS5 数据库,然后执行 DELETE/flush)
CWECWE-787
CVSS高危:7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
产品SQLite(GitHub 镜像 sqlite/sqlite)
受影响版本3.53.4 SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
认证无(不可信的索引文件)
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18860。ASan 堆写入。无 RCE 载荷。

攻击者能做什么

打开一个已经使用过 secure-delete 的特制 FTS5 数据库,然后执行 DELETE(或任何会触发 secure-delete 刷写的写入操作),使 fts5DoSecureDelete 将页脚 varint 写到 Fts5Data 之外。导致崩溃 / ASan 大小为 1 的堆写入。未演示 RCE。不是 CVE-2026-11824。

仅执行 MATCH 不会触发此缺陷。触发条件是 DELETE/flush。特制文件不需要关闭 SQLITE_DBCONFIG_DEFENSIVE。

我是如何发现的

在完成其他数据库和 HTTP 服务器版本定位后,对 SQLite 3.53.4 进行了二十次源码排查。CVE-2026-11822 / CVE-2026-11824 在此代码树上已修复(fts5LeafRead 的 szLeaf<4)。YEONBA 后续 trunk 的边界检查则没有。3.53.4 的 fts5corruptB.test 文件仍止于测试 3.2;trunk 测试 4.0 则是 hexdb 加上 DELETE FROM t WHERE rowid = 1。

iPgIdx -= nShift;
nPg = iPgIdx;
fts5PutU16(&aPg[2], iPgIdx);

for(iIdx=0; iIdx<nIdx; /* no-op */){
  u32 iVal = 0;
  iIdx += fts5GetVarint32(&aIdx[iIdx], iVal);
  iKeyIn += iVal;
  if( iKeyIn!=iDelKeyOff ){
    int iKeyOut = (iKeyIn - (iKeyIn>iOff ? nShift : 0));
    nPg += sqlite3Fts5PutVarint(&aPg[nPg], iKeyOut - iPrevKeyOut);
    iPrevKeyOut = iKeyOut;
  }
}

ext/fts5/fts5_index.c:5514-5544。iKeyIn 是一个 32 位 int。后续主干保留了原始的 nPg,使用 i64 iKeyIn,并在 PutVarint 之前拒绝 iKeyIn>nPg。

错误方向:将 CVE-2026-11824 当作此漏洞;使用 MATCH 而非 DELETE;一个活跃的 CREATE/INSERT 植入使 szLeaf 保持在范围内且未溢出;在没有载荷的情况下将 Winter 的 WAL 加 FTS5 链称为 RCE。

实验环境

cd lab
./run.sh

来自官方 sqlite-src-3530400 zip 的 ASan 合并构建,-DSQLITE_ENABLE_FTS5。需要 Hexdb lab/yeonba-fts5corruptB-4.hexdb(trunk fts5corruptB.test 4.0)。绑定回环地址 127.0.0.1:18860。Compose 项目 sqlite-fts5-securedel。

SUCCESS sqlite-fts5-securedel how=asan-heap-buffer-overflow-write-1-fts5DoSecureDelete db=yeonba-hexdb bytes=5120 SQLITE-FTS5-SECUREDEL-WITNESS

ASan 栈帧:fts5PutVarint64 -> sqlite3Fts5PutVarint -> fts5DoSecureDelete / fts5FlushSecureDelete。

修复方案

保留原始 nPg。将 iKeyIn 扩展为 i64。在调用 sqlite3Fts5PutVarint 之前拒绝 iKeyIn>nPg。即 Fossil 9cd4f9e920 / branch-3.53 34171bee08。将其 cherry-pick 到 3.53 上。

参考资料

  • https://sqlite.org/src 标签 version-3.53.4 Git b09c88c14082339b66c7b7158d609a771e64ca69
  • ext/fts5/fts5_index.c fts5DoSecureDelete、fts5FlushSecureDelete、fts5LeafRead
  • ext/fts5/fts5_varint.c sqlite3Fts5PutVarint
  • 主干修复 Fossil 9cd4f9e920 / Git d9de6eedbe91 / branch-3.53 34171bee08(2026-08-11,YEONBA)
  • CVE-2026-11824 是已关闭的 szLeaf<4 父问题,而非此遗留问题
下载工具