abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · 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) |
| CWE | CWE-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 之后。
b09c88c14082339b66c7b7158d609a771e64ca69)sessionChangesetApply :5619,sessionUpdateFind :4381-4412