CVE-2026-74860: libxml2: DTD double-free crashes Python SAX apps
HIGHCVE-2026-74860 is a double-free in libxml2's Python SAX bindings. A crafted XML document with a DTD containing enumerated attribute values causes a string to be freed twice in the attributeDecl callback. The documented impact is a reproducible crash (denial of service), although the CVSS 8.5 score with a changed scope and high confidentiality and integrity impact is higher than the description supports. This is a general-purpose parsing library rather than an AI-specific flaw. It matters to AI teams because Red Hat lists it in OpenShift AI (RHOAI) KServe controllers, model-serving API images and the rhai base images for CUDA, ROCm, TPU, Gaudi and Neuron. There is no CISA KEV listing, no public exploit, no Nuclei template and no EPSS data, so the likelihood of exploitation looks low today. Exploitation also needs high complexity and low privileges. Apply the Red Hat errata (RHSA-2026:64463, 71585, 71586, 71641, 72470, 72475, 72476, 79357, 82939, 89750), rebuild affected images, and prioritize services that parse untrusted XML through the libxml2 Python SAX bindings.
What is the risk?
Moderate overall risk, with a high CVSS base score (8.5) driven by a scope-changed vector. The confirmed impact is availability loss from a process crash. A double-free is a memory-corruption primitive, so the stated C:H/I:H ratings cannot be dismissed outright, but no code execution or data disclosure has been described. Exploitation likelihood is low: attack complexity is high, low privileges are required, no public exploit or scanner template exists, the CVE is not in KEV, and EPSS is not available. Exposure is limited to services that feed attacker-controlled XML with DTDs into the libxml2 Python SAX API. Package risk score is 0/100 and 14 downstream dependents are tracked, so the blast radius is mostly through container base images.
How does the attack unfold?
What systems are affected?
How severe is it?
What is the attack surface?
What should I do?
1 step1) Apply the relevant Red Hat errata (RHSA-2026:64463, 71585, 71586, 71641, 72470, 72475, 72476, 79357, 82939, 89750) and rebuild or pull updated images for RHOAI and rhai base images. 2) Inventory Python services that import libxml2 and use its SAX interface (for example
import libxml2with a custom SAX handler), and check container SBOMs for libxml2. 3) Where patching is delayed, reject or pre-filter XML containing DOCTYPE/DTD declarations at the ingress layer, or switch to a parser configured to disable DTD processing. 4) Run XML-handling workers under restart supervision (Kubernetes liveness and restart policies) and set resource limits to contain crash loops. 5) Detection: alert on repeated segfaults or SIGABRT/'double free' messages in container logs and on pod restarts of model-serving and controller workloads.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-74860?
CVE-2026-74860 is a double-free in libxml2's Python SAX bindings. A crafted XML document with a DTD containing enumerated attribute values causes a string to be freed twice in the attributeDecl callback. The documented impact is a reproducible crash (denial of service), although the CVSS 8.5 score with a changed scope and high confidentiality and integrity impact is higher than the description supports. This is a general-purpose parsing library rather than an AI-specific flaw. It matters to AI teams because Red Hat lists it in OpenShift AI (RHOAI) KServe controllers, model-serving API images and the rhai base images for CUDA, ROCm, TPU, Gaudi and Neuron. There is no CISA KEV listing, no public exploit, no Nuclei template and no EPSS data, so the likelihood of exploitation looks low today. Exploitation also needs high complexity and low privileges. Apply the Red Hat errata (RHSA-2026:64463, 71585, 71586, 71641, 72470, 72475, 72476, 79357, 82939, 89750), rebuild affected images, and prioritize services that parse untrusted XML through the libxml2 Python SAX bindings.
Is CVE-2026-74860 actively exploited?
No confirmed active exploitation of CVE-2026-74860 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-74860?
1) Apply the relevant Red Hat errata (RHSA-2026:64463, 71585, 71586, 71641, 72470, 72475, 72476, 79357, 82939, 89750) and rebuild or pull updated images for RHOAI and rhai base images. 2) Inventory Python services that import libxml2 and use its SAX interface (for example `import libxml2` with a custom SAX handler), and check container SBOMs for libxml2. 3) Where patching is delayed, reject or pre-filter XML containing DOCTYPE/DTD declarations at the ingress layer, or switch to a parser configured to disable DTD processing. 4) Run XML-handling workers under restart supervision (Kubernetes liveness and restart policies) and set resource limits to contain crash loops. 5) Detection: alert on repeated segfaults or SIGABRT/'double free' messages in container logs and on pod restarts of model-serving and controller workloads.
What systems are affected by CVE-2026-74860?
This vulnerability affects the following AI/ML architecture patterns: model serving, container base images for GPU/accelerator workloads, Kubernetes-based ML platforms (OpenShift AI), ML pipeline orchestration.
What is the CVSS score for CVE-2026-74860?
CVE-2026-74860 has a CVSS v3.1 base score of 8.5 (HIGH).
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.001AI SoftwareAML.T0029Denial of AI ServiceAML.T0049Exploit Public-Facing ApplicationCompliance Controls Affected
What are the technical details?
Original Advisory
A flaw was found in libxml2 with Python bindings enabled. A remote attacker could exploit this vulnerability by providing a specially crafted XML document containing a Document Type Definition (DTD) with enumerated attribute values. This triggers a double-free error in the SAX attributeDecl callback handler, where a string is freed twice. This flaw can lead to a denial of service (DoS) due to a reproducible crash in Python applications using the libxml2 SAX bindings.
Exploitation Scenario
An attacker with low-privilege access to a service that accepts XML submissions, such as a model-registry or metadata ingestion endpoint, uploads a document with a DTD that declares enumerated attribute values. The backend Python component parses it with the libxml2 SAX bindings, and the attributeDecl callback frees the same string twice. The worker crashes. By resending the document, the attacker keeps the component in a crash loop and disrupts model serving or pipeline orchestration. Turning the double-free into code execution is not described and would require substantial additional expertise.
Weaknesses (CWE)
CWE-763 — Release of Invalid Pointer or Reference: The product attempts to return a memory resource to the system, but it calls the wrong release function or calls the appropriate release function incorrectly.
- [Implementation] Only call matching memory management functions. Do not mix and match routines. For example, when you allocate a buffer with malloc(), dispose of the original pointer with free().
- [Implementation] When programming in C++, consider using smart pointers provided by the boost library to help correctly and consistently manage memory.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:HReferences
- access.redhat.com/errata/RHSA-2026:64463vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:71585vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:71586vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:71641vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:72470vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:72475vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:72476vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:79357vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:82939vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:89750vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:89759vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:90309vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91202vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91204vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91206vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91207vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91217vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91218vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91219vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91224vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91232vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91233vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91234vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91235vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91236vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91237vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91238vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91241vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91242vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91243vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91244vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91245vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91246vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91248vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:91249vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:92352vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:92589vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:93463vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:93473vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:93791vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:94459vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:94468vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:94474vendor-advisoryx_refsource_REDHAT
- access.redhat.com/errata/RHSA-2026:94476vendor-advisoryx_refsource_REDHAT
- access.redhat.com/security/cve/CVE-2026-74860vdb-entryx_refsource_REDHAT
- bugzilla.redhat.com/show_bug.cgiissue-trackingx_refsource_REDHAT
Timeline
Related Vulnerabilities
CVE-2026-580167.5GLib: malformed D-Bus XML integer overflow causes DoS
Same package: llama-stackCVE-2026-856667.5OGX/Llama Stack: SSRF via MCP tool server_url
Same package: llama-stackCVE-2026-252113.2llama-stack: security flaw enables exploitation
Same package: llama-stackCVE-2025-5952810.0Flowise: Unauthenticated RCE via MCP config injection
Same attack type: Supply ChainCVE-2025-512010.0smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Supply Chain