防御環境での検証と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