# CVE-2026-93990: Expat UTF-16 surrogate validation bypass

Source: https://junglewise.ai/threats/cve-2026-93990-expat-through-2-8-4-fails-to-validate-low-surrogates-following  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-09-19. Updated: 2026-09-26  
License: CC BY 4.0 with a link back

CVE-2026-93990 · Severity: high · CVSS 7.5 · Published 2026-09-19

Expat, a widely-used XML parser, fails to properly validate UTF-16 encoded text, allowing attackers to craft malformed XML sequences that hide markup characters from the parser. An attacker can exploit this to inject arbitrary XML content that bypasses validation checks, potentially leading to data injection, privilege escalation, or other attacks in applications that parse untrusted XML.

Vendors: [Libexpat](https://junglewise.ai/threats/vendors/libexpat).

## Quick answers

**Is CVE-2026-93990 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-93990 being exploited in the wild.

**How severe is CVE-2026-93990?** High severity, with a CVSS score of 7.5, published 19 September 2026.

**Which products and versions are affected?** Libexpat Expat through 2.8.4.

**Is there a fix for CVE-2026-93990?** No fixed version is recorded yet. Check the vendor's advisory in the references below. If you run it, Junglewise drafts a mitigation that fits your setup and applies it once you approve, with senior security engineers behind it.

**How is CVE-2026-93990 attacked?** It is attacked over the network, in a software library.

**Am I affected by CVE-2026-93990?** Check whether you run Libexpat Expat at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## Technical details

The vulnerability exists in Expat's UTF-16 input handling, where the parser does not validate that low surrogates properly follow high surrogates. Attackers can craft UTF-16 encoded XML with lone high surrogates that consume following code units, hiding markup characters and enabling XML injection. The flaw is in the parser's surrogate pair validation logic during UTF-16 decoding.

## Affected products

- libexpat Expat through 2.8.4

## Timeline

- 2026-09-19: disclosed

## References

- [https://github.com/libexpat/libexpat](https://github.com/libexpat/libexpat)
- [https://github.com/libexpat/libexpat/commit/ff6e1d7e750bbe245178f51a47a965dc8342861a](https://github.com/libexpat/libexpat/commit/ff6e1d7e750bbe245178f51a47a965dc8342861a)

## Related threats

- [libexpat integer overflow in expat_realloc on 32-bit platforms](https://junglewise.ai/threats/cve-2026-102633-libexpat-versions-2-7-2-through-2-8-5-contain-an-integer)
