Skip to main content

MailWatch EUVDEUVD-2026-112550

| CVE-2026-85749 HIGH
Authorization Bypass Through User-Controlled SQL Primary Key (CWE-566)
2026-10-28 security-advisories@github.com
8.1
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privilege MailWatch user
  2. Delivery
    Enumerate another tenant's message id
  3. Exploit
    Submit id to quarantine_action.php with own token
  4. Execution
    quarantine_list_items() selects without global_filter
  5. Persist
    quarantine_release() or quarantine_delete() executes
  6. Impact
    Victim mail force-delivered or permanently destroyed

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization SQL primary key authorization
Exploitation Conditions

Exploitation requires (1) a valid authenticated MailWatch session in any non-admin tenant role (U/user, D/domain-admin, or H/host) - confirmed by PR:L and the advisory, so this is NOT remote-unauthenticated; (2) a valid CSRF token, which is not a barrier because the attacker submits a token from their own session; and (3) knowledge of a target message id, which the advisory states are enumerable. The specific vulnerable path is the quarantine action endpoint mailscanner/quarantine_action.php calling quarantine_list_items() without the per-role global_filter that listing/read views apply; it affects default installations of MailWatch <= 1.2.26 with no non-default configuration needed. The practical limiting factor is that the attacker must already hold a valid low-privilege account on the target instance (e.g. a legitimate tenant user), so the realistic threat is a malicious or compromised internal/tenant account rather than an anonymous internet attacker.

Impact

