本文へ移動
English version →
重大 9.4 急ぎ度: 早めに

Group-Officeに認証後RCEの脆弱性、修正版あり

グループウェアのGroup-Officeに、ログインできる利用者がサーバー上で任意のOSコマンドを実行できる脆弱性が見つかりました。使っている系統の修正版(6.8.167・25.0.102・26.0.27)へ更新し、未更新だった期間があれば侵害の跡も確認してください。

CVE-2026-63011 公開 更新 執筆・監修: 佐々木 航 人が監修しながらAIを活用して執筆
画像は生成 AI で作成したイメージです

急ぎ度: 早めに

CVSS v4が9.4で、有効なアカウントが1つあればネットワーク越しにサーバー上のOSコマンドを実行されるおそれがありますが、修正版はすでに公開されています。

関係があるか

Group-Officeを自社サーバーで運用している組織が対象です。一般利用者のアカウントでも悪用できるため、社内だけで使っている環境も含まれます。

製品影響を受ける版修正版
Group-Office 6.8系 6.8.167より前 6.8.167
Group-Office 25.0系 25.0.102より前 25.0.102
Group-Office 26.0系 26.0.27より前 26.0.27

確かめ方

  1. 1運用中のGroup-Officeの版を確認し、6.8系・25.0系・26.0系のどれか、その系統の修正版より前かどうかを照らし合わせます。導入時の配布ファイル名(groupoffice-25.0.102.tar.gzの形式)が残っていれば、版の手がかりになります。
  2. 2上記以外の系統を使っている場合は、Intermeshの勧告とリリースの告知で対象かどうかを確認してください。
  3. 3Webアプリが外部に公開されているか、どの範囲の利用者がアカウントを持っているかも洗い出します。必要な権限の低さから、アカウント数が多いほど影響範囲は広がります。

何が起きたか

Group-Officeの連絡先ラベル機能に、ログインした利用者が送った文字列をサーバー側でそのままPHPのコードとして実行してしまう脆弱性があります。成功すると、Webサーバーの実行ユーザー(www-data)の権限で任意のOSコマンドが動きます。

原因は、Contact/labelsというJMAPのエンドポイントが、利用者の指定するテンプレート文字列(tplパラメーター)を制限なくテンプレートの解析処理に渡すことにあります。解析処理は、テンプレート内の代入ブロックの式を展開したあと、eval()で実行します。実行前には式を検査する処理が入っており、未知の語を引用符で囲って関数として呼べなくする作りでした。ところがPHP 7以降は、括弧で囲んだ文字列を関数として呼び出せるため、この検査をすり抜けます。分類はCWE-94(コードインジェクション)、CWE-95(eval処理での不適切な無害化)、CWE-184(不完全な禁止リスト)です。

GitHubの勧告は2026年7月2日付で、25.0.102のリリースページには5月11日の日付があります。CVEの登録(2026年11月10日)より前に修正版が出ているため、更新済みの環境も多いでしょう。今の問いは、自社が更新済みかどうかと、未更新の間に侵害されていないかです。

攻撃の流れ

  1. 1

    ログイン

    攻撃者がGroup-Officeの有効なアカウントでログインし、セッションの認証情報を得ます。

  2. 2

    細工した送信

    連絡先ラベル機能のエンドポイントに、細工したテンプレート文字列を1回送ります。

  3. 3

    検査をすり抜け

    式の検査処理が不十分なため、文字列が関数呼び出しとして通ってしまいます。

  4. 4

    コマンド実行

    eval()の実行によって、Webサーバー権限でOSコマンドが動きます。

公開されている情報をもとにした流れの例です。

どう悪用されるか

悪用にはGroup-Officeの有効なアカウントが要ります。管理者権限や特定モジュールの利用権限は不要で、一般利用者のアカウントで足ります。この機能の認証処理はログイン済みかどうかしか確認せず、モジュールごとのアクセス制御を通らないためです。

攻撃はネットワーク越しに、HTTPリクエスト1回で成立します。利用者の操作は要りません。ログイン後に得たセッショントークンと、既存の連絡先IDが1件あれば足り、標準的な導入環境では連絡先ID 1が常に存在するとされています。BearerトークンによるJMAP APIの呼び出しにはCSRFトークンも不要です。

