CVE-2026-0989: libxml2: unbounded RelaxNG include depth enables DoS
LOWCVE-2026-0989 is a stack-exhaustion flaw in libxml2's RelaxNG parser: nested <include> directives are resolved with no depth limit, so a crafted schema can crash the process that parses it. It is rated low (CVSS 3.7, high attack complexity, availability impact only). It is not in CISA KEV, has no public exploit or Nuclei template, and has no EPSS score or SSVC decision. The AI relevance comes from reach rather than severity. libxml2 is bundled in dozens of Red Hat OpenShift AI (rhoai/odh-*) container images, including KServe controllers, MLflow, the model registry, the notebook controllers, and the Ray and training operators, and the package has 695 dependents. A crash would hit availability of ML platform components, and only where they parse untrusted RelaxNG schemas. Treat this as routine patch hygiene: apply Red Hat advisory RHSA-2026:7519 and the upstream libxml2 fix on the normal patch cycle, and prioritize any service that parses externally supplied XML schemas.
What is the risk?
Low overall. The CVSS vector (AV:N/AC:H/PR:N/UI:N/A:L) shows a network-reachable flaw that is hard to exploit and affects only availability. Exploitation needs the target to parse an attacker-controlled RelaxNG schema, which most ML components never do. There is no KEV listing, public exploit, scanner template or EPSS score, so near-term exploitation likelihood looks minimal. The package risk score of 81/100, the OpenSSF Scorecard of 5.4/10 and 137 other CVEs in the same package point to a weak overall security posture for libxml2, and 695 dependents give wide exposure. Impact is limited to a crash of the parsing process, with no confidentiality or integrity loss.
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 Red Hat advisory RHSA-2026:7519 and update the affected rhoai/* and openshift/ose-rhel-coreos images to the patched builds. Upgrade libxml2 to the upstream release that fixes GNOME/libxml2 issue 998 for self-built images. 2) Use SBOM or image scanning to find every container bundling libxml2, including transitive Python (lxml) and Go (cgo) users. 3) Where patching is delayed, do not accept or parse untrusted RelaxNG schemas, and validate or size-limit schema inputs at the boundary. 4) Set container memory and stack limits and liveness probes so crashes recover automatically. 5) Detection: alert on repeated crash loops or segfaults in components that parse XML, and on unusually deeply nested or large schema uploads.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-0989?
CVE-2026-0989 is a stack-exhaustion flaw in libxml2's RelaxNG parser: nested <include> directives are resolved with no depth limit, so a crafted schema can crash the process that parses it. It is rated low (CVSS 3.7, high attack complexity, availability impact only). It is not in CISA KEV, has no public exploit or Nuclei template, and has no EPSS score or SSVC decision. The AI relevance comes from reach rather than severity. libxml2 is bundled in dozens of Red Hat OpenShift AI (rhoai/odh-*) container images, including KServe controllers, MLflow, the model registry, the notebook controllers, and the Ray and training operators, and the package has 695 dependents. A crash would hit availability of ML platform components, and only where they parse untrusted RelaxNG schemas. Treat this as routine patch hygiene: apply Red Hat advisory RHSA-2026:7519 and the upstream libxml2 fix on the normal patch cycle, and prioritize any service that parses externally supplied XML schemas.
Is CVE-2026-0989 actively exploited?
No confirmed active exploitation of CVE-2026-0989 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-0989?
1) Apply Red Hat advisory RHSA-2026:7519 and update the affected rhoai/* and openshift/ose-rhel-coreos images to the patched builds. Upgrade libxml2 to the upstream release that fixes GNOME/libxml2 issue 998 for self-built images. 2) Use SBOM or image scanning to find every container bundling libxml2, including transitive Python (lxml) and Go (cgo) users. 3) Where patching is delayed, do not accept or parse untrusted RelaxNG schemas, and validate or size-limit schema inputs at the boundary. 4) Set container memory and stack limits and liveness probes so crashes recover automatically. 5) Detection: alert on repeated crash loops or segfaults in components that parse XML, and on unusually deeply nested or large schema uploads.
What systems are affected by CVE-2026-0989?
This vulnerability affects the following AI/ML architecture patterns: model serving, MLOps platforms, training pipelines, notebook and workbench environments, data ingestion pipelines, Kubernetes-based AI platforms.
What is the CVSS score for CVE-2026-0989?
CVE-2026-0989 has a CVSS v3.1 base score of 3.7 (LOW).
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0029Denial of AI ServiceAML.T0049Exploit Public-Facing ApplicationCompliance Controls Affected
What are the technical details?
Original Advisory
A flaw was identified in the RelaxNG parser of libxml2 related to how external schema inclusions are handled. The parser does not enforce a limit on inclusion depth when resolving nested <include> directives. Specially crafted or overly complex schemas can cause excessive recursion during parsing. This may lead to stack exhaustion and application crashes, creating a denial-of-service risk.
Exploitation Scenario
An attacker who can submit XML schemas to an ML platform component that validates documents, such as a data ingestion pipeline, a model registry import or a custom validation step, uploads a RelaxNG schema with deeply nested <include> directives. The parser recurses until the stack is exhausted and the process crashes. By resubmitting the schema, the attacker can keep the component in a crash loop and degrade the availability of the pipeline or serving workflow that depends on it. Success depends on a reachable schema-parsing path and some level of access to supply the schema.
Weaknesses (CWE)
CWE-674 — Uncontrolled Recursion: The product does not properly control the amount of recursion that takes place, consuming excessive resources, such as allocated memory or the program stack.
- [Implementation] Ensure that an end condition will be reached under all logic conditions. The end condition may include checking against the depth of recursion and exiting with an error if the recursion goes too deep. The complexity of the end condition contributes to the effectiveness of this action.
- [Implementation] Increase the stack size.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
- access.redhat.com/errata/RHSA-2026:7519vendor-advisoryx_refsource_REDHAT
- access.redhat.com/security/cve/CVE-2026-0989vdb-entryx_refsource_REDHAT
- bugzilla.redhat.com/show_bug.cgiissue-trackingx_refsource_REDHAT
- gitlab.gnome.org/GNOME/libxml2/-/issues/998
Timeline
Related Vulnerabilities
CVE-2025-1537910.0MLflow: RCE via unsanitized model dependency specs
Same package: mlflowCVE-2023-376510.0MLflow: path traversal allows arbitrary file read
Same package: mlflowCVE-2023-11779.8MLflow: path traversal allows arbitrary file read/write
Same package: mlflowCVE-2026-26359.8mlflow: security flaw enables exploitation
Same package: mlflowCVE-2023-27809.8MLflow: path traversal allows arbitrary file read/write
Same package: mlflow