CVE-2026-127916
Received Received - Intake

Buffer Overflow in MCUboot Firmware Validation

Vulnerability report for CVE-2026-127916, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-11-13

Last updated on: 2026-11-13

Assigner: Zephyr Project

Description

bootutil_img_hash() computes the image digest over ih_hdr_size + ih_img_size + ih_protect_tlv_size bytes, all three taken from the candidate image's header, and reads that span out of the slot without checking that it fits in the flash area. The three sizes are also summed without an overflow check. Nothing earlier on the validation path bounds the whole span either: bootutil_img_validate() compares the image size against bootutil_max_image_size() only after the hash has been computed. The callers bound part of the span, or none of it: On the swap and overwrite upgrade path, boot_validate_slot() first runs the image header check (boot_is_header_valid(), later boot_check_header_valid()). Before MCUboot 2.2.0 that check covered only ih_hdr_size + ih_img_size, so for every image the protected-TLV area (ih_protect_tlv_size, a uint16_t, up to 65535 bytes) was hashed without being bounded. From 2.2.0 the check includes ih_protect_tlv_size, except for a compressed image in the secondary slot when MCUBOOT_DECOMPRESS_IMAGES (CONFIG_BOOT_DECOMPRESSION) is enabled, which leaves the same gap of up to 64 KB. The serial recovery image-list and image-state handlers (bs_list() and bs_set() in boot/boot_serial/src/boot_serial.c) and Zephyr's single-slot and firmware loaders (boot/zephyr/single_loader.c, boot/zephyr/firmware_loader.c) call bootutil_img_validate() with no header check at all, so on those paths ih_img_size is unbounded as well. The image is hashed before its signature is checked, so anyone who can place an image in a slot (an OTA or SMP update delivered through the application, or serial recovery) reaches this read before authentication. Whether a malformed header produces an actual read beyond the area depends on the flash backend: Backends whose flash_area_read() bounds-checks the request (Zephyr, Espressif, NuttX, Mbed) return an error once the chunked read crosses the end of the area. Validation fails and the image is rejected, with no over-read. With MCUBOOT_HASH_STORAGE_DIRECTLY (Zephyr CONFIG_BOOT_IMG_HASH_DIRECTLY_ON_STORAGE, available from 2.2.0, not enabled by default) the span is hashed through a single direct pointer into memory-mapped flash, with no bounds check. The Cypress PSoC6 port's flash_area_read() (boot/cypress/cy_flash_pal/cy_flash_map.c, from 1.6.0) does not bound the read: its assert()s compare against the area's absolute offset rather than its size, and it copies with memcpy(). The bytes read past the area feed only the digest, which is compared internally and never returned, so nothing is disclosed. The realistic effect is a read fault during image validation: up to 64 KB past the slot on the upgrade path, and potentially much further on the paths that skip the header check. Where validation is repeated at every boot (a pending upgrade, or the single-slot loader checking its image), the fault can recur on each reset and keep the device from booting. The fix makes bootutil_img_hash() add the three sizes with boot_u32_safe_add() and reject an image whose span, including the sector offset used in swap-using-offset mode, does not fit in the flash area, before any of it is hashed. Because the bound is applied where the bytes are read, it covers every caller.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-11-13
Last Modified
2026-11-13
Generated
2026-11-13
AI Q&A
2026-11-13
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
mcu-tools mcuboot From 1.6.0 (inc) to 2.5.0 (exc)

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-125 The product reads data past the end, or before the beginning, of the intended buffer.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability is an out-of-bounds read flaw in the MCUBoot bootloader's image validation process. The bootutil_img_hash() function hashes a portion of the image slot based on header-provided sizes (header size, image size, and protected TLV size) without verifying if the total span fits within the allocated flash area. This allows a malformed header to specify a hash span up to 64KB larger than the actual slot size, leading to reads beyond the flash memory boundaries.

Detection Guidance

Detecting this vulnerability requires checking if your system uses a vulnerable version of MCUBoot (1.6.0 to 2.4.0) and if the Cypress PSoC6 port is enabled. Inspect the MCUBoot version and configuration in your firmware. For Cypress PSoC6, verify if flash_area_read() lacks bounds checking by examining the port's implementation.

Impact Analysis

The impact depends on the flash backend. Some backends (Zephyr, Espressif, NuttX, Mbed) safely reject the read, causing validation to fail. However, the Cypress PSoC6 port lacks bounds checking, which can result in a read fault during validation. If validation is repeated at every boot, this fault may recur and prevent the device from booting. The vulnerability does not disclose data since the read past the area is only used internally for hashing.

Compliance Impact

This vulnerability primarily causes out-of-bounds memory reads during image validation, which could lead to system instability or boot failures. It does not directly disclose sensitive data, so its impact on compliance like GDPR or HIPAA is likely minimal unless it causes persistent denial-of-service conditions that disrupt data processing or availability.

Mitigation Strategies

Upgrade MCUBoot to version 2.5.0 or later, which includes the fix for bounds checking in bootutil_img_hash(). If using the Cypress PSoC6 port, apply the patch to add bounds checking in flash_area_read(). Disable MCUBOOT_HASH_STORAGE_DIRECTLY if enabled, as it bypasses bounds checks.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-127916. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart

Security Radar

News mentioning this vulnerability
Loading related security news...