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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sqlite-session-ncol — SQLite 3.53.4 - 高危 - 本地 - 堆越界写入 - 会话变更集同名 nCol 增长 | Kitploit
工具/GitHubGitHub/abraxas/sqlite-session-ncol
内存取证漏洞分析漏洞利用模糊测试二进制分析论文与研究数据库安全
GitHubabraxas/sqlite-session-ncol

sqlite-session-ncol

SQLite 3.53.4 - 高危 - 本地 - 堆越界写入 - 会话变更集同名 nCol 增长

查看仓库
76天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - sqlite-session-ncol

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

sqlite-session-ncol

类别: 堆越界写 可达性: 本地

SQLite 3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69,SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc)启用 -DSQLITE_ENABLE_SESSION。一个两块的 changeset 复用表名 t,先 nCol=2 后 nCol=64,跳过了 sessionTableInfo 重置(sqlite3session.c:5619),并在第一块的 aUpdateMask 之后执行 memset。在 sessionUpdateFind 中触发 ASan WRITE,大小为 12。对照组单个 2 列 UPDATE 的 apply-rc=0。

除非开启 SESSION,否则不是默认 amalgamation。CVE-2026-50812 NPD 已在 3.53.2+ 上关闭。不是武器化的 RCE payload。判定依据是 ASan WRITE。

ID暂无 CVE
类别堆越界写(ASan WRITE 大小为 12;未演示 RCE)
可达性本地(通过 sqlite3changeset_apply* 传入不可信 changeset)
CWECWE-787
CVSS高危:8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
产品SQLite Session 扩展(Hwaci)
受影响版本3.53.4(b09c88c)以 -DSQLITE_ENABLE_SESSION 编译
认证主机应用不可信 changeset
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18900。ASan WRITE-of-size-12 见证。

攻击者能做什么

应用一个不可信的 changeset,其第二个表块复用了表名但声明了更大的 nCol。堆越界写。需要编译扩展。除非开启 SESSION,否则不是默认 amalgamation。

第一个块根据 pIter->nCol 分配 aUpdateMask。后续同名块跳过了 sessionTableInfo 重置,并在旧分配之上 memset 一个更大的掩码。实验:nCol=2 然后 nCol=64 的 UPDATE。在 sessionUpdateFind 中触发 ASan WRITE,大小为 12。对照组单个 2 列 UPDATE 的 apply-rc=0。

不要把这个包当作 write-what-where gadget。ASan WRITE-of-size-12 才是判定依据。

我是如何发现的

在 3.53.2 FTS5 / session-NPD 浪潮之后,对 SQLite 3.53.4 进行了二十次源码搜寻。CVE-2026-50812 已关闭(sessionBindRow 将缺失值视为 SQLITE_CORRUPT)。Session 仍然仅以表名作为 SessionApplyCtx 的键。第二个块使用相同名称但声明了更大的列数,从而复用了 aUpdateMask。

已记录的弯路:将默认 amalgamation 视为在范围内(SESSION 是关闭的);重复提交 CVE-2026-50812;针对 2 列 schema 发送一个 nCol=64 的表块(schemaMismatch,无写入);声称从 12 字节的 memset 可实现 RCE。

实验环境

cd lab
./run.sh

ASan amalgamation 来自官方 sqlite-src-3530400 zip。额外编译选项 -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK。健康检查在 127.0.0.1:18900。将其绑定到 loopback。

SUCCESS sqlite-session-ncol how=asan-heap-write-sessionUpdateFind write-size=12 control-apply-rc=0 SQLITE-SESSION-NCOL-WITNESS

修复方案

当后续 changeset 表块复用名称时,像处理新名称那样重建 SessionApplyCtx:释放 aUpdateMask,重新运行 sessionTableInfo,拒绝比实际 schema 更大的 nCol。Trunk 3f57024aec / branch-3.53 a1dd7123d8(2026-08-17)在此 GA 之后。

参考资料

  • https://sqlite.org/src tag version-3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69)
  • https://github.com/sqlite/sqlite/blob/b09c88c14082339b66c7b7158d609a771e64ca69/ext/session/sqlite3session.c sessionChangesetApply :5619,sessionUpdateFind :4381-4412
  • 论坛 https://sqlite.org/bugs/info/2026-08-16T10:15:25Z
  • CVE-2026-50812 session NPD 已在 3.53.2+ 上关闭
下载工具