报告问题
← 全部文章

安全

一个一键安装的 Nextcloud 应用被植入后门五周,却没人被告知。把它停用并不解决问题

CVE-2026-110447 让一个无需认证的请求,通过 Collabora 内置 CODE 应用在 Nextcloud 服务器上执行命令。补丁 9 月 11 日发布,却未提及安全;日志里最早的攻击发生在 9 月 10 日;公告直到 10 月 14 日才出来。

MAI
Nextcloud 在自家媒体资料包中发布的标识:由三条嵌套弧线构成的云形图案,旁边是小写的「nextcloud」字标。

Collabora 于 10 月 14 日发布了 CVE-2026-110447 的安全公告。这是 richdocumentscode 中一处无需认证的操作系统命令注入漏洞——这个应用在 Nextcloud 应用商店里的名字是「Collabora Online – Built-in CODE Server」。CVSS v4 基础分 9.2,归类为 CWE-78。一个不带任何凭据的远程请求,就能以 Web 服务器运行账户的权限执行命令。26.4.303 之前的所有版本都受影响。

日期才是这件事的重点。补丁 9 月 9 日合入。管理员在日志里找到的第一个攻击请求是 9 月 10 日到达的。26.4.303 在 9 月 11 日发布,发布说明中没有一个字提到安全。公告则等到 10 月 14 日。整整五周里,这个漏洞同时处于「已修复」和「正被利用」两种状态,而真正把洞堵上的,只有那些本来就在例行更新的管理员。

影响范围

组件是否受影响状态
richdocumentscode — 内置 CODE Server26.4.303 之前的全部版本26.4.303 已修复
richdocuments — Nextcloud Office,未启用内置服务器否—
独立部署的 Collabora Online 服务器否—

修复版本要求 Nextcloud 30 或更高。漏洞由 GitHub 用户 wwwshellcodeit 报告,公告由 Collabora 的 Caolán McNamara 发布。

停用应用不是缓解措施

公告把这一点写得很直接:

仅停用该应用不足以规避此问题;必须升级到 26.4.303 及以上版本,或将其移除。

出问题的入口是一个名为 proxy.php 的 PHP 脚本,它位于应用自己的目录中,由 Web 服务器直接对外提供。Nextcloud 那边关于「应用是否已启用」的记录,根本不参与这个判断。那些看到「某个可选应用有严重漏洞」后点了停用、随即转身去做别的事的管理员,仍然暴露着。

公告里的第二个条件同样值得重视。攻击成立的时间窗,是内置 CODE 服务器没有在运行的那段时间——容器重启之后、升级过程中,或者进程崩溃以后。常规直觉是服务必须处于运行状态才会被攻击。这里恰恰相反:一次普通的维护性重启就是入口。这也意味着暴露是间歇性的,想验证的人在自己手上复现不出来。

真正被打中的是谁

CODE 是 Collabora Online Development Edition 的缩写,是 Collabora 面向评估与小规模部署、而非生产环境提供的免费构建版。在公告的讨论线程里,Collabora 的 Michael Meeks 回应说「这只影响 Development Edition」。这句话是准确的,同时也把暴露面说小了。

内置 CODE 服务器之所以存在,正是因为单独搭一台文档服务器很费事。它是 Nextcloud 应用商店里一键就能装上的那个选项,所以它恰恰装在没有运维团队的那些实例上:小型公益组织、学校、部门级文件共享、家里的服务器。而这些实例,也最不可能已经跑在 Nextcloud 30 上。在已经停止支持的 Nextcloud 29 及更早版本上,根本不存在可安装的修复版应用。官方给出的答案是升级整个平台,或者删掉这个应用。那些打算等一个清闲周末再做 Nextcloud 大版本升级的管理员,在那之前要一直抱着一个正在被实际利用的远程代码执行漏洞。

修复版之上的升级路径也不干净。9 月 24 日发布的 26.4.402,据报告在部分环境下会导致 CODE 服务器无法启动或文档无法打开,管理员已经回退到 26.4.303。标准建议是「升到最新版本」;而这里正确的指示是升到某个特定版本,然后停下。

应当采取的动作

把 richdocumentscode 升级到 26.4.303 或更高,或者移除该应用。停用不够。

如果这个应用在 9 月 10 日之后的任何时间点,曾以低于 26.4.303 的版本暴露在互联网上,那就不要假设自己被跳过了,而应当按「可能已被入侵」来处理。在公告线程中报告遭到攻击的管理员,在应用目录里发现了名称符合 shx*.php 形式的 Web shell;先确认是否存在,有就删除。把 Web 服务器访问日志回溯到至少 9 月 10 日,检查发往该应用代理端点的请求——具体要搜索的请求特征,Collabora 的公告和已公开的分析文章里都有。最后,把 Web 服务器账户能读到的一切——包括配置文件和已存储的文档——都当作可能已经泄露。目前报告的案例都没有拿到 root,这界定了损失的上限,但并不等于没有损失。

该在上游修的部分

CVE-2026-110447 与同一个代理中的 CVE-2025-66208 走的是不同代码路径,公告明确指出此前的修复并不能阻止这一次。大约一年之内,同一个很小的脚本上出了两份无需认证的命令注入公告——这说明的不是其中某一行代码,而是这个组件的设计。

披露的滞后是另一半问题。「安静地发出修复,可以为管理员争取到在攻击者发现之前打上补丁的时间」,这条惯例成立的前提,是攻击者还没发现。而这一次,他们在版本发布的前一天就已经进来了。一旦越过那个点,安静的补丁不再争取时间,它只是把防御方唯一需要的那条信息压住了。

Sources: Collabora Online advisory GHSA-g3vx-3m76-fghh, The Hacker News, BleepingComputer, IT-Connect, CVE-2026-110447 record

继续阅读