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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sqlite-wal-pagesize — SQLite 3.53.4 - 高危 - 本地 - 信息泄露 - WAL/DB 页大小不匹配导致未初始化页尾部 | Kitploit
工具/GitHubGitHub/abraxas/sqlite-wal-pagesize
内存取证漏洞分析漏洞利用信息收集论文与研究数据库安全实验室与实践
GitHubabraxas/sqlite-wal-pagesize

sqlite-wal-pagesize

SQLite 3.53.4 - 高危 - 本地 - 信息泄露 - WAL/DB 页大小不匹配导致未初始化页尾部

查看仓库
86天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - sqlite-wal-pagesize

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

sqlite-wal-pagesize

类别: 信息泄露 影响范围: 本地

SQLite 3.53.4(b09c88c)在将 WAL 帧短读入完整 pager 页时,仍未对尾部执行 memset。walIndexRecover 接受 [512, SQLITE_MAX_PAGE_SIZE] 范围内任意 2 的幂次方 WAL 页大小,且从不将其与数据库页大小进行比较。随后被回收的 pcache 槽位会通过普通 SQL 返回先前的堆/页字节。

实验环境:4096 页的 WAL 模式 .db,同级 -wal 头部页大小为 512,SELECT b FROM t 返回了 2000 字节。超出 512 字节帧的尾部内容为 SQLITE-WAL-PAGESIZE-WITNESS。并非 RCE。

ID暂无 CVE
类别信息泄露(通过 SQL 泄露未初始化的 pager 尾部)
影响范围本地(不可信的 .db 加上同级 -wal)
CWECWE-908、CWE-200
CVSS高危:7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
产品SQLite(Hwaci)
受影响版本3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69);SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
认证无(受害者打开攻击者提供的文件)
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18830

攻击者能做什么

提供一个 WAL 模式的 .db 以及一个同级 -wal,其头部页大小是比数据库更小的有效 2 的幂次方。恢复过程会接受它。sqlite3WalReadFrame 仅将 WAL 帧大小复制到按 .db 大小分配的 pager 缓冲区中。一个声称负载大于该帧的表叶子单元会从被回收的 pcache 尾部得到满足。对该 blob 执行 SELECT / substr() / hex() 会返回同一进程中先前页残留的 pager/堆字节。

反向不匹配(WAL 大于 pager)会在检查点时产生 SQLITE_CORRUPT。此残留仅存在于较小 WAL 的读取路径中。并非 RCE。

我是如何发现的

在后续主干残留矩阵之后,对 3.53.4 进行了二十次源码搜寻。Winter 在论坛上将其报告为 2026-08-17T15:54:41Z。主干 f9b4ee3695 / branch-3.53 4fde87b2a0(2026-08-16)晚于本次 GA(2026-07-24)。在此固定版本上,sqlite3WalReadFrame 仍然是 (nOut>sz ? sz : nOut),且未对尾部执行 memset。

弯路:早期的一个叶子单元格式错误,SELECT 返回了 SQLITE_CORRUPT rc=11。可用的那个单元在 4096 字节的 pager 页上,跨 512 字节帧声称了 2000 字节的本地负载。

实验环境

cd lab
./run.sh

从官方源码 zip 构建 SQLite 3.53.4。Compose sqlite-wal-pagesize。发布到 127.0.0.1:18830。用 48 个 4000 字节的见证行预热 pcache,然后对短读叶子执行 SELECT b FROM t。

SUCCESS sqlite-wal-pagesize how=wal-shortread-pcache-tail len=2000 rootpage=2 SQLITE-WAL-PAGESIZE-WITNESS

修复方案

在恢复期间比较 WAL 头部页大小与数据库页大小。当二者不一致时,拒绝该 WAL 或完全初始化 pager 页:

if( nOut>sz ){
  memset(pOut+sz, 0, nOut-sz);
  nOut = sz;
}

该补丁块位于本次 GA 之后的主干上。它不在 3.53.4 中。

参考资料

  • sqlite.org/src 标签 version-3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/wal.c sqlite3WalReadFrame、walIndexRecover
  • src/pager.c readDbPage
  • 论坛 2026-08-17T15:54:41Z(Winter)
下载工具