{"id":"CVE-2026-54334","aliases":["EUVD-2026-78065","GHSA-hm2w-vr2p-hq7w","PYSEC-2026-3394"],"status":"published","title":"UEFI Firmware Parser: Heap out-of-bounds write in tiano decompressor `ReadCLen`","description":"UEFI Firmware Parser parses BIOS, Intel ME, and UEFI firmware structures including volumes, file systems, and files. Prior to 1.14, ReadCLen() in uefi_firmware/compression/Tiano/Decompress.c reads Number from GetBits(Sd, CBIT) with CBIT = 9 and can obtain 511 entries for the 510-element Sd-\u003emCLen heap array because its loop does not enforce Index \u003c NC. The CharC == 2 run-length path can additionally request up to 531 zero writes through Sd-\u003emCLen[Index++] = 0. The normal CompressedSection.process() to efi_compressor.TianoDecompress() to TianoDecompress() to DecodeC() to ReadCLen() parsing path therefore permits crafted Tiano or EFI compressed firmware to corrupt heap memory, deterministically crash the parsing process, and potentially execute code depending on build and runtime details. This issue is fixed in version 1.14.","severity":{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00801,"percentile":0.57069,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-787"],"published":"2026-04-16T01:31:09Z","modified":"2026-10-28T10:55:30Z","affected":[{"source":"ghsa","ecosystem":"PyPI","package":"uefi-firmware","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"1.12"}]}]},{"source":"osv","ecosystem":"PyPI","package":"uefi-firmware","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"1.12"}]}],"versions":["1.1","1.10","1.11","1.2","1.3","1.4","1.6","1.7","1.8","1.9"]},{"source":"osv","ecosystem":"PyPI","package":"uefi-firmware","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"1.12"}]}],"versions":["1.1","1.10","1.11","1.2","1.3","1.4","1.6","1.7","1.8","1.9"]}],"products":[{"vendor":"theopolis","product":"uefi-firmware-parser"}],"references":[{"url":"https://github.com/theopolis/uefi-firmware-parser/security/advisories/GHSA-hm2w-vr2p-hq7w","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/theopolis/uefi-firmware-parser/pull/145","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/theopolis/uefi-firmware-parser/commit/bf3dfaa8a05675bae6ea0cbfa082ddcebfcde23e","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/theopolis/uefi-firmware-parser/releases/tag/v1.14","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/advisories/GHSA-hm2w-vr2p-hq7w","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54334.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54334","tags":["advisory"]},{"url":"https://github.com/theopolis/uefi-firmware-parser","tags":["package"]},{"url":"https://pypi.org/project/uefi-firmware","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-54334","title":"UEFI Firmware Parser: Heap out-of-bounds write in tiano decompressor `ReadCLen`","description":"UEFI Firmware Parser parses BIOS, Intel ME, and UEFI firmware structures including volumes, file systems, and files. Prior to 1.14, ReadCLen() in uefi_firmware/compression/Tiano/Decompress.c reads Number from GetBits(Sd, CBIT) with CBIT = 9 and can obtain 511 entries for the 510-element Sd-\u003emCLen heap array because its loop does not enforce Index \u003c NC. The CharC == 2 run-length path can additionally request up to 531 zero writes through Sd-\u003emCLen[Index++] = 0. The normal CompressedSection.process() to efi_compressor.TianoDecompress() to TianoDecompress() to DecodeC() to ReadCLen() parsing path therefore permits crafted Tiano or EFI compressed firmware to corrupt heap memory, deterministically crash the parsing process, and potentially execute code depending on build and runtime details. This issue is fixed in version 1.14.","status":"published","published":"2026-09-14T20:06:42.388Z","modified":"2026-09-16T18:35:59.871Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"cna"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T13:38:20.971157Z"}],"euvd":[{"id":"EUVD-2026-78065","description":"UEFI Firmware Parser parses BIOS, Intel ME, and UEFI firmware structures including volumes, file systems, and files. Prior to 1.14, ReadCLen() in uefi_firmware/compression/Tiano/Decompress.c reads Number from GetBits(Sd, CBIT) with CBIT = 9 and can obtain 511 entries for the 510-element Sd-\u003emCLen heap array because its loop does not enforce Index \u003c NC. The CharC == 2 run-length path can additionally request up to 531 zero writes through Sd-\u003emCLen[Index++] = 0. The normal CompressedSection.process() to efi_compressor.TianoDecompress() to TianoDecompress() to DecodeC() to ReadCLen() parsing path therefore permits crafted Tiano or EFI compressed firmware to corrupt heap memory, deterministically crash the parsing process, and potentially execute code depending on build and runtime details. This issue is fixed in version 1.14.","status":"published","published":"2026-09-14T20:06:42Z","modified":"2026-09-16T18:35:59Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T17:28:14.33177Z"}],"ghsa":[{"id":"GHSA-hm2w-vr2p-hq7w","title":"UEFI Firmware Parser has a heap out-of-bounds write in tiano decompressor ReadCLen","description":"`uefi-firmware` contains a heap out-of-bounds write vulnerability in the native tiano/EFI decompressor. in `uefi_firmware/compression/Tiano/Decompress.c`, `ReadCLen()` reads `Number = GetBits(Sd, CBIT)` with `CBIT = 9`, so `Number` can be as large as `511`, while the destination array `Sd-\u003emCLen` has `NC = 510` elements. the loop writes while `Index \u003c Number` without enforcing `Index \u003c NC`. additionally, the `CharC == 2` run-length path performs `GetBits(Sd, 9) + 20`, allowing up to `531` zero writes through `Sd-\u003emCLen[Index++] = 0`.\n\nReachability is through the normal parsing path: `CompressedSection.process()` -\u003e `efi_compressor.TianoDecompress()` -\u003e `TianoDecompress()` -\u003e `DecodeC()` -\u003e `ReadCLen()`.\n\nMinimum impact is a deterministic crash; depending on build/runtime details, the heap memory corruption may be exploitable for code execution in the context of the parsing process. this project shipped its own copy of the decompressor without the upstream EDK2 hardening for this bug class.\n\n- PR: \u003chttps://github.com/theopolis/uefi-firmware-parser/pull/145\u003e\n- fix commit: \u003chttps://github.com/theopolis/uefi-firmware-parser/commit/bf3dfaa8a05675bae6ea0cbfa082ddcebfcde23e\u003e\n- upstream related fixes: CVE-2017-5731, CVE-2017-5732, CVE-2017-5733, CVE-2017-5734, CVE-2017-5735","status":"published","published":"2026-04-16T01:31:09Z","modified":"2026-07-08T17:32:56Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T14:40:40.389795Z"}],"nvd":[{"id":"CVE-2026-54334","description":"UEFI Firmware Parser parses BIOS, Intel ME, and UEFI firmware structures including volumes, file systems, and files. Prior to 1.14, ReadCLen() in uefi_firmware/compression/Tiano/Decompress.c reads Number from GetBits(Sd, CBIT) with CBIT = 9 and can obtain 511 entries for the 510-element Sd-\u003emCLen heap array because its loop does not enforce Index \u003c NC. The CharC == 2 run-length path can additionally request up to 531 zero writes through Sd-\u003emCLen[Index++] = 0. The normal CompressedSection.process() to efi_compressor.TianoDecompress() to TianoDecompress() to DecodeC() to ReadCLen() parsing path therefore permits crafted Tiano or EFI compressed firmware to corrupt heap memory, deterministically crash the parsing process, and potentially execute code depending on build and runtime details. This issue is fixed in version 1.14.","status":"published","published":"2026-09-14T20:16:46.143Z","modified":"2026-09-30T17:51:56.193Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"secondary"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T14:12:47.335523Z"}],"osv":[{"id":"CVE-2026-54334","title":"UEFI Firmware Parser: Heap out-of-bounds write in tiano decompressor `ReadCLen`","description":"UEFI Firmware Parser parses BIOS, Intel ME, and UEFI firmware structures including volumes, file systems, and files. Prior to 1.14, ReadCLen() in uefi_firmware/compression/Tiano/Decompress.c reads Number from GetBits(Sd, CBIT) with CBIT = 9 and can obtain 511 entries for the 510-element Sd-\u003emCLen heap array because its loop does not enforce Index \u003c NC. The CharC == 2 run-length path can additionally request up to 531 zero writes through Sd-\u003emCLen[Index++] = 0. The normal CompressedSection.process() to efi_compressor.TianoDecompress() to TianoDecompress() to DecodeC() to ReadCLen() parsing path therefore permits crafted Tiano or EFI compressed firmware to corrupt heap memory, deterministically crash the parsing process, and potentially execute code depending on build and runtime details. This issue is fixed in version 1.14.","status":"published","published":"2026-09-14T20:06:42.388Z","modified":"2026-10-28T10:55:30.299341138Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T15:45:10.818486Z"},{"id":"GHSA-hm2w-vr2p-hq7w","title":"UEFI Firmware Parser has a heap out-of-bounds write in tiano decompressor ReadCLen","description":"`uefi-firmware` contains a heap out-of-bounds write vulnerability in the native tiano/EFI decompressor. in `uefi_firmware/compression/Tiano/Decompress.c`, `ReadCLen()` reads `Number = GetBits(Sd, CBIT)` with `CBIT = 9`, so `Number` can be as large as `511`, while the destination array `Sd-\u003emCLen` has `NC = 510` elements. the loop writes while `Index \u003c Number` without enforcing `Index \u003c NC`. additionally, the `CharC == 2` run-length path performs `GetBits(Sd, 9) + 20`, allowing up to `531` zero writes through `Sd-\u003emCLen[Index++] = 0`.\n\nReachability is through the normal parsing path: `CompressedSection.process()` -\u003e `efi_compressor.TianoDecompress()` -\u003e `TianoDecompress()` -\u003e `DecodeC()` -\u003e `ReadCLen()`.\n\nMinimum impact is a deterministic crash; depending on build/runtime details, the heap memory corruption may be exploitable for code execution in the context of the parsing process. this project shipped its own copy of the decompressor without the upstream EDK2 hardening for this bug class.\n\n- PR: \u003chttps://github.com/theopolis/uefi-firmware-parser/pull/145\u003e\n- fix commit: \u003chttps://github.com/theopolis/uefi-firmware-parser/commit/bf3dfaa8a05675bae6ea0cbfa082ddcebfcde23e\u003e\n- upstream related fixes: CVE-2017-5731, CVE-2017-5732, CVE-2017-5733, CVE-2017-5734, CVE-2017-5735","status":"published","published":"2026-04-16T01:31:09Z","modified":"2026-07-13T16:43:42.463561576Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T15:46:49.28217Z"},{"id":"PYSEC-2026-3394","title":"UEFI Firmware Parser has a heap out-of-bounds write in tiano decompressor ReadCLen","description":"`uefi-firmware` contains a heap out-of-bounds write vulnerability in the native tiano/EFI decompressor. in `uefi_firmware/compression/Tiano/Decompress.c`, `ReadCLen()` reads `Number = GetBits(Sd, CBIT)` with `CBIT = 9`, so `Number` can be as large as `511`, while the destination array `Sd-\u003emCLen` has `NC = 510` elements. the loop writes while `Index \u003c Number` without enforcing `Index \u003c NC`. additionally, the `CharC == 2` run-length path performs `GetBits(Sd, 9) + 20`, allowing up to `531` zero writes through `Sd-\u003emCLen[Index++] = 0`.\n\nReachability is through the normal parsing path: `CompressedSection.process()` -\u003e `efi_compressor.TianoDecompress()` -\u003e `TianoDecompress()` -\u003e `DecodeC()` -\u003e `ReadCLen()`.\n\nMinimum impact is a deterministic crash; depending on build/runtime details, the heap memory corruption may be exploitable for code execution in the context of the parsing process. this project shipped its own copy of the decompressor without the upstream EDK2 hardening for this bug class.\n\n- PR: \u003chttps://github.com/theopolis/uefi-firmware-parser/pull/145\u003e\n- fix commit: \u003chttps://github.com/theopolis/uefi-firmware-parser/commit/bf3dfaa8a05675bae6ea0cbfa082ddcebfcde23e\u003e\n- upstream related fixes: CVE-2017-5731, CVE-2017-5732, CVE-2017-5733, CVE-2017-5734, CVE-2017-5735","status":"published","published":"2026-07-13T15:02:48.573733Z","modified":"2026-07-13T16:33:27.543929183Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:52:56.847083Z"}]}}
