防御環境での検証とSOC向け検出ガイダンス(CVE-2026-48907、Joomla JCE <= 2.9.99.4 対象)。Apache/Joomla/auditd テレメトリ、webshell アーティファクト、Sigma ルール、MITRE ATT&CK マッピング、緩和策の推奨を含む。
CVE-2026-48907(Joomla Content Editor (JCE) バージョン 2.9.99.4 までに影響)に対する防御的検証レポートとSOC向け検出ノート。
このリポジトリは、Joomla JCE における CVE-2026-48907 の制御されたラボ検証を文書化し、SOCチーム向けの実用的な検出エンジニアリングに焦点を当てています。
目的は悪用のガイダンスを提供することではありません。検証中にどのテレメトリソースが有用だったか、どのアーティファクトが作成されたか、そして防御側がこのアクティビティをどのように検出し対応できるかを示すことです。
| エリア | 調査結果 |
|---|
| 脆弱性 | Joomla Content Editor (JCE) の CVE-2026-48907。認証不要のプロファイル作成/インポートワークフローにより、PHPアップロードとコード実行に至る可能性があります。 |
| テストバージョン | JCE 2.9.99.4。Joomla管理パネルでは 2.9.99.7 へのアップデートが利用可能と表示されました。 |
| ラボ結果 | 公開PoC検証によりRCEが確認され、Joomlaの /tmp に jce*.xml.php としてPHP webshellが作成されました。コマンドは www-data として実行されました。 |
| 最も価値のあるテレメトリ | Apache access.log、Apache/PHP error.log、auditd execve テレメトリ、joomla_html/tmp のファイルシステムアーティファクト。 |
| Joomlaログ | 補足的なコンテキストとして有用ですが、単独では不十分です。Joomlaアプリケーションログは、エクスプロイト → webshell → コマンド実行の完全なチェーンを再構築できませんでした。 |
| SOC優先度 | インターネットに公開されたJoomlaインスタンス、または信頼性の低い内部ネットワークから到達可能なJoomlaインスタンスにとって重大です。 |
| パラメータ | 値 |
|---|---|
| アプリケーションURL | http://172.20.10.3:9999 |
| Joomlaコンテナ | joomla-jce-lab、イメージ joomla:5-apache |
| データベースコンテナ | joomla-jce-db、イメージ mariadb:11 |
| ポートマッピング | 0.0.0.0:9999 -> 80/tcp |
| Apache | Apache/2.4.67 (Debian) |
| PHP | PHP 8.3.31 |
| MariaDB | 11.8.8-MariaDB |
| Joomla | Joomla 5.4.6 Stable |
| JCE | 2.9.99.4 |
| テストソース | Windows 11、IP 172.20.10.2 |
| ロギング | Apacheアクセス/エラーログ、Joomlaログ、auditd、Dockerログ、ファイルシステムアーティファクト |







