CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-33548

CVE-2026-33548: Stored Cross-Site Scripting in MantisBT Timeline Feature

Alon Barad
Alon Barad
Software Engineer

Mar 25, 2026·6 min read·20 visits

Executive Summary (TL;DR)

A stored XSS vulnerability in MantisBT 2.28.0 allows authenticated attackers to execute arbitrary JavaScript in the context of other users viewing the issue timeline by leveraging deleted or renamed tags.

Mantis Bug Tracker (MantisBT) version 2.28.0 contains a stored Cross-Site Scripting (XSS) vulnerability in its Timeline feature. The flaw occurs when the application renders historical issue tags that have been subsequently renamed or deleted, falling back to an unescaped raw string from the database.

Vulnerability Overview

Mantis Bug Tracker (MantisBT) version 2.28.0 contains a stored Cross-Site Scripting (XSS) vulnerability tracked as CVE-2026-33548. The vulnerability manifests within the Timeline feature, specifically when rendering historical issue tags. An attacker can inject arbitrary JavaScript that executes when a victim views the timeline on the dashboard (my_view_page.php).

The flaw occurs due to improper output encoding when handling edge cases in the tag history. When an issue tag is modified, the application records the tag's state in the bug_history table. During timeline generation, the application attempts to resolve the historical tag name to an active tag object to generate a safe HTML link.

This vulnerability is classified under CWE-79 (Improper Neutralization of Input During Web Page Generation). It requires low privileges to stage the payload and relies on user interaction to execute. The execution context is the browser session of the victim, which exposes sensitive session tokens and administrative interfaces to the attacker.

Root Cause Analysis

The vulnerability is located in the IssueTagTimelineEvent::html() method within core/classes/IssueTagTimelineEvent.class.php. The timeline rendering logic fetches historical tag information from the database to reconstruct the issue's event history. When the timeline is rendered, the system queries the active tags to create a linked representation of the historical event.

If a tag referenced in the history has been deleted or renamed since the history entry was created, the active tag object cannot be found. In this scenario, the application defaults to using the raw, unescaped name string stored in the bug_history table. This fallback variable, $this->tag_name, is directly concatenated into the HTML output.

The absence of HTML entity encoding on this specific fallback path creates the vulnerability. While the primary execution path utilizing tag_get_link() properly sanitizes output, the fallback path assumes the historical data is safe. This violates the principle of context-aware output encoding.

Code Analysis

The vulnerability exists in the formatting logic of the html() method. The method utilizes a ternary operator to determine whether to render a rich link or a plain text fallback. The vulnerable code path evaluates $t_tag_row to check for the existence of the tag object.

// Vulnerable Code (Version 2.28.0)
return sprintf(
    $t_string,
    prepare_user_name( $this->user_id ),
    string_get_bug_view_link( $this->issue_id ),
    $t_tag_row ? tag_get_link( $t_tag_row ) : $this->tag_name
);

The patch applied in version 2.28.1 addresses this by passing the fallback variable through the string_html_specialchars() function. This ensures that any HTML characters within the raw tag name are properly encoded before being inserted into the DOM.

// Patched Code (Commit f32787c14d4518476fe7f05f992dbfe6eaccd815)
- $t_tag_row ? tag_get_link( $t_tag_row ) : $this->tag_name
+ $t_tag_row ? tag_get_link( $t_tag_row ) : string_html_specialchars( $this->tag_name )

This fix is complete for this specific code path. It ensures that regardless of whether the tag object exists or the application falls back to the raw database string, the output is neutralized before reaching the browser context.

Exploitation Methodology

Exploitation requires an attacker to possess privileges sufficient to create issue tags, typically assigned to the Reporter role or higher. The attacker begins by creating a new tag containing a malicious JavaScript payload within HTML tags. This payload is stored in the application database.

The attacker then attaches this crafted tag to a target issue. This action creates a permanent record in the bug_history table containing the unescaped payload. To arm the exploit, the attacker must force the timeline rendering logic into the vulnerable fallback path.

The attacker achieves this by deleting or renaming the crafted tag. Once the tag object is no longer available, the trigger mechanism is established. Any subsequent visit to the issue timeline or the "My View" dashboard (my_view_page.php) will execute the payload.

The payload executes in the context of the viewing user's browser session. The attacker does not need to maintain any active access once the payload is staged, making this an asynchronous attack that persists in the environment until the specific history entry is removed.

Impact Assessment

Successful exploitation results in the execution of arbitrary JavaScript within the context of the victim's session. This allows the attacker to perform actions on behalf of the user, including viewing sensitive issue details or modifying platform configurations. If the victim holds administrative privileges, the attacker can achieve full application compromise.

The CVSS v4.0 base score of 8.6 reflects the high impact on confidentiality, integrity, and availability. The attack requires low privileges and user interaction, as the victim must view the specific timeline containing the armed payload. The vulnerability relies on persistent storage, meaning the exploit remains active until the underlying database records are sanitized.

The exploit maps to MITRE ATT&CK techniques T1189 (Drive-by Compromise) and T1185 (Browser Session Hijacking). While the current Exploit Prediction Scoring System (EPSS) score is low at 0.00069, the straightforward nature of the exploit and the availability of the patch diff make weaponization highly probable.

