Fix CVE(s): CVE-2026-56131, CVE-2026-76957
* SECURITY UPDATE: Use-after-free because the application-supplied XML_Encoding.convert and XML_Encoding.release callbacks were left outside handler call depth tracking, so a same-parser call made from inside them freed state the running parse still owned (libexpat before 2.8.4) - debian/patches/CVE-2026-76957.patch: install the trampolines callUnknownEncodingConvert() and callUnknownEncodingRelease() in handleUnknownEncoding(), passing the parser itself to XmlInitUnknownEncoding() as the converter's user data, so the reentrancy counter is bumped around the application callbacks and the existing forbidden-call rejection rules apply to them too; routing release through the trampoline also clears m_unknownEncodingRelease/m_unknownEncodingData so it runs exactly once on every path; also carries upstream's regression test into tests/runtests.c (2.2.6 has neither tests/misc_tests.c nor tests/handlers.c, so the test brings a local equivalent of forbidden_calls_character_handler()) - CVE-2026-76957 * SECURITY UPDATE: Use-after-free because handler call depth tracking was absent entirely, leaving XML_GetBuffer, XML_Parse, XML_ParseBuffer, XML_ParserFree, XML_ParserReset and XML_ResumeParser callable from inside a handler, and the XML_TOK_DATA_CHARS handler calls in doCdataSection() untracked (libexpat before 2.8.2) - debian/patches/CVE-2026-56131.patch: introduce m_handlerCallDepth with beforeHandler()/afterHandler() around every handler invocation and isCalledFromInsideHandler() gua
- Products
- expat, libexpat1, libexpat1-dev
- Affected versions
- Not specified
- Fixed versions
- 2.2.6-2+deb10u7+tuxcare.els9
- CVEs
- CVE-2026-50219, CVE-2026-56131, CVE-2026-56412, CVE-2026-76957
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 11:50 UTC · Revision 1
Source evidence
Fix CVE(s): CVE-2026-56131, CVE-2026-76957
core-osv · Original sourcePublished 9 Sept 2026, 09:35 UTC
* SECURITY UPDATE: Use-after-free because the application-supplied XML_Encoding.convert and XML_Encoding.release callbacks were left outside handler call depth tracking, so a same-parser call made from inside them freed state the running parse still owned (libexpat before 2.8.4) - debian/patches/CVE-2026-76957.patch: install the trampolines callUnknownEncodingConvert() and callUnknownEncodingRelease() in handleUnknownEncoding(), passing the parser itself to XmlInitUnknownEncoding() as the converter's user data, so the reentrancy counter is bumped around the application callbacks and the existing forbidden-call rejection rules apply to them too; routing release through the trampoline also clears m_unknownEncodingRelease/m_unknownEncodingData so it runs exactly once on every path; also carries upstream's regression test into tests/runtests.c (2.2.6 has neither tests/misc_tests.c nor tests/handlers.c, so the test brings a local equivalent of forbidden_calls_character_handler()) - CVE-2026-76957 * SECURITY UPDATE: Use-after-free because handler call depth tracking was absent entirely, leaving XML_GetBuffer, XML_Parse, XML_ParseBuffer, XML_ParserFree, XML_ParserReset and XML_ResumeParser callable from inside a handler, and the XML_TOK_DATA_CHARS handler calls in doCdataSection() untracked (libexpat before 2.8.2) - debian/patches/CVE-2026-56131.patch: introduce m_handlerCallDepth with beforeHandler()/afterHandler() around every handler invocation and isCalledFromInsideHandler() gua
osv:CLSA-2026-1788369761
expat
Fixed versions: 2.2.6-2+deb10u7+tuxcare.els9
libexpat1
Fixed versions: 2.2.6-2+deb10u7+tuxcare.els9
libexpat1-dev
Fixed versions: 2.2.6-2+deb10u7+tuxcare.els9
Complete source record
{
"id": "e366a9541d48e5f9c889e09b77976fdf49d53486080e0ce55bb8e8db5fcee4f3",
"url": "https://osv.dev/vulnerability/CLSA-2026-1788369761",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Fix CVE(s): CVE-2026-56131, CVE-2026-76957",
"summary": "* SECURITY UPDATE: Use-after-free because the application-supplied XML_Encoding.convert and XML_Encoding.release callbacks were left outside handler call depth tracking, so a same-parser call made from inside them freed state the running parse still owned (libexpat before 2.8.4) - debian/patches/CVE-2026-76957.patch: install the trampolines callUnknownEncodingConvert() and callUnknownEncodingRelease() in handleUnknownEncoding(), passing the parser itself to XmlInitUnknownEncoding() as the converter's user data, so the reentrancy counter is bumped around the application callbacks and the existing forbidden-call rejection rules apply to them too; routing release through the trampoline also clears m_unknownEncodingRelease/m_unknownEncodingData so it runs exactly once on every path; also carries upstream's regression test into tests/runtests.c (2.2.6 has neither tests/misc_tests.c nor tests/handlers.c, so the test brings a local equivalent of forbidden_calls_character_handler()) - CVE-2026-76957 * SECURITY UPDATE: Use-after-free because handler call depth tracking was absent entirely, leaving XML_GetBuffer, XML_Parse, XML_ParseBuffer, XML_ParserFree, XML_ParserReset and XML_ResumeParser callable from inside a handler, and the XML_TOK_DATA_CHARS handler calls in doCdataSection() untracked (libexpat before 2.8.2) - debian/patches/CVE-2026-56131.patch: introduce m_handlerCallDepth with beforeHandler()/afterHandler() around every handler invocation and isCalledFromInsideHandler() gua",
"evidence": "osv:CLSA-2026-1788369761",
"products": [
{
"name": {
"value": "expat",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.2.6-2+deb10u7+tuxcare.els9",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "libexpat1",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.2.6-2+deb10u7+tuxcare.els9",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "libexpat1-dev",
"evidence": "/affected/2/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.2.6-2+deb10u7+tuxcare.els9",
"evidence": "/affected/2/ranges"
}
],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "CLSA-2026-1788369761",
"aliases": [
"CLSA-2026-1788369761"
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.2.6-2+deb10u7+tuxcare.els9"
}
]
}
],
"package": {
"name": "expat",
"purl": "pkg:deb/tuxcare/expat?distro=debian-10",
"ecosystem": "TuxCare:Debian:10"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/debian10els/CLSA-2026-1788369761.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.2.6-2+deb10u7+tuxcare.els9"
}
]
}
],
"package": {
"name": "libexpat1",
"purl": "pkg:deb/tuxcare/libexpat1?distro=debian-10",
"ecosystem": "TuxCare:Debian:10"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/debian10els/CLSA-2026-1788369761.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.2.6-2+deb10u7+tuxcare.els9"
}
]
}
],
"package": {
"name": "libexpat1-dev",
"purl": "pkg:deb/tuxcare/libexpat1-dev?distro=debian-10",
"ecosystem": "TuxCare:Debian:10"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/debian10els/CLSA-2026-1788369761.json"
}
}
],
"modified": "2026-10-26T09:43:30.426674793Z",
"provider": "osv",
"upstream": [
"CVE-2026-50219",
"CVE-2026-56131",
"CVE-2026-56412",
"CVE-2026-76957"
],
"references": [
"https://errata.tuxcare.com/els_os/debian10els/CLSA-2026-1788369761.html",
"https://nvd.nist.gov/vuln/detail/CVE-2026-56131",
"https://nvd.nist.gov/vuln/detail/CVE-2026-76957"
]
},
"related_cves": [
{
"value": "CVE-2026-50219",
"evidence": "/upstream"
},
{
"value": "CVE-2026-56131",
"evidence": "/upstream"
},
{
"value": "CVE-2026-56412",
"evidence": "/upstream"
},
{
"value": "CVE-2026-76957",
"evidence": "/upstream"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 449959,
"published_at": "2026-09-09T09:35:49+00:00"
}