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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sqlite-xfer-auth — SQLite 3.53.4 - 高危 - 本地 - 权限残留 - INSERT SELECT xfer 跳过源 READ | Kitploit
工具/GitHubGitHub/abraxas/sqlite-xfer-auth
漏洞分析代码分析漏洞利用安全虚拟化论文与研究数据库安全实验室与实践
GitHubabraxas/sqlite-xfer-auth

sqlite-xfer-auth

SQLite 3.53.4 - 高危 - 本地 - 权限残留 - INSERT SELECT xfer 跳过源 READ

查看仓库
229天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - sqlite-xfer-auth

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

技术分析文章:https://abraxaslabs.tech/research/sqlite-xfer-auth

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)
CWECWE-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 与 src 模式兼容且允许 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 的严重/高危漏洞排查。授权器在 sqlite3_set_authorizer 中有文档说明。INSERT 授权仅针对 dest 表(insert.c:969)。xfer 在 sqlite3Select() 之前被采用(insert.c:1020-1038)。xferOptimization 复制记录。在此版本上对 insert.c 执行 grep:仅有一处 sqlite3AuthCheck,没有 sqlite3AuthRead。SQLITE_OMIT_XFER_OPT 并非默认构建标志。

论坛 2026-05-21T03:31:22Z。主干 d1cdb817cafd03a4 仅适用于 3.54。DRH 表示:这是新特性,不会进入 branch-3.53。

实验环境

cd lab
./run.sh

构建 amalgamation 3.53.4 以及 lab/xfer_auth.c。组合 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)。在此之前,对某张表 DENY READ 的嵌入方仍必须对任何兼容的 dest 拒绝 INSERT,或者使用 -DSQLITE_OMIT_XFER_OPT 编译。

参考资料

  • sqlite.org/src 标签 version-3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/insert.c 中的 sqlite3AuthCheck INSERT dest,xferOptimization 位于 sqlite3Select 之前
  • 论坛 2026-05-21T03:31:22Z · 签入 d1cdb817cafd03a4
  • sqlite3_set_authorizer
下载工具