guzzlehttp/guzzle-services' XML Request Serialization Vulnerable to XML Injection via CDATA Terminator
Date: 2026-06
Affected: composer/guzzlehttp/guzzle-services
Attack vector: deserialization
Category: vulnerability-disclosure
Severity: Medium
CVE: CVE-2026-53723
CWE: CWE-20
CWE-91
CVSS: 5.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N)

### Impact `guzzlehttp/guzzle-services` does not safely serialize scalar XML element values containing the CDATA terminator `]]>`. The XML request serializer writes values containing `<`, `>`, or `&` with `XMLWriter::writeCData($value)`. If attacker-controlled input contains `]]>`, the CDATA section closes early and the remainder is interpreted as XML markup. This is an outgoing request-body integrity issue, not a response parsing issue. The attacker does not need to control the service description or schema. Users are affected when all of the following are true: 1. The application uses `guzzlehttp/guzzle-services` to serialize outgoing requests. 2. A request parameter or `additionalParameters` schema uses `location: xml`. 3. The value is serialized as XML element text, not an XML attribute. 4. The value can contain attacker-controlled, user-controlled, tenant-controlled, or otherwise untrusted input. 5. The value is not constrained by a safe `enum`, `pattern`, or custom filter that excludes `]]>`. 6. The downstream service parses the generated XML structurally and may act on unexpected, duplicated, or injected elements. Applications that serialize untrusted input into `location: xml` request parameters can emit XML containing attacker-controlled elements outside the intended text node. Depending on the receiving service, this can alter operation semantics, smuggle privileged fields, bypass modeled parameter boundaries, or create conflicting duplicated elements. Fixed ser


Mitigations:

Architectural layers (MAESTRO):