This is a genuine, prioritizable authorization flaw (IDOR / CWE-566 & CWE-639), not a high-CVSS-but-low-real-risk issue, though the signals are mixed and some are missing. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H = 8.1 High) is well supported by the source evidence: the fix commit confirms the exact mechanism (quarantine_list_items() selected from maillog by bare id with no global_filter, patched by threading $_SESSION['global_filter'] through the action path). Attack is network-reachable with low complexity and requires only low privileges (PR:L) - any authenticated U/D/H role, i.e. the lowest tenant tier, which makes the privilege bar effectively trivial in a multi-tenant deployment. No EPSS score was provided and the vulnerability is NOT in CISA KEV (no KEV signal in input), so there is no evidence of active exploitation. No SSVC decision framework (automatable/technical-impact) was supplied; the only priority signal is the vuln.today 'this_week' label, consistent with High-but-not-emergency. The GHSA advisory documents a working proof-of-concept reproduced against v1.2.26 (delete and release of another tenant's message), but full captures are 'available on request' rather than published, so this is a described PoC rather than confirmed public weaponized exploit code. Net: real integrity/availability risk to multi-tenant quarantine data, highly credible because it is backed by vendor source code, but absent KEV/EPSS the realistic threat is opportunistic abuse by existing low-privilege account holders rather than mass internet exploitation.

Exploit ScenarioDerived

A low-privilege MailWatch user (role U) with a valid session enumerates message identifiers and submits them to mailscanner/quarantine_action.php using a CSRF token from their own session, invoking quarantine_release() to force-deliver another tenant's quarantined (e.g. malware/phishing) mail to its recipient, or quarantine_delete() to permanently destroy another user's or domain's held mail. A proof-of-concept was reproduced by the reporter against v1.2.26, confirming both the delete and release paths act on messages the attacker's own listing views never display. Because exploitation is network-based, low-complexity, and needs only ordinary authenticated access, any account holder in a shared deployment can carry it out.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 28, 2026

MailWatch for MailScanner 1.2.26 and earlier applies the per-role tenant filter when listing or reading quarantined mail but does not apply it on the quarantine action endpoint, so any authenticated tenant account - the low-privilege U/user, D/domain-admin and H/host roles, not just A/admin - can act on other users' and domains' quarantined messages. By supplying an arbitrary, enumerable message id to mailscanner/quarantine_action.php, an attacker can force-deliver held mail (including malware or phishing that the quarantine was containing) to the recipient's inbox or permanently delete it, giving high integrity and availability impact with no confidentiality impact (CVSS 8.1, AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H). The advisory documents a reporter reproduction against v1.2.26; there is no CISA KEV entry and no confirmed active exploitation, and the practical limiting factor is that the attacker must already hold a valid low-privilege account on the instance, making a malicious or compromised internal/tenant user the realistic threat.

RemediationAI

Vendor-released patch: 1.2.27 - upgrade MailWatch for MailScanner to that release (https://github.com/mailwatch/MailWatch/releases/tag/v1.2.27), or backport commit bc04f25eb0cec028cbd4ded9c049cfc6f663a15f, which adds a $global_filter parameter to quarantine_list_items() and threads $_SESSION['global_filter'] through quarantine_action.php, detail.php and do_message_ops.php, and through quarantine_release(), quarantine_learn() and quarantine_delete() so the requested id is resolved within the caller's permitted user/domain. The advisory's remediation is exactly this: apply the same per-role scoping on the action path that the listing and read views already use, rather than authorizing the action on a bare id lookup. Note that the per-action checkToken() CSRF check is not a mitigation, since the caller can submit a token minted for their own session, and no separate workaround is documented by the vendor beyond applying the fixed release; the residual exposure for unpatched instances is bounded only by the need for a valid authenticated tenant account, so the interim step supported by the advisory is to treat all low-privilege tenant accounts on unpatched hosts as able to delete or release any quarantined message, and to prioritize the upgrade accordingly (reference: https://github.com/mailwatch/MailWatch/security/advisories/GHSA-w7v5-7g6w-87r4).

Affected VersionsENISA

MailWatch < 1.2.27

Affected Packages

euvd mailwatch fix: 1.2.27

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

MailWatch is a PHP web front-end that reads MailScanner's maillog table and exposes quarantine views to authenticated users, with per-role scoping carried in the session variable $_SESSION['global_filter']. Listing and read views append that filter, but quarantine_list_items() in mailscanner/functions.php built its lookup as a bare "SELECT ... FROM maillog WHERE id = '$msgid'" with no tenant predicate, and quarantine_action.php reached that function directly with an attacker-supplied id, before the per-action checkToken() CSRF verification and without any ownership or role check. Because checkToken() only validates a token issued to the current session, the attacker simply submits their own token, so CSRF protection provides no barrier; the flaw is the read-scoped / write-unscoped authorization asymmetry mapped to CWE-566 (Authorization Bypass Through User-Controlled SQL Primary Key) and CWE-639, not a SQL injection or a race. The downstream helpers quarantine_release(), quarantine_learn() and quarantine_delete() re-ran quarantine_list_items() on the same bare identifier, so the unscoped result flowed into force-delivery or permanent deletion. The upstream fix (commit bc04f25eb0cec028cbd4ded9c049cfc6f663a15f) adds an optional $global_filter argument that is appended as "AND ($global_filter)" to the lookup and threads $_SESSION['global_filter'] through quarantine_action.php, detail.php and do_message_ops.php.

Know when PHP 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

Vendor (github) PRIMARY 8.1 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
vuln.today AI 8.1 HIGH

Network-reachable PHP endpoint (AV:N), no special conditions (AC:L), any authenticated low-privilege role needed (PR:L), no user interaction; releasing held mail is I:H and permanent deletion is A:H, with no data disclosure (C:N).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Oct 28, 2026 - 23:33 EUVD
CVE Published
Oct 28, 2026 - 23:17 cve.org
HIGH 8.1

DescriptionCVE.org

MailWatch for MailScanner is a web-based front-end to MailScanner. Prior to 1.2.27, any authenticated MailWatch user, including the U/user, D/domain-admin, and H/host roles, can release to inbox or permanently delete the quarantined mail of any other user or domain by supplying an arbitrary message id to mailscanner/quarantine_action.php. The action path calls quarantine_list_items() in mailscanner/functions.php, which selects from maillog by the supplied identifier without the per-role global_filter applied by listing and read views. The action requires a valid session and CSRF token, but the caller can submit a token from the caller's own session; ownership of the requested message is never checked. Message identifiers are enumerable, allowing a low-privilege user to invoke quarantine_release() or quarantine_delete() for other users' or domains' quarantined messages, force-delivering mail held by the quarantine or permanently deleting it. This issue is fixed in version 1.2.27.

Technical POC Analysis

CWE-566 (Authorization Bypass Through User-Controlled SQL Primary Key), also tagged CWE-639 in the advisory.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

MailWatch for MailScanner (1.2.26 and earlier) contains a high-severity authorization flaw whereby any authenticated low-privilege tenant user can act on quarantined mail belonging to other users and domains-releasing contained malware or phishing into inboxes or permanently deleting held messages. Because this undercuts the quarantine layer that protects the entire organization (and potentially multiple tenants), leadership should treat it as a direct threat to email security integrity and availability, affecting all users whose quarantine is managed on the instance.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: restrict quarantine_action.php to trusted administrative roles or source IPs via reverse proxy/WAF rules, suspend unneeded low-privilege tenant accounts, monitor and audit quarantine action logs for anomalous releases or deletions, and isolate or segment affected MailWatch instances until a fix is available.

Threat Intelligence Overview

Prevalence
Low
niche open-source web front-end for MailScanner mail gateways
Social Media
2
Sightings
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

40
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +40
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy