CVE-2026-80104DB-GPT 这一 AI 应用框架中一个严重程度为 9.8 的路径遍历和任意文件写入漏洞,公告将 v0.8.1 列为修复版本。这个说法准确,但严重不完整:v0.8.1 是 唯一 包含该修复的已发布版本。

我们核查了什么,以及如何核查

该防护是一项名为 _validate_upload_filename 的函数,于 2026 年 5 月 21 日 加入,用于拒绝空字节、绝对 POSIX 和 Windows 路径,以及任何包含多个路径组件的文件名。我们分别获取了 v0.8.1 标签和 v0.8.2 标签下的相关源文件并进行了对比。在 v0.8.1 中,该函数存在;而在 v0.8.2——于今天早些时候发布——中它已消失,处理程序在将文件名与上传目录拼接并写入字节之前,直接读取 filename = file.filename。没有规范化,也没有包含性检查。

一个修复是如何消失的

这次丢失可追溯到一个在修复落地前切出的功能分支。当该分支在 6 月合并时,其中那份早于 5 月 21 日的文件版本替换了已打补丁的版本。并不存在有意回滚;只是同一函数的旧副本覆盖了防护逻辑,这也是为什么没有变更日志记录它。

常见表述哪里错了

公告中的“已修复版本”字段通常会被理解为 “该版本以及其后的所有版本。” 扫描器、依赖机器人以及运维人员都会按这个思路处理。可在这里,这个字段只是 一个点,而不是一个下限:团队读到公告后升级到最新版本,做法恰恰相反,结果落到仍有漏洞的代码上,却误以为已经修补。公告本身并没有错——错的是一种并不成立的默认假设。

身份验证让问题更糟

上传路由唯一的依赖是一个源代码注释为 “Mock User Info” 的函数。无论是否提供任何用户头,它都会返回一个 role="admin" 的用户对象。两条分支返回的都是管理员。这是当前已发布代码,而不是一个废弃标签——因此无需认证即可触发文件写入原语。