Remediation and Mitigation

The primary remediation strategy is upgrading MantisBT to version 2.28.1 or later. This release contains the patch that correctly implements output encoding on the vulnerable fallback path. Organizations should prioritize patching systems exposed to untrusted users.

For environments where immediate patching is not feasible, administrators can apply a manual code-level fix. This involves locating the html() function within core/classes/IssueTagTimelineEvent.class.php and wrapping $this->tag_name in a string_html_specialchars() call. This directly replicates the official vendor patch without requiring a full version upgrade.

Administrators can also proactively sanitize existing databases to remove malicious payloads. Executing a SQL query to identify and remove HTML tags from the bug_history table where the field_name is 'tag' will disarm existing exploits. Implementing a strong Content Security Policy (CSP) will provide defense-in-depth against XSS execution.

Official Patches

MantisBTGitHub Security Advisory GHSA-73vx-49mv-v8w5

Fix Analysis (1)

Technical Appendix

CVSS Score
8.6/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
EPSS Probability
0.07%
Top 79% most exploited

Affected Systems

MantisBT CoreMantisBT Timeline Module

Affected Versions Detail

Product
Affected Versions
Fixed Version
MantisBT
mantisbt
2.28.02.28.1
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork
CVSS v4.08.6 (High)
EPSS Score0.00069
ImpactStored Cross-Site Scripting
Exploit StatusNone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1185Browser Session Hijacking
Collection
CWE-79
Cross-site Scripting

Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Vulnerability Timeline

Vulnerability patched in MantisBT repository (Commit f32787c)
2026-03-16
Public disclosure and CVE assignment
2026-03-23
Advisory GHSA-73vx-49mv-v8w5 published
2026-03-23
NVD analysis and CVSS scoring completed
2026-03-25

References & Sources

  • [1]GitHub Security Advisory GHSA-73vx-49mv-v8w5
  • [2]Fix Commit f32787c14d4518476fe7f05f992dbfe6eaccd815
  • [3]MantisBT Bug Tracker Issue 36973
  • [4]CVE Record for CVE-2026-33548

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 2 hours ago•CVE-2026-48166
5.3

CVE-2026-48166: Timing-Based User Enumeration on Login Page in Filament

An observable timing discrepancy vulnerability (CWE-208) in Filament's administrative login page allows unauthenticated remote attackers to determine the existence of registered email addresses. This timing side-channel arises from short-circuiting logic that skips expensive password hashing checks when a queried email address is not found in the database. Attackers can execute statistical timing attacks to map active administrator accounts, facilitating subsequent targeted brute-force or credential-stuffing campaigns.

Alon Barad
Alon Barad
6 views•6 min read
•about 3 hours ago•CVE-2026-48167
6.4

CVE-2026-48167: Stored Cross-Site Scripting (XSS) via Attribute Injection in Filament ImageColumn and ImageEntry

Filament's ImageColumn (used in tables) and ImageEntry (used in infolists) components render database values inside HTML attributes without validation or sanitization. This allows an attacker to inject arbitrary HTML attributes, leading to Stored Cross-Site Scripting (XSS).

Amit Schendel
Amit Schendel
7 views•5 min read
•about 3 hours ago•CVE-2026-48480
6.6

CVE-2026-48480: Undetected Stream Truncation in netty-incubator-codec-ohttp

The Netty incubator codec for Oblivious HTTP (OHTTP) fails to verify that a cryptographically signed final chunk is received before the outer HTTP body terminates. This missing validation allows an on-path adversary to truncate chunked-OHTTP messages cleanly at a non-final chunk boundary, leading to undetected data truncation and compromising message integrity. The vulnerability affects multiple versions of the maven package io.netty.incubator:netty-incubator-codec-ohttp prior to 0.0.22.Final.

Alon Barad
Alon Barad
5 views•7 min read
•about 4 hours ago•CVE-2026-48488
2.7

CVE-2026-48488: Weak Cryptographic Hash (SHA-1) Usage for Attachment Encryption Keys in phpMyFAQ

Prior to version 4.1.4, phpMyFAQ used the cryptographically broken SHA-1 algorithm to hash custom attachment encryption keys stored in the database. Attackers with database access can recover these plaintext keys through offline brute-force attacks and subsequently decrypt sensitive file attachments.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 4 hours ago•CVE-2026-48493
5.5

CVE-2026-48493: Self-Privilege Escalation via Profile Modification in Snipe-IT

A privilege escalation vulnerability in Snipe-IT versions prior to 8.6.0 allows authenticated users with profile-editing capabilities to elevate their own permissions by performing a PATCH request on their own user endpoint.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 5 hours ago•CVE-2026-48500
6.5

CVE-2026-48500: Unauthenticated File Upload and Resource Exhaustion in Filament Admins

CVE-2026-48500 is an authorization bypass vulnerability within Filament, a full-stack Laravel administration panel suite. The flaw arises from the unauthenticated exposure of Livewire's file upload RPC endpoints on guest-facing pages, allowing remote actors to upload arbitrary files to temporary storage, potentially leading to storage exhaustion and service disruption.

Alon Barad
Alon Barad
7 views•7 min read