成功すると、www-dataで読めるファイルをすべて読まれます。設定ファイルに書かれたデータベースの認証情報や、利用者データの持ち出しも含まれます。ファイルの書き込み、データベースの改ざん、アプリへのコード埋め込み、プロセスの停止やファイル削除、ランサムウェアの設置も可能になります。

今すぐやること

  1. 1

    運用中の版を確認する

    6.8系・25.0系・26.0系のどれを使っているかと、修正版より前かどうかを確認します。複数環境(本番・検証・部署ごとの別サーバー)があれば、すべて洗い出します。

  2. 2

    系統ごとの修正版に更新する

    6.8系は6.8.167、25.0系は25.0.102、26.0系は26.0.27に更新します。インストールにはコードとライブラリを含むtar.gzファイルを使うと、リリースページに案内があります。更新前にバックアップを取ってください。

  3. 3

    未更新だった期間の侵害を調べる

    修正版を当てるまでの間に不審なアクセスがなかったかを調べます。リクエスト本文はアクセスログに残らないことが多いので、Webサーバーのユーザーから起動された想定外のプロセス、設定ファイルやアプリ配下の見覚えのない更新、普段使われない利用者アカウントのログインを見ます。侵害が疑われるなら、設定ファイルにあるデータベースの認証情報を変更します。

  4. 4

    アカウントと公開範囲を見直す

    悪用には有効なアカウントが1つあれば足ります。退職者や使っていないアカウントを無効化し、外部公開が不要なら、VPNや接続元IPの制限の内側に置きます。

すぐ更新できないとき

ベンダーが示した回避策は確認できていません。更新までのつなぎとして、Group-Officeへの接続元をVPNや社内ネットワークに限り、不要なアカウントを止めてください。これは悪用を完全に防ぐものではなく、修正版への更新が根本的な対処です。

背景

Group-Officeは、顧客管理(CRM)とグループウェアを兼ねる業務用ソフトウェアです。連絡先や顧客情報を集めて持つため、サーバーを握られると取引先の情報がまとめて読まれ、設定ファイルにあるデータベースの認証情報から、ほかのシステムへの足がかりにもされかねません。

今回の脆弱性は、テンプレート機能が式をeval()で評価する設計と、その入力検査の甘さから生まれました。検査は、未知の語を引用符で囲めば関数として呼べなくなるという前提に立っていました。この前提がPHP 7以降では成り立たず、許可する語をあらかじめ列挙する方式の検査が不完全だった(CWE-184)ことが、コード実行に直結しました。

よくある質問

Q.社内ネットワークだけで使っていて、外部公開していなければ急がなくてよいですか。
A.外部から直接届かない分、リスクは下がります。ただ、悪用に必要なのは一般利用者のアカウントです。盗まれたパスワードや社内端末の侵害があれば成立するので、公開していなくても修正版への更新は計画に入れてください。
Q.修正版に更新すれば、過去の侵害もなくなりますか。
A.更新で止まるのはこれ以降の悪用だけです。すでに侵入されていた場合、設置されたファイルや盗まれた認証情報は残ります。未更新の期間があれば、更新と並行して痕跡を確認してください。

この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。

原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

Group-Office is an enterprise customer relationship management and groupware tool. Prior to versions 6.8.167, 25.0.102, and 26.0.27, the Contact/labels JMAP endpoint in GroupOffice accepts a fully attacker-controlled template string (tpl parameter) that is passed without restriction to TemplateParser::parse(). When the template contains an [assign] block whose expression includes a {{...}} variable reference, the engine calls eval() on the expanded expression after running it through a validateExpression() guard. The guard double-quotes unrecognized tokens, but PHP 7+ allows a string enclosed in parentheses to be invoked as a function ("system")("id") is valid PHP and calls system("id"). A single authenticated HTTP request is sufficient to execute arbitrary OS commands as the web server user (www-data). This issue has been patched in versions 6.8.167, 25.0.102, and 26.0.27.

出典: CVE.org (CVE Program・cvelistV5) NVD

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく