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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sqlite-cte-nest — SQLite 3.53.4 - 高危 - 本地 - 崩溃 - 嵌套 CTE 跳过 nNestSel 视图深度上限 | Kitploit
工具/GitHubGitHub/abraxas/sqlite-cte-nest
静态分析漏洞分析漏洞利用模糊测试论文与研究数据库安全
GitHubabraxas/sqlite-cte-nest

sqlite-cte-nest

SQLite 3.53.4 - 高危 - 本地 - 崩溃 - 嵌套 CTE 跳过 nNestSel 视图深度上限

查看仓库
6天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - sqlite-cte-nest

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

sqlite-cte-nest

类别: 崩溃 可达性: 本地

SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci

sqlite3ResultSetOfSelect 会递增 nNestSel,并在链达到 SQLITE_LIMIT_EXPR_DEPTH 时报错 VIEWs and/or subqueries nested too deep。在此版本上,嵌套 VIEW 已经会触及该上限。位于 select.c:5754 的 CTE 附加(sqlite3SrcItemAttachSubquery)不会递增 nNestSel。随后 selectExpander / sqlite3WalkSelect 会递归遍历 CTE 链,直到 C 栈耗尽。

一个小的 CTE 链可以返回一行。N=25000 的嵌套 FROM 会触发解析器的 Recursion limit,不会崩溃。在 .limit expr_depth 20 下,嵌套 VIEW 会报 too-deep 错误。N=25000 的 CTE 会导致 ASan 栈溢出。不是 RCE。

ID暂无 CVE
类别崩溃(selectExpander 中的 ASan 栈溢出;未证明 RCE)
可达性本地(不可信 SQL 或嵌套 CTE schema)
CWECWE-674
CVSS高危:7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
产品SQLite(GitHub 镜像 sqlite/sqlite)
受影响版本3.53.4 (b09c88c);后续 trunk 中 CTE nNestSel 的遗留问题
认证不可信 SQL 或植入的 WITH 链
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18810。ASan amalgamation。崩溃见证。

攻击者能做什么

提供一个很长的 CTE 链,作为 SQL 或作为不可信 .db 上的 VIEW 主体:

WITH c0 AS (SELECT 1),
     c1 AS (SELECT * FROM c0),
     ...
     cN AS (SELECT * FROM cN-1)
SELECT * FROM cN;

selectExpander 会将每个 CTE 作为嵌套 FROM 子查询遍历。nNestSel 始终不变。宿主进程会因 C 栈耗尽而死亡。嵌套 VIEW 已经受到上限限制。嵌套 FROM 会触及解析器递归限制。这个遗留问题就是 CTE 附加路径。SQLite 不会将 CTE 名称求值为 shell。是崩溃,不是 RCE。

我是如何发现的

对 https://github.com/sqlite/sqlite 标签 https://github.com/sqlite/sqlite/releases/tag/version-3.53.4 进行了二十次源码搜寻。在此版本上,嵌套 VIEW 已受到上限限制(3f3fb9b638 / branch-3.53 38430aa5ed,2026-06-16)。CTE 附加则没有。Trunk f547308713(2026-10-05)在此 GA 之后。

已记录的弯路:将嵌套 VIEW 当作崩溃(它们会报 too-deep 错误);将 N=25000 的嵌套 FROM 当作崩溃(解析器 Recursion limit);将 5 个 CTE 的链当作上限适用的证明。

实验环境

cd lab
./run.sh

官方 sqlite-src-3530400 zip、ASan amalgamation、compose sqlite-cte-nest、发布到 127.0.0.1:18810。将其绑定到 loopback。不要将此指向他人的 SQLite。

SUCCESS sqlite-cte-nest how=asan-stack-overflow crash-n=25000 small-cte=ok nested-views=too-deep nested-from=rejected SQLITE-CTE-NEST-WITNESS

修复方案

在 CTE 附加时像 sqlite3ResultSetOfSelect 对 VIEW 所做的那样递增 nNestSel,并在达到 SQLITE_LIMIT_EXPR_DEPTH 时报错。Trunk f547308713(2026-10-05,"Limit the depth of recursion for CTEs using SQLITE_LIMIT_EXPR_DEPTH")就是这类补丁。它不在 3.53.4 中。

参考资料

  • https://github.com/sqlite/sqlite 标签 https://github.com/sqlite/sqlite/releases/tag/version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • 规范来源 https://sqlite.org/src SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
  • src/select.c sqlite3ResultSetOfSelect (nNestSel++)、CTE 附加 :5754
  • src/walker.c sqlite3WalkSelectFrom 子查询遍历
  • selectExpander / sqlite3SelectExpand
  • 论坛 bug 2026-10-04T04:58:58Z;trunk f547308713
下载工具