abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-xfer-auth
类别: 权限残留 可达性: 本地
SQLite 3.53.4(b09c88c,SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc)对 INSERT INTO dest SELECT * FROM src 仍然走 xferOptimization 快速路径。sqlite3AuthCheck 仅对 dest 执行 SQLITE_INSERT。该复制过程从不对 src 调用 sqlite3Select 或逐列的 sqlite3AuthRead。SELECT * FROM src 会被拒绝。INSERT SELECT 却复制了见证数据。授权器日志为 INSERT:dest。
除非嵌入方安装授权器,否则授权器处于关闭状态。不是 RCE。DRH 将 Fossil d1cdb817 视为 3.54 的功能,而非 3.53 的缺陷修复。3.54.0 仍为草稿。
| ID | 暂无 CVE |
| 类别 | 权限残留(READ 被拒的表复制) |
| 可达性 | 本地(嵌入方 sqlite3_set_authorizer) |
| CWE | CWE-863 |
| CVSS | 高危:7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| 产品 | SQLite(Hwaci) |
| 受影响版本 | 3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69) |
| 认证 | 针对已安装授权器的本地 SQL,该授权器对 src 拒绝 READ/SELECT 并允许对 dest 执行 INSERT |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1:18850 |
当 dest 模式兼容且允许 INSERT 时,构造 INSERT INTO dest SELECT * FROM src。原始 B-tree 记录从 READ 被拒的源表离开并落入 dest。裸 SELECT * FROM src 会返回 SQLITE_AUTH。xfer 路径不编译 SELECT,因此源端 SQLITE_SELECT、表级 SQLITE_READ 以及逐列的 sqlite3AuthRead 均不会触发。
需要嵌入方将 sqlite3_set_authorizer 安装为不可信 SQL / 列 ACL 门禁。默认库中该回调为 NULL。不是 RCE。
与本次 GA 上其他残留问题相同的 3.53.4 Crit/High 排查。授权器文档位于 sqlite3_set_authorizer。INSERT 授权仅针对 dest 表(insert.c:969)。xfer 在 sqlite3Select() 之前被采用(insert.c:1020-1038)。xferOptimization 复制记录。在此 pin 上对 insert.c 的 grep:一处 sqlite3AuthCheck,无 sqlite3AuthRead。SQLITE_OMIT_XFER_OPT 不是默认构建标志。
论坛 2026-05-21T03:31:22Z。Trunk d1cdb817cafd03a4 仅适用于 3.54。DRH:新功能,不会进入 branch-3.53。
cd lab
./run.sh
构建 amalgamation 3.53.4 加上 lab/xfer_auth.c。Compose sqlite-xfer-auth。绑定 127.0.0.1:18850。Oracle 是来自进程内授权器的 JSON:SELECT * FROM src 被拒;INSERT INTO dest SELECT * FROM src 成功;dest 含有 SQLITE-XFER-AUTH-WITNESS;插入操作仅为 INSERT:dest。
SUCCESS sqlite-xfer-auth how=xfer-opt-skip-src-read select-src=denied insert-select=ok dest-has-witness=yes SQLITE-XFER-AUTH-WITNESS
按照 3.54 d1cdb817 的方式对源端进行授权:如果注册了授权器,xferOptimization 必须对 src 执行 sqlite3AuthCheck SELECT/READ(或拒绝快速路径并回退到 sqlite3Select)。在此之前,对某表拒绝 READ 的嵌入方仍必须拒绝向任何兼容 dest 的 INSERT,或使用 -DSQLITE_OMIT_XFER_OPT 编译。
b09c88c14082339b66c7b7158d609a771e64ca69)src/insert.c 中 sqlite3AuthCheck INSERT dest,xferOptimization 位于 sqlite3Select 之前