[CLSA-2026:1792494701] Fix CVE(s): CVE-2023-28484, CVE-2023-29469, CVE-2024-34459, CVE-2026-0990
Type:
security
Severity:
Moderate
Release date:
2026-10-20 11:11:54 UTC
Description:
* SECURITY UPDATE: NULL pointer dereference in xmlSchemaFixupComplexType - debian/patches/libxml2-2.10.2-CVE-2023-28484.patch: check baseType->subtypes for NULL before splicing the base type's particle in front of the derived type's in xmlSchemaFixupComplexType() in xmlschemas.c; backport of upstream libxml2 e4f85f1b (v2.10.4). A base type declared with simpleContent has no particle, so a schema whose child type extends such a base by complexContent reached that arm with a NULL particle and dereferenced it. The schema is invalid and is rejected a moment later, but the crash happens first, at parse time. Reachable from anything that parses an attacker-supplied .xsd, including xmllint --schema and every caller of xmlSchemaParse(). Upstream's three issue491 test files are not carried: the Schemas target globs test/schemas/*_*.xsd, so they would change the generated test list rather than slot into a case - CVE-2023-28484 * SECURITY UPDATE: non-deterministic hashing of empty dictionary strings - debian/patches/libxml2-2.10.2-CVE-2023-29469.patch: guard namelen <= 0 as well as a NULL name, and return the per-dictionary seed rather than the constant 0, in xmlDictComputeFastKey() in dict.c; backport of upstream libxml2 547edbf1 (v2.10.4). The old guard covered only the NULL case, so a zero-length name that is not NUL-terminated fell through to `value += *name` and read one byte past the end of the string. Upstream states the impact as "various logic or memory errors, including double frees": the inconsistent key makes the dictionary return the wrong answer for an empty name, and callers that free on the strength of it can double free. Taking the seed into account is the secondary half of the change and, upstream's words, "shouldn't have an impact on security". xmlDictComputeBigKey() returns the same constant for an empty name but is left alone, as upstream left it; it has no out-of-bounds read, since it tests namelen <= 0 before touching the data - CVE-2023-29469 * SECURITY UPDATE: buffer over-read in xmllint --htmlout - debian/patches/libxml2-2.10.2-CVE-2024-34459.patch: bound the second backscan in xmlHTMLPrintFileContext() in xmllint.c by `cur > base`, the guard the first backscan already carries; backport of upstream libxml2 3ad7f816 (v2.12.7), also on the 2.11 branch as 8ddc7f13. The loop that recomputes the caret column walked backwards over newlines with no lower bound, so a parser position at the start of the buffer preceded by newlines ran off the front of input->base and kept dereferencing. The function is static to xmllint.c and runs only under --htmlout, so this is the command-line tool rather than the library, and it is a read rather than a write - but xmllint ships in this package on every platform - CVE-2024-34459 * SECURITY UPDATE: unbounded recursion in catalog URI resolution - debian/patches/libxml2-2.10.2-CVE-2026-0990.patch: give xmlCatalogListXMLResolveURI() in catalog.c the MAX_CATAL_DEPTH test and depth accounting that xmlCatalogXMLResolve() has carried for the public-identifier path all along (test at catalog.c:1635, increment at 1641), and walk a separate cursor so the decrements on exit apply to the entry that was incremented; backport of upstream libxml2 ac6f0fde (v2.15.2), whose twin commit 1961208e is byte-identical. A delegateURI entry pointing back at its own catalog, or any cycle among several catalogs, made xmlCatalogListXMLResolveURI() and xmlCatalogXMLResolveURI() recurse without bound until the stack was exhausted and the process died. Reachable wherever catalog resolution runs over catalog files an attacker can influence, including XML_CATALOG_FILES, xmlcatalog and xmllint --catalogs. Note the separate MAX_CATAL_DEPTH test at catalog.c:1872, in xmlCatalogXMLResolveURI(), has no matching increment on that path - it tests the entry handed in at 2132 while both increments are on catal elsewhere. Not claimed to be unreachable in general: xmlCatalogXMLResolve() has a non-decrementing return at 1830-1831 and parsed catalogs are cached globally, so a leaked depth could accumulate; that is upstream's and is not introduced here. Upstream's two test commits are not carried - CVE-2026-0990
Updated packages:
  • alt-libxml2_2.10.2-8_amd64.deb
    sha:a06000640f0ca92fc1d029f80d244768792575f1
  • alt-libxml2-devel_2.10.2-8_amd64.deb
    sha:171f095ea2a68fb233b925a82e280db2ffd77c89
  • alt-libxml2-doc_2.10.2-8_all.deb
    sha:a305601465f01cdc7c473c8c3ec2c7b1587385e0
  • alt-libxml2-static_2.10.2-8_amd64.deb
    sha:e25669c9d39175bc5e2036429c748677f1dd7250
Notes:
This page is generated automatically and has not been checked for errors. For clarification or corrections please contact the CloudLinux Packaging Team.