CVE-2026-48907: Joomla Content Editor (JCE) 認証なしRCE脆弱性
CVE-2026-48907: Joomla Content Editor (JCE) 認証なしRemote Code Execution
概要
| 項目 | 内容 |
|---|---|
| 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. インポートアクションにおける認可チェックの欠如
- 欠陥:
JceControllerProfiles::import()はCSRFトークンチェックのみに依存していた。 - 影響:
Factory::getUser()や$user->authorise(...)による認可検証が一切存在しない。CSRFトークンはJoomlaの公開ページから隠しフィールド/JS変数経由で容易に取得可能。 - 結果: 有効なCSRFトークンを持つ任意の呼び出し元がエンドポイントを実行可能。
2. ファイル拡張子検証の欠如
- 欠陥:
JceModelProfile::import()はFile::makeSafe()を使用するが、これはファイルシステムの不正文字(スペース、NULLバイト、シェルメタ文字)を除去するだけで、拡張子の検証は行わない。 - 影響:
nuclei-deadbeef.xml.phpのようなファイル名はそのまま通過する。Apacheのmod_phpは最後の認識可能な拡張子(.php)に基づいて実行する。 - 許可される拡張子:
.php,.php5,.phtml,.xml.php
3. 安全でないアップロードフラグの有効化
- 欠陥:
File::upload()が明示的に$allow_unsafe = trueで呼び出されていた。 - 影響: Joomla内部の拡張子ブラックリスト(
.php,.php3〜.php7,.phtml,.exe等)が無効化される。ファイルは実行可能な拡張子付きのままtmp/に配置される。
攻撃フロー
- 攻撃者が公開JoomlaページからCSRFトークンを取得
profiles.importに対して細工されたマルチパートリクエストを送信(武器化されたPHPファイルを「プロファイルアップロード」として)- ファイルが
tmp/ディレクトリに配置される - 攻撃者がアップロードされたファイルに対して直接HTTPリクエストを送り実行をトリガー
- 結果: 認証不要・ユーザー操作不要で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は以下のステップで動作する:
- ターゲットJoomlaサイトの公開ページからCSRFトークンを抽出
com_jce&task=profiles.importエンドポイントに対してPHPペイロードを含むマルチパートフォームデータを送信- アップロードが「プロファイルインポート」として処理され、ファイルが
tmp/に一時配置される - 配置された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/ に配置されたままとなる。
実被害・インシデント
- CISA KEVカタログ登録 (2026年6月16日): CVE-2026-48907はCISAのKnown Exploited Vulnerabilities Catalogに登録された。
- 悪用確認済み: CISAは「actively exploited」(積極的に悪用中)と明記。
- 連邦機関向け緊急パッチ要件: CISAは連邦機関に対して即時パッチ適用を義務付け、民間ディフェンダーにも優先対応を勧告。
- 攻撃窗口: 脆弱性公開からKEV登録までわずか11日。
- JCE公式警告: 「公開、自動化的悪用コードが存在する。公開ユーザー登録がないサイトも安全ではない」
検出方法
ブラックボックステスト
| 手法 | 詳細 |
|---|---|
| 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: コンプロマイズの確認
- サーバーログ確認:
index.php?option=com_jce&task=profiles.importへの認証なしリクエストを検索 - アップロードディレクトリ検査:
images/,media/,tmp/内の不審な.phpファイルを確認 - JCEプロファイル検査: 管理画面で見知らぬプロファイル(特に自動生成名、最上位に配置)を確認
判定マトリックス
| 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公式より)
- 証拠保全: 疑わしいプロファイルと悪意あるファイルを変更前にコピー(フォレンジック用)
- パッチ適用: JCE 2.9.99.6+ に即時アップデート
- クリーンアップ: 不正プロファイルと関連アップロードファイルを削除
- 認証情報ローテーション: Joomla管理者、DB、ホスティング、FTPのパスワードを変更
- フルスキャン: Imunify等のサーバーサイドマルウェアスキャンを実行
- バックアップからの復元: 初期侵入より前のバックアップから復元
修正パッチ詳細
【クローズドソース製品のため、コードレベルの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)
- 深刻度: 緊急(CVSS 9.8)
- CVSSベクター:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - CWE: CWE-284
- EPSS: 80.42%(上位 0.4%)
影響を受けるバージョン:
- Widgetfactorylimited Jce: < 2.9.99.5
概要(日本語): 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
- 製品: Widget Factory Joomla Content Editor
- CISA KEV 掲載: ✅ あり
- ランサムウェア悪用: Unknown
PoC / Exploit
- initial-access: GitHub(webshellseo8/CVE-2026-48907-Unauthenticated-RCE-in-JCE) / VulnCheck XDB
- initial-access: GitHub(ywh-jfellus/CVE-2026-48907) / VulnCheck XDB
- initial-access: GitHub(87achrafg-stack/CVE-2026-48907) / VulnCheck XDB
- initial-access: GitHub(HORKimhab/CVE-2026-48907) / VulnCheck XDB
- initial-access: GitHub(wearehackers160/CVE-2026-48907) / VulnCheck XDB
- initial-access: GitHub(sec0x/CVE-2026-48907) / VulnCheck XDB
- initial-access: GitHub(0xgh057r3c0n/CVE-2026-48907) / VulnCheck XDB
- initial-access: GitHub(gh1mau/masta-cve-2026-48907) / VulnCheck XDB
- initial-access: GitHub(grayxploit/CVE-2026-48907) / VulnCheck XDB
- initial-access: GitHub(xitexploiter96-dot/CVE-2026-48907-) / VulnCheck XDB
- initial-access: GitHub(Almavj/Joomla_CVE_2026_48907) / VulnCheck XDB
- initial-access: GitHub(K3ysTr0K3R/CVE-2026-48907) / VulnCheck XDB
- initial-access: GitHub(pssec-io/CVE-2026-48907) / VulnCheck XDB
悪用事例
参考リンク
- www.joomlacontenteditor.net
Release NotesVendor Advisory - www.joomlacontenteditor.net
Product - www.cisa.gov
US Government Resource