防御性实验室验证和SOC检测指南,针对Joomla JCE <= 2.9.99.4中的CVE-2026-48907漏洞,包含Apache/Joomla/auditd遥测、webshell工件、Sigma规则、MITRE ATT&CK映射及缓解建议。
针对影响Joomla内容编辑器(JCE)版本至2.9.99.4的CVE-2026-48907的防御性验证报告及面向SOC的检测笔记。
本仓库记录了在Joomla JCE中对CVE-2026-48907的受控实验室验证,并专注于为SOC团队提供实用的检测工程方法。
目标并非提供利用指南,而是展示验证过程中哪些遥测源有用、创建了哪些工件,以及防御者如何检测和响应此活动。
| 领域 | 发现 |
|---|---|
| 漏洞 | Joomla内容编辑器(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版本发现
↓
POST 到 Joomla JCE组件
↓
PHP webshell写入Joomla /tmp
↓
对 /tmp/jce*.xml.php 的HTTP请求
↓
通过webshell执行命令
↓
auditd确认/usr/bin/dash和以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
后接
POST /index.php?option=com_jce
后接
GET /tmp/jce*.xml.php
后接
GET /tmp/jce*.xml.php?c=
和/或
auditd: www-data从/var/www/html/tmp执行/usr/bin/dash
| 严重性 | 条件 | SOC行动 |
|---|---|---|
| 低 | 来自异常来源的 GET /plugins/editors/jce/jce.xml | 视为侦察,并与后续请求关联。 |
| 中 | POST /index.php?option=com_jce 没有管理员Referer或来自未知IP | 告警并审查后续的/tmp请求。 |
| 高 | POST com_jce 后接 GET /tmp/*.php 或 /tmp/*.xml.php | 立即验证文件系统工件和PHP错误日志。 |
| 严重 | GET /tmp/jce*.xml.php?c= 或 auditd显示 www-data 启动了shell/系统命令 | 视为已确认的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:
joomla_jce_webshell_tmp_access.ymljoomla_jce_component_exploit_attempt.ymlweb_user_shell_from_joomla_tmp_auditd.yml