IPBUF安全漏洞报告
English
CVE-2026-35403 CVSS 6.5 中危

CVE-2026-35403 LORIS跨站脚本漏洞

披露日期: 2026-04-08

漏洞信息

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

相关标签

XSSLORISWeb安全CWE-79CVE-2026-35403

漏洞概述

LORIS是一个用于神经影像学研究的自托管Web应用程序。在15.10至27.0.3之前和28.0.1之前的版本中,survey_accounts模块存在跨站脚本攻击漏洞。当用户提供无效的访问标签时,尽管数据经过了正确的JSON编码,但由于未设置Content-Type响应头,导致Web浏览器将响应内容解释为HTML。如果用户被诱骗点击恶意链接,攻击者可利用此漏洞执行恶意脚本,窃取用户敏感信息或执行未授权操作。

技术细节

该漏洞的根本原因在于LORIS的survey_accounts模块在处理无效访问标签(visit label)时的HTTP响应头配置不当。通常情况下,服务器返回JSON数据时应设置`Content-Type: application/json`,以告知浏览器解析JSON格式的数据。然而,在该受影响版本中,当用户提交包含恶意Payload的无效访问标签时,服务器虽然对响应体内容进行了JSON编码,但未正确指定Content-Type头。

由于缺乏明确的MIME类型声明,现代Web浏览器会使用“MIME类型嗅探”(MIME Sniffing)机制来尝试猜测响应内容的类型。在这种情况下,浏览器可能会将原本应为JSON的响应内容错误地解释为HTML文档。如果攻击者在输入中嵌入了恶意的HTML标签或JavaScript代码(例如`<img src=x onerror=alert(1)>`),这些标签虽然被包裹在JSON字符串结构中,但在被浏览器作为HTML解析上下文渲染时,依然会被触发执行。

利用该漏洞需要用户交互(UI:R),即攻击者需要诱骗一个具有低权限(PR:L)的认证用户点击特制的恶意链接。一旦用户访问该链接,浏览器将解析服务器响应并执行其中的恶意脚本。这可能导致反射型XSS攻击,攻击者可借此窃取用户的Session ID、Cookie等敏感凭证,进而劫持用户会话或执行其他恶意操作。

攻击链分析

STEP 1
侦察
攻击者识别出目标正在使用受影响版本的LORIS系统(15.10至27.0.3之前或28.0.1之前)。
STEP 2
构造载荷
攻击者构造一个包含恶意JavaScript代码的无效访问标签(visit_label),用于提交给survey_accounts模块。
STEP 3
诱导访问
攻击者通过钓鱼邮件或社会工程学手段,诱导已登录的低权限用户点击包含恶意载荷的链接或提交表单。
STEP 4
执行攻击
受害用户访问链接后,服务器返回数据但未设置正确的Content-Type头。浏览器执行MIME嗅探,将响应解析为HTML,从而执行恶意脚本。
STEP 5
达成目的
恶意脚本在受害者浏览器中运行,窃取Session Cookie或执行其他操作,攻击者进而劫持用户会话。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests def test_loris_xss(target_url): """ PoC for CVE-2026-35403 Testing Content-Type confusion XSS in survey_accounts module. """ # The endpoint that processes the visit label endpoint = f"{target_url}/survey_accounts/" # Payload: Invalid visit label containing XSS payload # Even if JSON encoded, browser treats it as HTML if Content-Type is missing xss_payload = '<script>alert(document.cookie)</script>' data = { 'visit_label': xss_payload } try: response = requests.post(endpoint, data=data) print(f"[+] Request sent to: {endpoint}") print(f"[+] Response Status: {response.status_code}") content_type = response.headers.get('Content-Type', '') print(f"[+] Response Content-Type: {content_type}") if 'text/html' in content_type or 'application/json' not in content_type: print("[!] Vulnerable: Content-Type is not set to application/json.") print("[!] Browser may interpret the response as HTML, triggering XSS.") else: print("[-] Safe: Content-Type is correctly set.") except Exception as e: print(f"Error: {e}") if __name__ == "__main__": # Replace with actual target URL target = "http://localhost:8080" test_loris_xss(target)

影响范围

LORIS >= 15.10, < 27.0.3
LORIS >= 28.0.0, < 28.0.1

防御指南

临时缓解措施
建议管理员立即将LORIS系统升级至修复版本27.0.3或28.0.1及更高版本。如果无法立即升级,应在Web服务器层面(如Nginx或Apache)配置严格的Content-Type响应头策略,强制对JSON响应设置application/json,并禁用浏览器的MIME嗅探功能(如添加X-Content-Type-Options: nosniff),以防止恶意脚本被执行。

参考链接

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