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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sqlite-fj-using-auth — SQLite 3.53.4 - 高危 - 本地 - 权限残留 - FULL JOIN USING 跳过 sqlite3AuthRead | Kitploit
工具/GitHubGitHub/abraxas/sqlite-fj-using-auth
身份验证与授权权限提升静态分析漏洞分析代码分析漏洞利用论文与研究数据库安全
GitHubabraxas/sqlite-fj-using-auth

sqlite-fj-using-auth

SQLite 3.53.4 - 高危 - 本地 - 权限残留 - FULL JOIN USING 跳过 sqlite3AuthRead

查看仓库
66天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - sqlite-fj-using-auth

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

sqlite-fj-using-auth

类别: 权限残留 可达性: 本地

SQLite 3.53.4(b09c88c / SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc)- Hwaci

lookupName() 将 FULL JOIN USING 列重写为 coalesce(...)(TK_FUNCTION)。sqlite3AuthRead 仅对 TK_COLUMN / TK_TRIGGER 运行,因此 USING 列永远不会触发 SQLITE_READ 回调。一个安装了 sqlite3_set_authorizer 并对 t2.x 的 READ 执行 DENY/IGNORE 的嵌入方,仍然可以通过 SELECT x FROM t1 FULL JOIN t2 USING(x) 返回该列。

默认打开时授权器处于关闭状态。这是该 C API 的残留问题。不是 RCE。FULL JOIN ON 和 LEFT JOIN USING 仍然被拒绝 / 无泄漏。显式的 coalesce(t2.x) 仍然会进行授权。

ID暂无 CVE
类别权限残留(列级授权器跳过)
可达性本地(嵌入方 sqlite3_set_authorizer;攻击者 SQL)
CWECWE-863、CWE-284
CVSS高危:7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
产品SQLite(GitHub 镜像 sqlite/sqlite)
受影响版本3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69)。仅 3.54 的授权器 FULL JOIN USING 修复(2cb2287768)不在该 GA 版本上。
认证嵌入方安装了 sqlite3_set_authorizer;默认回调为 NULL
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18840。见证字符串。不是 RCE。

攻击者能做什么

针对将 sqlite3_set_authorizer 安装为列 ACL 的嵌入方,准备 SELECT x FROM t1 FULL JOIN t2 USING(x)(或 NATURAL FULL JOIN)。裸 SELECT x FROM t2 会被拒绝(SQLITE_AUTH 23)。FULL JOIN USING 形式会返回被拒绝 READ 的列。零个 READ t2.x 回调触发。

除非嵌入方安装授权器,否则授权器处于关闭状态。默认 sqlite3_open 不属于此残留问题。不是 RCE。

我是如何发现的

在 PHP 之后对 3.53.4 进行了二十次源码搜寻。跳过列表已经指出了 3.54 的 FULL JOIN USING 授权器检查提交。它在最新 GA 上仍然缺失。在 lookupname_end 处 pExpr->op 为 TK_FUNCTION,因此 AuthRead 门控永远不会运行。WRC_Prune 还会阻止遍历器深入 coalesce 参数。

lookupname_end:
  if( cnt==1 ){
#ifndef SQLITE_OMIT_AUTHORIZATION
    if( pParse->db->xAuth
     && (pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER)
    ){
      sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
    }
#endif

已记录的弯路:将授权器视为默认开启;期望 LEFT JOIN USING 或 FULL JOIN ON 泄漏;期望显式 coalesce(t2.x) 跳过 AuthRead;在 3.54.0 仍为草案时将其固定。

实验环境

cd lab
./run.sh

构建官方 sqlite-src-3530400 amalgamation。测试框架为 lab/auth.c。回环 127.0.0.1:18840。授权器 DENY READ t2.x。SELECT x FROM t2 被拒绝。SELECT x FROM t1 FULL JOIN t2 USING(x) 返回见证,0 个 READ t2.x。FULL JOIN ON 被拒绝。LEFT JOIN USING 无泄漏。IGNORE 基线为 NULL;IGNORE FULL JOIN USING 仍然泄漏。

SUCCESS sqlite-fj-using-auth how=full-join-using-skip-authread baseline=denied fj-using=witness fj-on=denied left-using=no-leak SQLITE-FJ-USING-AUTH-WITNESS

修复方案

在 coalesce 重写之后,对每个 pFJMatch 子节点循环调用 sqlite3AuthRead,就像主干 2cb2287768 / Git 5694c3bb 为 3.54 所做的那样。仅授权 a[0](bbd69ce274)是不够的。LEFT JOIN USING 和 FULL JOIN ON 已经会授权;它们不属于此残留问题。

参考资料

  • sqlite.org/src 标签 version-3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/resolve.c lookupName coalesce 重写与 AuthRead 门控
  • src/auth.c sqlite3AuthRead / sqlite3AuthReadCol
  • 论坛 2026-07-24T02:52:08Z / 2026-05-31T02:00:37Z
下载工具