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
Share

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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
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
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

3
CVSS changed
Jul 14, 2026 - 20:22 NVD
6.3 (MEDIUM)
Source Code Evidence Fetched
Jun 15, 2026 - 18:21 vuln.today
Analysis Generated
Jun 15, 2026 - 18:21 vuln.today

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.

AnalysisAI

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.

Technical ContextAI

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.

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.

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

Share

CVE-2026-48747 vulnerability details – vuln.today

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