Release date:
2026-09-09 15:37:16 UTC
Description:
* SECURITY UPDATE: Use-after-free because handler call depth tracking
was absent entirely, leaving XML_Parse, XML_ParseBuffer,
XML_GetBuffer, XML_ParserFree, XML_ParserReset and XML_ResumeParser
callable on the running parser from inside an application handler,
and the XML_TOK_DATA_CHARS handler calls in doCdataSection() left
untracked (libexpat before 2.8.2)
- debian/patches/CVE-2026-56131.patch: introduce the handler call
depth counter m_handlerCallDepth with the beforeHandler() /
afterHandler() / isCalledFromInsideHandler() helpers from upstream
PR #1246, wrap all 55 handler call sites in expat/lib/xmlparse.c,
and reject the six affected entry points with XML_STATUS_ERROR /
NULL when the counter is non-zero; XML_StopParser and
XML_ExternalEntityParserCreate are deliberately left unguarded, as
upstream intends. Also carries upstream PR #1278, which wraps the
two doCdataSection XML_TOK_DATA_CHARS charDataHandler calls that
the original framework missed and through which the depth guard
was otherwise bypassable. Of the 55 wrapped call sites 53 are
live; the other two sit inside expat's pre-existing
"else if (0 && ...)" disabled branches, which upstream 2.8.2 wraps
as well. Carries upstream's regression test into
expat/tests/runtests.c. Behaviour change inherited from upstream:
leaving a handler through a non-local exit, such as a C++
exception or longjmp(), skips afterHandler(), so the counter stays
non-zero and every guarded entry point refuses from then on,
XML_ParserFree() included. Upstream accepts the resulting leak in
place of a use-after-free and provides no way to clear the counter
- CVE-2026-56131
- CVE-2026-50219
- CVE-2026-56412
* SECURITY UPDATE: Quadratic runtime when detecting duplicate default
attributes, allowing denial of service through a crafted DTD
(libexpat before 2.8.1)
- debian/patches/CVE-2026-45186.patch: add
ELEMENT_TYPE.defaultAttsNames and resolve default-attribute
collisions through a hash table lookup instead of a linear scan
over defaultAtts in defineAttribute(), with matching
hashTableInit()/hashTableDestroy() calls in storeAtts(),
getElementType(), dtdCopy(), dtdReset() and dtdDestroy() in
expat/lib/xmlparse.c. The trade-off, upstream's as well, is one
hash table per element type: a constant extra amount of memory and
setup work per element type and per tag, linear in document size,
in exchange for removing the quadratic term
- CVE-2026-45186
* SECURITY UPDATE: Integer overflow when reallocating the tag name
conversion buffer (libexpat before 2.7.4)
- debian/patches/CVE-2026-25210.patch: reject a doubling that would
overflow before it happens (SIZE_MAX / 2 pre-check) and widen
doContent()'s bufSize from int to size_t in expat/lib/xmlparse.c.
Also carries the storeRawNames() half of upstream commit
25ec4f1b, which widens that function's bufSize and nameLen to
size_t. Upstream released 25ec4f1b in 2.7.2, ahead of this fix in
2.7.4, and it is a prerequisite rather than cosmetics: once
tag->buf is allowed past INT_MAX bytes, the (int) narrowing of
convLen in doContent() can store a negative tag->name.strLen, and
storeRawNames() would then compute a negative int bufSize, skip
its reallocation and memcpy() below the buffer. Widened, the same
value becomes a huge size_t, the reallocation fails and the
function returns XML_FALSE, which is how upstream 2.7.4 behaves
- CVE-2026-25210
* SECURITY UPDATE: Integer overflow in doProlog related to
storeEntityValue and entity textLen (libexpat before 2.8.2)
- debian/patches/CVE-2026-56407.patch: cap the entity value pool
length against INT_MAX before assigning m_declEntity->textLen in
expat/lib/xmlparse.c. The second hunk of upstream commit
30c2fc17 is omitted because it targets storeSelfEntityValue(),
which arrived in expat 2.6.0 and does not exist here
- CVE-2026-56407
* SECURITY UPDATE: Integer overflow in copyString (libexpat before
2.8.2)
- debian/patches/CVE-2026-56408.patch: reject
charsRequired > SIZE_MAX / sizeof(XML_Char) before the allocation
in copyString() in expat/lib/xmlparse.c. This is upstream parity
hardening rather than a live fix on 2.2.10: charsRequired is a
size_t holding the length of the application-supplied encoding
name rather than of document content, so tripping the guard would
need a string larger than the address space even in the
-DXML_UNICODE (buildw) library that debian/rules also builds,
where sizeof(XML_Char) is 2
- CVE-2026-56408
Updated packages:
-
expat_2.2.10-2+deb11u7+tuxcare.els1_amd64.deb
sha:d99b5124a201d5dd0010e21a29abc0c4dad9dcdf
-
libexpat1_2.2.10-2+deb11u7+tuxcare.els1_amd64.deb
sha:95901b68e8442d788bedafff81d160d3ef4e89e7
-
libexpat1-dev_2.2.10-2+deb11u7+tuxcare.els1_amd64.deb
sha:8111fa7ab45f99b2737ea67fa0d462e644c5ee86
-
expat_2.2.10-2+deb11u7+tuxcare.els1_arm64.deb
sha:3c70e47086380e6f3854d7d86ffe81f1406241ba
-
libexpat1_2.2.10-2+deb11u7+tuxcare.els1_arm64.deb
sha:27c68313edd6d6fa28cffebbc59cd7ee137c0cae
-
libexpat1-dev_2.2.10-2+deb11u7+tuxcare.els1_arm64.deb
sha:086b1cf465928af327e9aee469745553e71cf55d
-
expat_2.2.10-2+deb11u7+tuxcare.els1_armel.deb
sha:e2b03a9ca103397722cbdc8957771a7546a5ced9
-
libexpat1_2.2.10-2+deb11u7+tuxcare.els1_armel.deb
sha:88388dc17478d70e626d4542596923414e8f0e4b
-
libexpat1-dev_2.2.10-2+deb11u7+tuxcare.els1_armel.deb
sha:85c527f69324f573fc7fc5344fc252db4e9c104a
Notes:
This page is generated automatically and has not been checked for errors. For clarification or
corrections please contact the
CloudLinux Packaging Team.