Skip to main content

Symfony Mailomat Mailer CVE-2026-48747

| EUVDEUVD-2026-44375 MEDIUM
Improper Verification of Cryptographic Signature (CWE-347)
2026-06-15 https://github.com/symfony/symfony GHSA-rrj9-5q2j-4gvr
6.3
CVSS 4.0 · Vendor: https://github.com/symfony/symfony
View

Attack ChainAIDerived

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

  1. Access
    Send POST to public Mailomat webhook endpoint
  2. Delivery
    Set X-MOM-Webhook-Signature to md4=<value>
  3. Exploit
    Parser reads attacker-chosen algorithm
  4. Execution
    Compute HMAC-MD4 forged signature via known forgery
  5. Persist
    Signature verification passes
  6. Impact
    Fraudulent webhook event injected as legitimate

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
Exploitation Conditions

Exploitation requires that the attacker can send HTTP POST requests to the Symfony application's Mailomat webhook route - a network-accessible endpoint configured to receive Mailomat callbacks, typically with no authentication gatekeeping (webhook receivers are public by design). The Mailomat Mailer bridge (symfony/mailomat-mailer) must be installed and a webhook listener route must be registered in the application. The attacker must additionally be able to construct a valid HMAC signature for the chosen weak algorithm without knowing the secret; for HMAC-MD4, published existential forgery techniques (Contini & Yin, ASIACRYPT 2006) satisfy this requirement. For algorithms where no such forgery is currently known (e.g., HMAC-SHA512), exploitation would require knowing the secret and the vulnerability would be moot. Exploitation is NOT possible against deployments that do not use the Mailomat Mailer bridge or have not registered a webhook endpoint. Exploitation is NOT possible if the endpoint is network-isolated or the X-MOM-Webhook-Signature header is validated externally (e.g., by a WAF) before reaching Symfony.

Impact

No CVSS vector or EPSS score is present in the input data; all metric assessments below are independently derived. The webhook endpoint is network-accessible and unauthenticated (webhook receivers are public by design), establishing a network attack vector with no privilege requirement. However, practical exploitation currently requires the attacker to exploit a cryptographic weakness in a specific HMAC primitive - for example, HMAC-MD4 existential forgery as published by Contini and Yin (ASIACRYPT 2006) - without knowing the shared secret, placing this in the high-complexity tier. The vulnerability is not yet in CISA KEV, and no public proof-of-concept exploit code has been identified, both confirmed by input data. The real-world impact is limited to integrity of webhook events (fraudulent delivery, bounce, or complaint signals injected into the application) with no direct confidentiality or availability impact. The forward-looking risk is notable: the attack surface expands with every new HMAC primitive PHP exposes, and any future cryptanalytic advance in any accepted primitive is immediately exploitable without a code change on the Symfony side. The tags Information Disclosure and JWT Attack confirm the algorithm-confusion classification. Overall this is a genuine architectural flaw with moderate current exploitability and a growing risk profile over time, warranting prompt patching rather than emergency response.

Exploit ScenarioDerived

An attacker with network access to a Symfony application's Mailomat webhook endpoint crafts a malicious POST payload simulating a fraudulent email delivery event, then computes its HMAC using the HMAC-MD4 forgery technique (Contini & Yin, ASIACRYPT 2006) without knowledge of the webhook secret. The attacker sets the X-MOM-Webhook-Signature header to md4=<forged_value>; the unpatched validateSignature() method accepts the attacker-supplied algorithm, calls hash_hmac('md4', ..., $secret), and the constant-time comparison passes against the forged value. The application processes the fabricated event as an authentic Mailomat callback, potentially triggering downstream logic such as marking emails delivered, suppressing retry queues, or updating user-facing delivery status.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jun 15, 2026

Algorithm-confusion in Symfony's Mailomat webhook parser allows an attacker to downgrade the HMAC primitive used for signature verification, bypassing webhook authentication. Symfony packages symfony/mailomat-mailer and symfony/symfony versions 7.2.0 through 7.4.12 and 8.0.0 through 8.0.12 accept an attacker-controlled algorithm field from the inbound X-MOM-Webhook-Signature request header and pass it directly to PHP's hash_hmac(), enabling an adversary who can exploit cryptographic weaknesses in weaker HMAC primitives (e.g., HMAC-MD4 existential forgery) to inject fraudulent webhook payloads. No public exploit has been identified at time of analysis, and this CVE is not listed in CISA KEV.

RemediationAI

