CVE-2026-48907: Joomla Content Editor (JCE) 認証なしRCE脆弱性

CVE-2026-48907: Joomla Content Editor (JCE) 認証なしRemote Code Execution

HTML版レポート

概要

項目 内容
CVE ID CVE-2026-48907
GHSA ID GHSA-c3f5-4g7f-qjqj
脆弱性タイプ 認証なし Remote Code Execution (RCE)
CVSS v3.0 9.8 (Critical) — CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (Tenable/算出値、NVDは未評価)
CVSS v4.0 10.0 (Critical) — CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H (NVD完全vector: E:A/AU:Y/U:Red のsupplemental metrics含む)
CWE CWE-284 (Improper Access Control)
EPSS 3.178% (GitHub Advisory値。Tenableは0.00111%を報告 — データソースにより差異あり)
影響を受ける製品 Joomla Content Editor (JCE) 1.0.0–2.9.99.4 (JCE公式: 2.7.x/2.8.x/2.9.xにパッチ提供。2.6.xはデフォルト設定で影響なしとされるが未検証・未サポート)
修正バージョン 2.9.99.5 (2026年6月3日), 2.9.99.6 (2026年6月6日、追加ハードニング)
公開日 2026年6月5日
CISA KEV 登録済み (2026年6月16日追加) — 悪用確認済み
JVN 【情報不足】(JVN未登録)

影響を受けるソフトウェア

ソフトウェア バージョン 開発元
Joomla Content Editor (JCE) 2.7.x, 2.8.x, 2.9.x — 2.9.99.4以下 Ryan Demmer / Widget Factory Limited
Joomla CMS JCEがインストールされている全バージョン Joomla Project

JCEはJoomlaエコシステムで最も人気のあるエディター拡張機能であり、mysites.guruによれば最もインストール数の多いJoomla拡張機能の一つ。

技術詳細

脆弱性の概要

本脆弱性はJCEのプロファイルインポートエンドポイントに存在する:

/index.php?option=com_jce&task=profiles.import

3つの独立した脆弱性が連鎖してRCEに至る。いずれか1つでも欠ければ連鎖は断たれる。

1. インポートアクションにおける認可チェックの欠如

2. ファイル拡張子検証の欠如

3. 安全でないアップロードフラグの有効化

攻撃フロー

  1. 攻撃者が公開JoomlaページからCSRFトークンを取得
  2. profiles.import に対して細工されたマルチパートリクエストを送信(武器化されたPHPファイルを「プロファイルアップロード」として)
  3. ファイルが tmp/ ディレクトリに配置される
  4. 攻撃者がアップロードされたファイルに対して直接HTTPリクエストを送り実行をトリガー
  5. 結果: 認証不要・ユーザー操作不要でRCE達成(3回のHTTPリクエストで完了)

根本原因の分類

カテゴリ 内容
認可欠如 インポートエンドポイントにユーザー認証/認可チェックなし
入力検証不備 ファイル拡張子の検証缺失
安全フラグ誤用 $allow_unsafe = true によるブラックリスト無効化

攻撃の必要条件

条件 説明
JCE ≤ 2.9.99.4 がインストール済み デフォルトではJCEはJoomlaに同梱されていないが、非常に人気のある拡張機能
tmp/ ディレクトリが公開アクセス可能 デフォルトのJoomla/Apache設定では tmp/ への公開アクセスとPHP実行が許可されている
tmp/ でPHP実行が有効 Apacheの mod_php.php 拡張子ファイルを実行

PoC/Exploitの状況

項目 状況
公開PoC あり
Metasploitモジュール 【情報不足】(未確認)
Exploit成熟度 weaponized — 自動化的悪用コード公開済み、実稼働環境での悪用確認
信頼できるリポジトリ webshellseo8/CVE-2026-48907 (Python版PoC)
Nucleiテンプレート 公共テンプレート利用可能
追加PoC Educational PoC (Sploitus) — Docker検証環境付き

PoCの動作原理

PoCは以下のステップで動作する:

  1. ターゲットJoomlaサイトの公開ページからCSRFトークンを抽出
  2. com_jce&task=profiles.import エンドポイントに対してPHPペイロードを含むマルチパートフォームデータを送信
  3. アップロードが「プロファイルインポート」として処理され、ファイルが tmp/ に一時配置される
  4. 配置されたPHPファイルにHTTPアクセスしてコマンド実行を確認

PoCレスポンス例:

{"success":true,"message":"","messages":{"info":["0 Profile(s) imported successfully"]},"data":{"redirect":"/index.php/component/jce?view=profiles"}}

インポート自体は失敗(0 Profile(s))してもファイルは tmp/ に配置されたままとなる。

実被害・インシデント

検出方法

ブラックボックステスト

手法 詳細
WAF/ログモニタリング com_jce&task=profiles.import への不審なリクエストを監視
Nucleiスキャン 公開Nucleiテンプレートで脆弱性スキャン
ファイル監視 tmp/, images/, media/ ディレクトリ内の不審な .php ファイルの存在確認
サーバーアクセスログ 認証なしでの profiles.import リクエストの存在確認 — 最古のエントリが初期侵入タイムスタンプ

ホワイトボックステスト

手法 詳細
JCEバージョン確認 Joomla管理画面 → Components → JCE Editor → バージョン確認
ファイルシステム確認 /components/com_jce/ ディレクトリのバージョン情報確認
コードレビュー JceControllerProfiles::import() の認可チェック有無
プロファイル検査 Components → JCE Editor → Editor Profiles で見知らぬプロファイルが存在しないか確認

実サイト影響確認手順

手順1: JCEのインストール確認

# JCEのエンドポイントが存在するか確認
curl -s -o /dev/null -w "%{http_code}" "https://<target>/index.php?option=com_jce"
# 200 → JCEインストール済み、404 → 未インストール

判定基準: 200ならJCE存在、次に手順2へ。404なら影響なし。

手順2: バージョン確認

# JCEのバージョン情報ページにアクセス
curl -s "https://<target>/administrator/components/com_jce/jce.xml" | grep version

判定基準: ≤ 2.9.99.4 なら脆弱。≥ 2.9.99.6 ならパッチ済み。

手順3: tmp/ディレクトリの公開アクセス確認

# tmp/ディレクトリが公開アクセス可能か確認
curl -s -o /dev/null -w "%{http_code}" "https://<target>/tmp/"
# 200 → 公開アクセス可能、403/404 → アクセス制限済み

判定基準: 200なら公開アクセス可能。403/404なら制限済みだが、脆弱性自体は存在。

手順4: コンプロマイズの確認

判定マトリックス

JCE存在 バージョン tmp/アクセス 判定
✅ あり ≤ 2.9.99.4 ✅ 公開可 脆弱
✅ あり ≥ 2.9.99.6 任意 パッチ済み
❌ なし N/A 任意 影響なし
✅ あり ≤ 2.9.99.4 ❌ 制限済み 理論上脆弱だが実利用困難

対策

恒久的対策

対策 詳細
JCEアップデート JCE 2.9.99.6以降に即時アップデート。2.9.99.5でも修正されているが、2.9.99.6で追加ハードニングが適用される
レガシーサイト用パッチ JCE 2.7.x, 2.8.x, 2.9.x でアップグレード不可能なサイト向けにJCE公式から無料セキュリティパッチが提供されている
Joomlaコアアップデート 最新バージョンに維持

暫定対策 / サーバーハードニング

対策 詳細
tmp/でのPHP実行無効化 Apache/Nginx設定で tmp/ ディレクトリ内のPHP実行を禁止
tmp/への公開アクセス制限 .htaccess またはWebサーバー設定で tmp/ への直接アクセスをブロック
WAFルール com_jce&task=profiles.import へのリクエストをブロックまたは監視
ファイル整合性監視 tmp/, images/, media/ 内の新規ファイル作成を監視・アラート

Apache設定例 (tmp/でのPHP実行禁止)

<Directory "/path/to/joomla/tmp">
    <FilesMatch "\.php$">
        Require all denied
    </FilesMatch>
</Directory>

Nginx設定例 (tmp/でのPHP実行禁止)

location /tmp/ {
    location ~ \.php$ {
        deny all;
    }
}

コンプロマイズ後の復旧手順 (JCE公式より)

  1. 証拠保全: 疑わしいプロファイルと悪意あるファイルを変更前にコピー(フォレンジック用)
  2. パッチ適用: JCE 2.9.99.6+ に即時アップデート
  3. クリーンアップ: 不正プロファイルと関連アップロードファイルを削除
  4. 認証情報ローテーション: Joomla管理者、DB、ホスティング、FTPのパスワードを変更
  5. フルスキャン: Imunify等のサーバーサイドマルウェアスキャンを実行
  6. バックアップからの復元: 初期侵入より前のバックアップから復元

修正パッチ詳細

【クローズドソース製品のため、コードレベルのdiff分析は不可。JCE公式セキュリティアドバイザリに基づく。】

v2.9.99.5+ の修正内容 (2026年6月3日)

修正 影響
認可チェック追加 インポートエンドポイントにユーザー認証/認可チェックを追加
ファイル拡張子検証 プロファイルインポート時のファイル拡張子を厳密に検証
アップロードフラグ修正 $allow_unsafe フラグをデフォルト false に変更

v2.9.99.6 の追加ハードニング (2026年6月6日)

修正 影響
セキュリティ追加強化 複数の追加セキュリティ修正を適用
XXE保護 PHP 7.x環境に外部エンティティ読み込み保護をバックポート
XMLフィールド許可リスト 既知の安全なXMLフィールドのみを処理

再現環境

環境 詳細
Docker (脆弱) joomla:latest + JCE 2.9.99.4, 127.0.0.1:9999
Docker (パッチ済み) joomla:latest + JCE 2.9.99.5/2.9.99.6, 127.0.0.1:9999

PoCリポジトリにdocker-compose設定が含まれている。

参考資料

公式情報源

技術分析

PoC/Exploit


レポート作成日: 2026-06-18 13:49 JST
調査担当: Hermes Agent

脆弱性情報(NVD)

影響を受けるバージョン:

概要(日本語): Joomla 用 JCE エディタ拡張機能に脆弱性があり、未認証ユーザーが新たなエディタプロファイルを作成し、最終的に PHP コードのアップロードと実行が可能になります。

原文: A vulnerability in the JCE editor extension for Joomla allows the creation of new editor profiles for unauthenticated users, ultimately resulting in PHP code upload and execution.

VulnCheck KEV

PoC / Exploit

悪用事例

参考リンク