Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend POST to public Mailomat webhook endpoint
-
DeliverySet X-MOM-Webhook-Signature to md4=<value>
-
ExploitParser reads attacker-chosen algorithm
-
ExecutionCompute HMAC-MD4 forged signature via known forgery
-
PersistSignature verification passes
-
ImpactFraudulent 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (https://github.com/symfony/symfony).
CVSS VectorVendor: https://github.com/symfony/symfony
Lifecycle Timeline
1DescriptionCVE.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
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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
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
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
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
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
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
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
EUVD-2026-44375
GHSA-rrj9-5q2j-4gvr
NVD
CVE.org
EPSS
Exploit-DB