Upgrade symfony/mailomat-mailer (or symfony/symfony) to version 7.4.13 or later on the 7.x line, or to 8.0.13 or later on the 8.x line; these are the vendor-confirmed fixed versions per GHSA-rrj9-5q2j-4gvr. The fix commit at https://github.com/symfony/symfony/commit/bdfe9fe0d94d33dfaca0bc2fe0b00b54767b0c88 enforces that the X-MOM-Webhook-Signature header must be of the exact form sha256=<hex> and rejects all other algorithm declarations at parse time using a constant-time HMAC-SHA256 comparison. If an immediate upgrade is not feasible, deploy a WAF or reverse-proxy rule on the webhook ingress path that rejects any request whose X-MOM-Webhook-Signature header value does not match the pattern ^sha256=[0-9a-f]+$ before forwarding to Symfony; this blocks the algorithm-substitution attack without application changes, but must be maintained independently and introduces a separate failure mode if the WAF rule is misconfigured or bypassed. Refer to the Symfony security page at https://symfony.com/cve-2026-48747 for authoritative guidance.

Affected VersionsENISA

mailomat-mailer 8.0.0-BETA1, < 8.0.13
mailomat-mailer 7.2.0, < 7.4.12
symfony 7.2.0, < 7.4.12
symfony 8.0.0-BETA1, < 8.0.13

Affected Packages

composer symfony/mailomat-mailer fix: 7.4.13, 8.0.13
composer symfony/symfony fix: 7.4.13, 8.0.13
euvd mailomat_mailer_7_2_0 fix: 7.4.12
euvd mailomat_mailer_8_0_0_beta1 fix: 8.0.13
euvd symfony_7_2_0 fix: 7.4.12
euvd symfony_8_0_0_beta1 fix: 8.0.13

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 6 packages in composer, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability resides in Symfony\Component\Mailer\Bridge\Mailomat\Webhook\MailomatRequestParser::validateSignature(), a PHP method that processes inbound callbacks from the Mailomat email service. The X-MOM-Webhook-Signature header is parsed as algo=signature, and the extracted $algo string is forwarded unmodified to PHP's hash_hmac() for verification against the configured webhook secret. PHP's hash_hmac() enforces only that the selected algorithm is HMAC-compatible, a set that includes cryptographically weak primitives such as md4, md5, ripemd128, and tiger128,3. CWE-347 (Improper Verification of Cryptographic Signature) precisely captures the root cause: the implementation fails to restrict which algorithm is acceptable before invoking the cryptographic operation. This is the canonical algorithm-confusion pattern - structurally identical to JWT alg=none and alg=HS256 downgrade attacks - wherein the attacker controls a security-critical parameter (the algorithm selector) that the verifier should enforce from a fixed allowlist. Mailomat's own API documentation (https://api.mailomat.swiss/docs/#tag/webhook-security) specifies SHA-256, but the server-side parser did not enforce this contract. The affected packages identified by CPE are pkg:composer/symfony/mailomat-mailer and pkg:composer/symfony/symfony.

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 (https://github.com/symfony/symfony) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.9 MEDIUM

Network-reachable public webhook endpoint (AV:N, PR:N), but forging a signature without the secret requires advanced cryptanalytic capability against a weak primitive (AC:H); impact is integrity-only with no confidentiality or availability effect.

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

Primary rating from Vendor (https://github.com/symfony/symfony).

CVSS VectorVendor: https://github.com/symfony/symfony

Attack Vector
Network
Attack Complexity
High
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
CVSS changed
Jul 14, 2026 - 20:22 NVD
6.3 (MEDIUM)

DescriptionCVE.org

Description

Symfony\Component\Mailer\Bridge\Mailomat\Webhook\MailomatRequestParser::validateSignature() parses the X-MOM-Webhook-Signature request header as algo=signature and passes the wire-supplied $algo directly to hash_hmac() when verifying the request against the configured webhook secret. The request therefore selects the HMAC primitive used to authenticate it.

PHP's hash_hmac() enforces only that the chosen algorithm is HMAC-compatible. That set still includes primitives with known cryptanalysis (md4, md5, ripemd128, tiger128,3, … - e.g. existential forgery of HMAC-MD4, Contini & Yin, ASIACRYPT 2006). This is the canonical algorithm-confusion shape, analogous to JWT alg=none / alg=HS256 downgrades: any future cryptographic weakness in any HMAC primitive PHP exposes becomes immediately exploitable against a Mailomat webhook receiver, the moment an attacker is in a position to compute a signature for that primitive, without a code change on the Symfony side.

Mailomat's documented webhook security pins SHA-256; the parser did not.

Resolution

MailomatRequestParser::validateSignature() now requires the signature header to be of the form sha256=<hex> and verifies the signature with HMAC-SHA256 keyed by the configured secret using a constant-time comparison. Any other algorithm declared on the wire (including the HMAC primitives PHP would otherwise accept) is rejected.

The patch for this issue is available here for branch 7.4 (and forward-ported to 8.0 and 8.1).

Credits

Symfony would like to thank Omar Alshammari, Essam Alanazi and Alwaleed Alshammari for reporting the issue and Nicolas Grekas for providing the fix.

Threat Intelligence Overview

EPSS Score
0.2%
Top 85% exploitable
Threat Intel
1
1 source
Social Media
2
Sightings
Data Quality
4 sources
Confidence: Medium

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Medium

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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