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 增长

查看仓库
198天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - sqlite-session-ncol

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

技术分析文章:https://abraxaslabs.tech/research/sqlite-session-ncol

sqlite-session-ncol

类别: 堆越界写(heap OOB write) 可达性: 本地

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

除非开启 SESSION,否则默认 amalgamation 不受影响。CVE-2026-50812 NPD 已在 3.53.2+ 上修复。这不是武器化的 RCE 载荷。判定依据(oracle)是 ASan WRITE。

ID暂无 CVE
类别堆越界写(ASan WRITE of size 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。ASan 在 sessionUpdateFind 中报告大小为 12 的 WRITE。对照组为单条 2 列 UPDATE,apply-rc=0。

不要将此包视为 write-what-where 利用原语。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

来自官方 sqlite-src-3530400 zip 的 ASan 合并版本。额外编译 -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK。健康检查位于 127.0.0.1:18900。将其绑定到回环地址。

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+ 上关闭
下载工具