CVE-2026-39886
Full vulnerability record from the local CVENow database.
Description
OpenEXR provides the specification and reference implementation of the EXR file format, an image storage format for the motion picture industry. Versions 3.4.0 through 3.4.9 have a signed integer overflow vulnerability in OpenEXR's HTJ2K (High-Throughput JPEG 2000) decompression path. The `ht_undo_impl()` function in `src/lib/OpenEXRCore/internal_ht.cpp` accumulates a bytes-per-line value (`bpl`) using a 32-bit signed integer with no overflow guard. A crafted EXR file with 16,385 FLOAT channels at the HTJ2K maximum width of 32,767 causes `bpl` to overflow `INT_MAX`, producing undefined behavior confirmed by UBSan. On an allocator-permissive host where the required ~64 GB allocation succeeds, the wrapped negative `bpl` value would subsequently be used as a per-scanline pointer advance, which would produce a heap out-of-bounds write. On a memory-constrained host, the allocation fails before `ht_undo_impl()` is entered. This is the second distinct integer overflow in `ht_undo_impl()`. CVE-2026-34545 addressed a different overflow in the same function — the `int16_t p` pixel-loop counter at line ~302 that overflows when iterating over channels whose `width` exceeds 32,767. The CVE-2026-34545 fix did not touch the `int bpl` accumulator at line 211, which is the subject of this advisory. The `bpl` accumulator was also not addressed by any of the 8 advisories in the 2026-04-05 v3.4.9 release batch. This finding is structurally identical to CVE-2026-34588 (PIZ `wcount*nx` overflow in `internal_piz.c`) and should be remediated with the same pattern. The CVE-2026-34588 fix did not touch `internal_ht.cpp`. Version 3.4.10 contains a remediation that addresses the vulnerability in `internal_ht.cpp`.
View original CVE JSON
{
"id": "CVE-2026-39886",
"sourceIdentifier": "[email protected]",
"published": "2026-04-21T02:16:07.753",
"lastModified": "2026-10-26T22:10:00.163",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "OpenEXR provides the specification and reference implementation of the EXR file format, an image storage format for the motion picture industry. Versions 3.4.0 through 3.4.9 have a signed integer overflow vulnerability in OpenEXR's HTJ2K (High-Throughput JPEG 2000) decompression path. The `ht_undo_impl()` function in `src/lib/OpenEXRCore/internal_ht.cpp` accumulates a bytes-per-line value (`bpl`) using a 32-bit signed integer with no overflow guard. A crafted EXR file with 16,385 FLOAT channels at the HTJ2K maximum width of 32,767 causes `bpl` to overflow `INT_MAX`, producing undefined behavior confirmed by UBSan. On an\nallocator-permissive host where the required ~64 GB allocation succeeds, the wrapped negative `bpl` value would subsequently be used as a per-scanline pointer advance, which would produce a heap out-of-bounds write. On a memory-constrained host, the allocation fails before `ht_undo_impl()` is entered. This is the second distinct integer overflow in `ht_undo_impl()`. CVE-2026-34545 addressed a different overflow in the same function — the `int16_t p` pixel-loop counter at line ~302 that overflows when iterating over channels whose `width` exceeds 32,767. The CVE-2026-34545 fix did not touch the `int bpl` accumulator at line 211, which is the subject of this advisory. The `bpl` accumulator was also not addressed by any of the 8 advisories in the 2026-04-05 v3.4.9 release batch. This finding is structurally identical to CVE-2026-34588 (PIZ `wcount*nx` overflow in `internal_piz.c`) and should be remediated with the same pattern. The CVE-2026-34588 fix did not touch `internal_ht.cpp`. Version 3.4.10 contains a remediation that addresses the vulnerability in `internal_ht.cpp`."
},
{
"lang": "es",
"value": "OpenEXR proporciona la especificación y la implementación de referencia del formato de archivo EXR, un formato de almacenamiento de imágenes para la industria cinematográfica. Las versiones 3.4.0 a 3.4.9 tienen una vulnerabilidad de desbordamiento de entero con signo en la ruta de descompresión HTJ2K (JPEG 2000 de alto rendimiento) de OpenEXR. La función “ht_undo_impl()” en “src/lib/OpenEXRCore/internal_ht.cpp” acumula un valor de bytes por línea (“bpl”) utilizando un entero con signo de 32 bits sin protección contra desbordamiento. Un archivo EXR manipulado con 16.385 canales FLOAT con el ancho máximo de HTJ2K de 32.767 provoca que “bpl” desborde “INT_MAX”, produciendo un comportamiento indefinido confirmado por UBSan. En un host permisivo con el asignador donde la asignación requerida de ~64 GB tiene éxito, el valor “bpl” negativo envuelto sería utilizado posteriormente como un avance de puntero por línea de escaneo, lo que produciría una escritura fuera de los límites del heap. En un host con restricciones de memoria, la asignación falla antes de que se ingrese a “ht_undo_impl()”. Este es el segundo desbordamiento de entero distinto en “ht_undo_impl()”. CVE-2026-34545 abordó un desbordamiento diferente en la misma función - el contador de bucle de píxeles “int16_t p” en la línea ~302 que desborda al iterar sobre canales cuyo “width” excede 32.767. La corrección de CVE-2026-34545 no afectó al acumulador “int bpl” en la línea 211, que es el tema de este aviso. El acumulador “bpl” tampoco fue abordado por ninguno de los 8 avisos en el lote de lanzamiento v3.4.9 del 05-04-2026. Este hallazgo es estructuralmente idéntico a CVE-2026-34588 (desbordamiento de PIZ “wcountnx” en “internal_piz.c”) y debería ser remediado con el mismo patrón. La corrección de CVE-2026-34588 no afectó a “internal_ht.cpp”. La versión 3.4.10 contiene una remediación que aborda la vulnerabilidad en “internal_ht.cpp”."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "AcademySoftwareFoundation",
"product": "openexr",
"versions": [
{
"version": ">= 3.4.0, < 3.4.10",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L",
"baseScore": 5.3,
"baseSeverity": "MEDIUM",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"availabilityImpact": "LOW"
},
"exploitabilityScore": 3.9,
"impactScore": 1.4
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-04-21T13:49:09.656578Z",
"id": "CVE-2026-39886",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "yes"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-190"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:openexr:openexr:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.4.0",
"versionEndExcluding": "3.4.10",
"matchCriteriaId": "7AEDBB28-BFC6-427E-977B-A26211BC5724"
}
]
}
]
}
],
"references": [
{
"url": "https://github.com/AcademySoftwareFoundation/openexr/releases/tag/v3.4.10",
"source": "[email protected]",
"tags": [
"Product",
"Release Notes"
]
},
{
"url": "https://github.com/AcademySoftwareFoundation/openexr/security/advisories/GHSA-r3mr-mx8q-jcw5",
"source": "[email protected]",
"tags": [
"Exploit",
"Mitigation",
"Vendor Advisory"
]
}
]
}