g0thamRabb1t/joomla-jce-cve-2026-48907-detection

GitHub: g0thamRabb1t/joomla-jce-cve-2026-48907-detection

该仓库提供 Joomla JCE CVE-2026-48907 漏洞的实验室验证记录与 SOC 检测工程指导,帮助防御团队识别和响应此类远程代码执行攻击。

Stars: 0 | Forks: 0

# Joomla JCE CVE-2026-48907 — PoC 验证、Webshell 特征与 SOC 检测 ## 仓库目的 本仓库记录了在 Joomla JCE 中对 **CVE-2026-48907** 进行受控实验室验证的过程,并侧重于为 SOC 团队提供实用的检测工程指导。 本仓库的目的不是提供漏洞利用指南。其目的是展示在验证期间哪些遥测数据源是有用的、创建了哪些特征文件,以及防御者如何检测和响应此类活动。 ## 报告 - [英文 PDF 报告](reports/Joomla_JCE_CVE-2026-48907_POC_EN.pdf) - [波兰文 PDF 报告](reports/Joomla_JCE_CVE-2026-48907_POC_PL.pdf) - [英文 DOCX 报告](reports/Joomla_JCE_CVE-2026-48907_POC_EN.docx) - [波兰文 DOCX 报告](reports/Joomla_JCE_CVE-2026-48907_POC_PL.docx) ## 摘要 | 领域 | 发现 | |---|---| | 漏洞 | 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 实例,此问题至关重要。 | ## 公开参考 - 公开 PoC 仓库:[JoomlaSniper](https://github.com/ynsmroztas/JoomlaSniper) - CVE 记录:[CVE-2026-48907](https://www.cve.org/CVERecord?id=CVE-2026-48907) - NVD:[CVE-2026-48907](https://nvd.nist.gov/vuln/detail/CVE-2026-48907) - CISA KEV 目录:[已知被利用漏洞目录](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) ## 实验室环境 | 参数 | 值 | |---|---| | 应用 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 实验室站点](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/51bc2a907b062739.png) ### 已安装的包含漏洞的 JCE 版本 ![已安装的 JCE 版本](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/1fac9ac12d062745.png) ### Joomla 显示有可用的 JCE 更新 ![可用的 JCE 更新](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/64fffbead6062751.png) ![Joomla 仪表盘更新磁贴](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e9743b17bc062756.png) ### 实验室中的 PoC 验证结果 ![JoomlaSniper RCE 已确认](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2b66333b10062801.png) ### 以 www-data 身份执行的交互式 shell 和命令 ![JoomlaSniper 交互式 shell](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/a0e2773f10062806.png) ### Joomla tmp 目录中的文件特征 ![Joomla tmp webshell 特征](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/04333219cf062811.png) ## 关键防御观察 一项关键的运营发现是,**仅靠 Joomla 应用日志是不够的**。 在实验室测试期间,Joomla 日志记录了应用层上下文(例如 `joomlafailure` 事件),但并未显示完整的漏洞利用链。有用的攻击链主要可见于: 1. Apache `access.log` 2. Apache/PHP `error.log` 3. auditd `execve` 记录 4. `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 ``` ## 观察到的 HTTP 序列 最清晰的证据存在于 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 错误日志指标 Apache/PHP 错误日志包含了与解析器相关的宝贵痕迹: ``` simplexml_load_string() administrator/components/com_jce/helpers/profiles.php RXST RXEND ``` `RXST` 和 `RXEND` 标记是此特定 PoC 系列特别有用的指标,因为它们出现在 payload 处理路径中。 ## Joomla 日志局限性 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 ``` 基于哈希的检测应被视为低弹性手段,因为文件名和 payload 可能会发生变化。路径、扩展名、所有权和行为关联更为有效。 ## auditd 证据 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 ``` 这是证明该活动不仅是扫描,而是实际的远程代码执行 (RCE) 的最强有力证据。 ## 检测逻辑 最有效的检测是基于关联的: ``` 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` | 视为侦察行为,并与后续请求进行关联分析。 | | 中 | 没有管理员 referer 或来自未知 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` 启动了 shell/系统命令 | 视为已确认的 RCE/webshell,隔离或限制主机并保留证据。 | ## 指标和狩猎模式 ### HTTP 模式 ``` /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 规则 独立的 Sigma 规则文件可在 [`rules/sigma`](rules/sigma/) 中找到: - [`joomla_jce_webshell_tmp_access.yml`](rules/sigma/joomla_jce_webshell_tmp_access.yml) - [`joomla_jce_component_exploit_attempt.yml`](rules/sigma/joomla_jce_component_exploit_attempt.yml) - [`web_user_shell_from_joomla_tmp_auditd.yml`](rules/sigma/web_user_shell_from_joomla_tmp_auditd.yml) ## 建议的响应措施 | 步骤 | 操作 | 目标 | |---|---|---| | 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` 是否启动了 shell 或系统实用工具。 | 确认代码执行。 | | 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 加固方向示例 确切配置取决于 Apache/PHP 的部署模型。目标是防止在绝对不应该执行脚本的目录中执行 PHP。 ``` php_admin_flag engine off Options -ExecCGI RemoveHandler .php .phtml .phar Require all denied php_admin_flag engine off Options -ExecCGI RemoveHandler .php .phtml .phar Require all denied ``` ## MITRE ATT&CK 映射 | 技术 | 名称 | 理由 | |---|---|---| | T1190 | 面向公众的应用程序漏洞利用 (Exploit Public-Facing Application) | 在未经身份验证的情况下通过 HTTP 漏洞利用 Joomla/JCE endpoint。 | | T1505.003 | 服务器软件组件:Web Shell (Server Software Component: Web Shell) | 创建为 `/tmp/jce*.xml.php` 的 PHP webshell。 | | T1059.004 | 命令和脚本解释器:Unix Shell (Command and Scripting Interpreter: Unix Shell) | 由 `www-data` 执行的 `/usr/bin/dash`。 | | T1033 | 系统所有者/用户发现 (System Owner/User Discovery) | 通过 webshell 执行了 `whoami` 和 `id`。 | | T1082 | 系统信息发现 (System Information Discovery) | 通过 webshell 执行了 `hostname`。 | | T1083 | 文件和目录发现 (File and Directory Discovery) | 通过 webshell 执行了 `pwd` 并在 `/var/www/html/tmp` 中有活动痕迹。 | ## 风险评估 实验室证实了针对 JCE 2.9.99.4 的实际漏洞利用。在观察到的流程中,不需要对 Joomla 进行身份验证,并且公开的 PoC 自动进行了版本检测和 webshell 创建。 对于真实环境,如果 Joomla 面向互联网或可从可信度较低的内部网络访问,则风险很高甚至达到严重级别。成功的攻击可能会留下持久的 webshell,因此在怀疑遭到暴露后,仅打补丁而不进行特征检查是不够的。 ## 免责声明 本仓库旨在用于防御性研究、SOC 检测工程和漏洞管理。它不包含漏洞利用代码。任何测试都必须仅在您拥有或获得明确授权评估的系统上进行。
标签:CISA项目, Joomla, Maven, 漏洞验证, 请求拦截