運用上の重要な発見は、Joomlaアプリケーションログだけでは不十分だったことです。
ラボテスト中、Joomlaログは joomlafailure イベントなどのアプリケーションレベルのコンテキストを記録しましたが、完全なエクスプロイトチェーンは示しませんでした。有用なチェーンは主に以下で確認できました:
access.logerror.logexecve レコードjoomla_html/tmp のファイルシステムアーティファクトSOCモニタリングにおいては、Joomlaログはこの脆弱性の主要な検出ソースではなく、補助的なテレメトリとして扱うべきです。
制御されたテスト中に観測された高レベルのチェーン:
JCE version discovery
↓
POST to Joomla JCE component
↓
PHP webshell written to Joomla /tmp
↓
HTTP request to /tmp/jce*.xml.php
↓
Command execution through webshell
↓
auditd confirms /usr/bin/dash and commands executed as www-data
最も明確なエビデンスはApache access.log にありました:
GET /plugins/editors/jce/jce.xml
GET /
POST /index.php?option=com_jce
GET /tmp/jceolxtshs3.xml.php
GET /plugins/editors/jce/jce.xml
POST /index.php?option=com_jce
GET /tmp/jce624jdcfx.xml.php
GET /tmp/jce624jdcfx.xml.php?c=id%20%26%26%20hostname%20%26%26%20pwd
GET /tmp/jce624jdcfx.xml.php?c=whoami
GET /tmp/jce624jdcfx.xml.php?c=hostname
GET /tmp/jce624jdcfx.xml.php?c=id
GET /tmp/jce624jdcfx.xml.php?c=pwd
Apache/PHPエラーログには、パーサー関連の貴重なトレースが含まれていました:
simplexml_load_string()
administrator/components/com_jce/helpers/profiles.php
RXST
RXEND
RXST および RXEND マーカーは、この特定のPoCファミリにとって特に有用なインジケータでした。これらはペイロード処理パスに現れるためです。
Joomlaログはアプリケーションログがアクティブであることを確認しましたが、エクスプロイトを再構築しませんでした:
#Software: Joomla! 5.4.6 Stable [ Kutegemea ] 26-May-2026 16:00 GMT
#Fields: datetime priority clientip category message
2026-06-18T20:37:57+00:00 INFO 172.20.10.2 joomlafailure Username and password do not match or you do not have an account yet.
これは、Joomlaログのみを収集すると、CVE-2026-48907の悪用の最も重要な証拠を見逃す可能性があることを意味します。
テストでは、Joomlaの tmp にPHP webshellファイルが作成されました:
/var/www/html/tmp/jce624jdcfx.xml.php
/var/www/html/tmp/jceolxtshs3.xml.php
ラボのホスト側パス:
/home/user/joomla-jce-lab/joomla_html/tmp/jce624jdcfx.xml.php
/home/user/joomla-jce-lab/joomla_html/tmp/jceolxtshs3.xml.php
観測されたSHA256ハッシュ:
b6fa303daef8aa8cb39566c73d2cb4a458efb2b1fba48052dd039d45c3beb0aa jce624jdcfx.xml.php
f8bcc802ab56b845c968ed6727228f200f8f4bcd332b8ce82c6980d93ac228fd jceolxtshs3.xml.php
ハッシュベースの検出は、ファイル名やペイロードが異なる可能性があるため、耐性が低いものとして扱うべきです。パス、拡張子、所有者、行動の相関がより有用です。
auditdは、WebサーバーユーザーがJoomlaの tmp ディレクトリからコマンドを実行したことを確認しました:
CWD=/var/www/html/tmp uid=www-data comm=sh exe=/usr/bin/dash
CWD=/var/www/html/tmp uid=www-data comm=id exe=/usr/bin/id
CWD=/var/www/html/tmp uid=www-data comm=hostname exe=/usr/bin/hostname
CWD=/var/www/html/tmp uid=www-data comm=whoami exe=/usr/bin/whoami
これは、アクティビティがスキャンだけでなく、実際のリモートコード実行であったことを示す最も強力な確認です。
最も強力な検出は相関ベースです:
GET /plugins/editors/jce/jce.xml
followed by
POST /index.php?option=com_jce
followed by
GET /tmp/jce*.xml.php
followed by
GET /tmp/jce*.xml.php?c=
and/or
auditd: www-data executes /usr/bin/dash from /var/www/html/tmp
| 深刻度 | 条件 | SOCアクション |
|---|---|---|
| 低 | 異常な送信元からの GET /plugins/editors/jce/jce.xml | 偵察として扱い、後続のリクエストと相関させる。 |
| 中 | 管理者リファラなし、または未知のIPからの POST /index.php?option=com_jce | アラートを発行し、後続の /tmp リクエストを確認。 |
| 高 | POST com_jce の後に GET /tmp/*.php または /tmp/*.xml.php が続く | ファイルシステムアーティファクトとPHPエラーログを直ちに確認。 |
| 重大 | GET /tmp/jce*.xml.php?c= または auditd で www-data がシェル/システムコマンドを起動している | 確認されたRCE/webshellとして扱い、ホストを隔離または制限し、証拠を保存。 |
/plugins/editors/jce/jce.xml
/index.php?option=com_jce
/tmp/jce[a-z0-9]{8}\.xml\.php
/tmp/.*\.(php|phtml|phar)(\?| )
cs-uri-query contains "c="
joomla_html/tmp/jce*.xml.php
/var/www/html/tmp/jce*.xml.php
RXST
RXEND
shell_exec
system
passthru
exec
$_GET['c']
これらのコマンドは、自分が所有しているか、調査を許可されたシステムでのみ使用してください。
grep -RniE "com_jce|profiles\.import|task=profiles|/tmp/.*\.php|RXST|RXEND" apache_logs joomla_html/administrator/logs 2>/dev/null
find ./joomla_html/tmp ./joomla_html/images ./joomla_html/media \
-type f \( -iname "*.php" -o -iname "*.phtml" -o -iname "*.phar" -o -iname "*.xml.php" \) -ls
sudo ausearch -k wwwdata_exec -i | grep -E "uid=www-data|comm=sh|/usr/bin/dash|/var/www/html/tmp|whoami|hostname| id |pwd"
個別のSigmaルールファイルが rules/sigma にあります:
| ステップ | アクション | 目標 |
|---|---|---|
| 1 | インスタンスが JCE <= 2.9.99.4 を実行しているか、JCEのアップデートが利用可能であるかを確認。 | 脆弱な状態を確認。 |
| 2 | アクセス/エラーログで com_jce、profiles.import、/tmp/*.php、jce*.xml.php を検索。 | 試行または成功した悪用を特定。 |
| 3 | tmp、images、media を調べて、PHP/PHTML/PHARファイルや異常な名前を確認。 | webshellやバックドアを検出。 |
| 4 | auditd/EDRで www-data がシェルやシステムユーティリティを起動していないか確認。 | コード実行を確認。 |
| 5 | webshell/RCEが確認されたら、ホストを隔離するか、アプリケーションへのトラフィックを制限。 | さらなる活動を停止。 |
| 6 | アーティファクトを保存し、webshellを削除し、JCEプロファイル、Joomlaアカウント、cronジョブ、変更されたファイルを確認。 | トリアージと根絶。 |
| 7 | JCEをサポートされている最新バージョンに更新し、他のJoomlaインスタンスも確認。 | 緩和とリスク低減。 |
| 優先度 | 推奨事項 | 根拠 |
|---|---|---|
| P1 | JCEをJoomla/PHPブランチのサポートされている最新バージョンに更新。 | JCE 2.9.99.4はラボで脆弱であり、Joomlaは2.9.99.7へのアップデートを表示。 |
| P1 | パッチ適用後、webshellや不審なJCEプロファイルを確認。 | アップデートでエントリポイントは閉じられるが、パッチ適用前に残されたアーティファクトは削除されない。 |
| P1 | tmp、images、media、cache、アップロードディレクトリでのPHP実行をブロック。 | たとえアップロードが成功しても、PHP実行をブロックすることでRCEチェーンが途切れる。 |
| P2 | option=com_jce および task=profiles.import に対するWAFまたはリクエストフィルタリングを追加。 | PHPに到達する前に悪用の試みを検出・ブロックするのに役立つ。 |
| P2 | Apacheアクセスログ、PHPエラーログ、auditd/EDRテレメトリを集中的に取り込む。 | Joomlaアプリケーションログだけでは不十分だった。 |
| P2 | 定期的なJoomla拡張機能のインベントリとアップデート状態のチェックを実装。 | JoomlaパネルはJCEのアップデートシグナルを公開しており、これをVM/SOCワークフローにフィードすべき。 |
| P3 | ファイルベースラインを維持し、管理対象外のディレクトリに新しいPHPファイルがあればアラート。 | 侵害後のwebshellや永続化の検出に役立つ。 |
正確な設定はApache/PHPデプロイモデルに依存します。目標は、スクリプトを決して実行すべきでないディレクトリでのPHP実行を防ぐことです。
<Directory "/var/www/html/tmp">
php_admin_flag engine off
Options -ExecCGI
RemoveHandler .php .phtml .phar
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
</Directory>
<Directory "/var/www/html/images">
php_admin_flag engine off
Options -ExecCGI
RemoveHandler .php .phtml .phar
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
</Directory>
| テクニック | 名称 | 根拠 |
|---|---|---|
| T1190 | 公開アプリケーションの悪用 | 認証なしでのJoomla/JCEエンドポイントのHTTP悪用。 |
| T1505.003 | サーバーソフトウェアコンポーネント: Web Shell | /tmp/jce*.xml.php としてPHP webshellが作成される。 |
| T1059.004 | コマンドおよびスクリプティングインタプリタ: Unixシェル | www-data によって /usr/bin/dash が実行される。 |
| T1033 | システム所有者/ユーザー情報の探索 | webshellを介して whoami と id が実行される。 |
| T1082 | システム情報の探索 | webshellを介して hostname が実行される。 |
| T1083 | ファイルおよびディレクトリ情報の探索 | pwd と /var/www/html/tmp での活動。 |
ラボではJCE 2.9.99.4に対する実際の悪用が確認されました。観測されたフローではJoomlaへの認証は不要であり、公開PoCはバージョン検出とwebshell作成を自動化していました。
実際の環境では、Joomlaがインターネットに公開されている場合、または信頼性の低い内部ネットワークから到達可能な場合、リスクは高から重大です。攻撃が成功すると永続的なwebshellが残る可能性があるため、アーティファクトの検査なしのパッチ適用では、疑わしい露出後には十分ではありません。
このリポジトリは、防御的研究、SOC検出エンジニアリング、脆弱性管理を目的としています。エクスプロイトコードは含まれていません。すべてのテストは、自分が所有しているか、評価を明示的に許可されたシステムでのみ実行してください。