Skip to content
Fencer Vulns
critical —

CVE-2026-52881 json

MantisBT: Reflected XSS in admin/install.php via unescaped printf

published 2026-07-15 3 mo ago modified 2026-07-15 3 mo ago also GHSA-vcrw-4xvv-jh49

cvss
—
not scored
cisa kev
Not listed
not in CISA's catalog
epss
—
no EPSS score yet
public exploits
0
none known

Summary

MantisBT 2.28.3 and earlier contains six reflected XSS injection points in `/admin/install.php`. User-supplied parameters are echoed into HTML without escaping via an unescaped printf format string. No authentication is required.

A Content Security Policy (script-src 'self') prevents inline JavaScript execution, but the CSP is missing a form-action directive, allowing exploitation via credential-phishing form injection and <meta> open redirects.

### Impact - Credential phishing: Attacker crafts a URL that renders a fake login form on the real MantisBT admin page. Admin credentials are submitted to an attacker-controlled server. - Open redirect: Victim is silently redirected to a phishing or malware site. - UI manipulation: CSS injection can hide legitimate page content and overlay attacker-controlled HTML, enabling social engineering.

### Patches - https://github.com/mantisbt/mantisbt/commit/297773fbb238c39a153bd888431b41a176132098

### Workarounds Remove the `/admin` directory, as [recommended in the Admin Guide](https://mantisbt.org/docs/master/en-US/Admin_Guide/html-desktop/#admin.install.postcommon)

### Resources - https://mantisbt.org/bugs/view.php?id=37103 - related advisory [GHSA-77x8-3v3h-hrhv](https://github.com/mantisbt/mantisbt/security/advisories/GHSA-77x8-3v3h-hrhv)

### Credits McCaulay Hudson (@_McCaulay) of watchTowr

Patch / fix

  • packagist mantisbt/mantisbt 2.28.4

Affected packages

ecosystem package affected fixed in
packagist mantisbt/mantisbt
<2.28.4
2.28.4

Classification

Weakness
  • CWE-79 Improper Neutralization of Input During Web Page Generation

References

Sources

Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.