Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privilege mailbox user
-
DeliveryCreate TOTP exception with scripted description
-
ExploitPayload stored unescaped in database
-
ExecutionGlobal admin views totp-exceptions.php
-
PersistScript executes in admin session
-
ImpactIssue authenticated admin requests via CSRF token
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires (1) a valid authenticated mailbox user account on the PostfixAdmin instance, and (2) the TOTP feature enabled (the vulnerable workflow is creating a TOTP exception on totp-exceptions.php; the patched test fixture sets config 'totp' = 'YES'). The stored payload only executes when a global administrator subsequently opens totp-exceptions.php, so admin interaction is a hard prerequisite (UI:P) - it does not fire on its own. Limiting factors that reduce realistic risk below the raw score: exploitation is gated on attacker holding a legitimate low-privilege account (PR:L), on TOTP exceptions being in use, and on an administrator actually viewing the affected list page; the companion app-passwords.php list has the same escaping flaw fixed in the same commit. Affected versions are PostfixAdmin through 4.0.5. |
| Impact | This is a medium-severity stored XSS (vendor CVSS 4.0 base 5.1; CWE-79) whose real-world risk is moderate and clearly bounded, not a drop-everything emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N) tells a consistent story with the description: the injector must already hold a low-privilege mailbox account (PR:L), and exploitation only fires when a global administrator passively views totp-exceptions.php (UI:P). The source-code evidence confirms the mechanism - the patched commit removes the |
| Exploit ScenarioDerived | An authenticated low-privilege mailbox user creates a TOTP exception whose description field contains a script payload, which is stored unescaped in the database. When a global administrator later opens totp-exceptions.php, the payload executes in the admin's authenticated browser session and can issue admin-level requests reusing the page's CSRF token, effectively escalating a mailbox user toward administrative actions. No confirmed working public exploit is identified in the input, though VulnCheck published an advisory and the GitHub issue (#1185) documents the flaw. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 03, 2026
Stored cross-site scripting in PostfixAdmin through 4.0.5 lets an authenticated mailbox user persist a script payload in the description field of a TOTP exception, which then executes in the browser of a global administrator who opens totp-exceptions.php and can issue authenticated admin requests using that page's CSRF token. The same output-escaping defect exists in the application-password list (app-passwords.php), which the vendor commit fixes alongside the TOTP list. Exploitation is bounded: it needs a legitimate low-privilege mailbox account, the TOTP feature in use, and an administrator actually viewing the affected list page; the upstream fix is public (PRs #1172 and #1186), no tagged patched release is confirmed in the supplied data, and no public exploit code or active exploitation was identified at time of analysis.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed in the provided data. Apply commit 0a894b08769481ce1a7f0f42af901c6d9f88fa9c on the 4.0.x line (a backport of PR https://github.com/postfixadmin/postfixadmin/pull/1172, tracked via issue https://github.com/postfixadmin/postfixadmin/issues/1185 and PR https://github.com/postfixadmin/postfixadmin/pull/1186), or upgrade to the first tagged release that contains that commit once the vendor publishes it, and confirm the deployed totp-exceptions.php and app-passwords.php no longer pass the third noescape argument to $smarty->assign. The commit's tests/SecurityListOutputTest.php can be used as a verification check across the mailbox, domain-admin and global-admin list pages, and the CHANGELOG.TXT entry for the release should reference the escape fix for TOTP-exception and application-password descriptions. Until the patch is deployed, reduce exposure by setting the TOTP feature off (config 'totp' = 'NO') so the vulnerable TOTP exception workflow is not reachable, accepting that this removes TOTP exception management for users; note that this leaves the identical escaping flaw in the application-password list, so disabling app passwords ('app_passwords' = 'NO') is required for full interim coverage. Patching only one of the two pages is insufficient because the same noescape assignment pattern was fixed in both. Review the totp_exception_address and mailbox_app_password tables for descriptions containing markup that may have been planted before the fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
PostfixAdmin is a PHP web application that manages Postfix mailboxes, domains and aliases, and it renders its administrative and user-facing pages through the Smarty templating engine. The root cause is CWE-79 (improper neutralization of input during web page generation): in public/users/totp-exceptions.php the exception rows were handed to the template with $smarty->assign('pExceptions', $exceptions, false), and Smarty's third argument disables output escaping, so the attacker-controlled description column from the totp_exception_address table was emitted raw into templates/totp-exceptions.tpl (around line 56). The vendor commit 0a894b08769481ce1a7f0f42af901c6d9f88fa9c removes the noescape argument on both public/users/totp-exceptions.php and public/users/app-passwords.php, adds a CHANGELOG entry noting the backport of #1172, and adds tests/SecurityListOutputTest.php, an HTTP-level regression test that stores descriptions in the mailbox_app_password and totp_exception_address tables and asserts that the mailbox, domain-admin and global-admin security list pages render those values as text. Because the payload is stored server-side and rendered only in the administrator's privileged context, the impact is scoped change (S:C) confined to low confidentiality and integrity of the admin session, consistent with the assessed CVSS:3.1 vector AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N and the vendor CVSS 4.0 base score of 5.1. The trigger is a normal page view of the affected list by the administrator; no special memory or race condition is involved.
Know when Postfixadmin gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Authenticated mailbox user injects (PR:L) and an admin must view the page (UI:R); payload runs in the admin's different security context (S:C) with limited confidentiality/integrity impact and no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
PostfixAdmin through 4.0.5 contains a stored cross-site scripting vulnerability that allows authenticated mailbox users to inject script by creating a TOTP exception with an unescaped description. When a global administrator views totp-exceptions.php, the script runs in the admin session and can issue authenticated admin requests using the page's CSRF token.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
EUVD-2026-115896
GHSA-3mcr-px3q-mcw8
NVD
CVE.org
Vulnrichment
Exploit-DB