防御性实验室验证和SOC检测指南,针对Joomla JCE <= 2.9.99.4中的CVE-2026-48907漏洞,包含Apache/Joomla/auditd遥测、webshell工件、Sigma规则、MITRE ATT&CK映射及缓解建议。
| 领域 | 发现 |
|---|
| 漏洞 | 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:
| 步骤 | 行动 | 目标 |
|---|---|---|
| 1 | 检查实例是否运行JCE <= 2.9.99.4或显示有可用的JCE更新。 | 确认易受攻击状态。 |
| 2 | 搜索访问/错误日志中的 com_jce、profiles.import、/tmp/*.php、jce*.xml.php。 | 识别尝试或成功的利用。 |
| 3 | 检查 tmp、images 和 media 中的PHP/PHTML/PHAR文件及异常名称。 | 检测webshells或后门。 |
| 4 | 审查auditd/EDR中 www-data 启动shell或系统工具的情况。 | 确认代码执行。 |
| 5 | 如果确认了webshell/RCE,则隔离主机或限制对该应用的流量。 | 停止进一步活动。 |
| 6 | 保留工件,移除webshells,审查JCE配置文件、Joomla账户、cron任务及修改过的文件。 | 分类与根除。 |
| 7 | 将JCE更新到最新支持的版本,并审查其他Joomla实例。 | 缓解与风险降低。 |
| 优先级 | 建议 | 理由 |
|---|---|---|
| P1 | 将JCE更新到Joomla/PHP分支的最新支持版本。 | 在实验室中JCE 2.9.99.4易受攻击,Joomla显示有更新至2.9.99.7。 |
| P1 | 修补后,检查webshells和可疑的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文件发出告警。 | 有助于在入侵后检测webshells和持久化。 |
具体配置取决于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 Shell | 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检测工程和漏洞管理。不包含利用代码。任何测试必须仅在您拥有或明确授权评估的系统上进行。