{"id":"CVE-2026-16671","kind":"vulnerability","aliases":["CVE-2026-16671"],"related":[],"title":"MCUboot: split-image hash buffer overflows stack in non-default builds","description":"split_image_check() in boot/bootutil/src/loader.c declares a fixed uint8_t loader_hash[32] buffer and passes it as the out_hash out-parameter to bootutil_img_validate(). That routine copies IMAGE_HASH_SIZE bytes into out_hash (memcpy(out_hash, hash, IMAGE_HASH_SIZE) in boot/bootutil/src/image_validate.c), where IMAGE_HASH_SIZE is a compile-time constant of 64 for MCUBOOT_SHA512 or 48 for MCUBOOT_SIGN_EC384/SHA-384 (boot/bootutil/include/bootutil/crypto/sha.h). The buffer tracks SHA-256 (32 bytes) while the copy length tracks the configured algorithm, so the write overruns the buffer by 16 or 32 bytes.\n\nThe overflow is only present in a non-default configuration: the legacy Mynewt split-image feature must be compiled (split_go()/split_image_check(), i.e. neither MCUBOOT_DIRECT_XIP nor MCUBOOT_RAM_LOAD), the digest must be larger than 32 bytes (MCUBOOT_SHA512 or MCUBOOT_SIGN_EC384), and MCUBOOT_SIGN_PURE must be off. split_go() is a public API with no caller inside MCUboot; it is invoked from a Mynewt application. In the default SHA-256 build there is no overflow.\n\nThe over-written bytes are the one-way digest of the loader image and the overflow length is fixed at build time, so the contents are not meaningfully attacker-controlled and the size is not attacker-chosen. The realistic impact is bounded, uncontrolled corruption of the bootloader's stack on the split-boot path, manifesting as instability or failed boot in the affected configuration rather than reliable code execution. The fix is to size loader_hash to IMAGE_HASH_SIZE and pass IMAGE_HASH_SIZE as the matching seed length.","summary":"In MCUboot's legacy Mynewt split-image path, a 32-byte stack buffer receives a 48- or 64-byte digest when built with SHA-384 or SHA-512 signing. The overrun corrupts the bootloader's stack, which may cause instability or a failed boot rather than reliable code execution.","severity":"low","cvss":2.9,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"mcuboot","fixed":[],"affected":"","ecosystem":"vendor"}],"ecosystems":["vendor"],"tags":["embedded","mcuboot","mynewt","package"],"not_affected_if":["default-config","direct-xip","ram-load","sha256-only","sign-pure"],"how_to_check":"- Check whether the build defines `MCUBOOT_SHA512` or `MCUBOOT_SIGN_EC384`, and whether `MCUBOOT_DIRECT_XIP`, `MCUBOOT_RAM_LOAD` and `MCUBOOT_SIGN_PURE` are absent\n- Confirm the Mynewt split-image feature (`split_go()`) is compiled in\n- The default SHA-256 build is not affected","fix":null,"status":"open","published_at":"2026-11-13T02:18:57+00:00","first_seen_at":"2026-11-13T02:41:37+00:00","triaged_at":"2026-11-13T02:43:06+00:00","updated_at":"2026-11-13T02:43:06+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-13T02:43:06Z","model":"claude-haiku-5-5","output":{"fix":"unknown","reach":"local","title":"MCUboot: split-image hash buffer overflows stack in non-default builds","impact":"low","summary":"In MCUboot's legacy Mynewt split-image path, a 32-byte stack buffer receives a 48- or 64-byte digest when built with SHA-384 or SHA-512 signing. The overrun corrupts the bootloader's stack, which may cause instability or a failed boot rather than reliable code execution.","audience":"developers","category":"package","nicknames":[],"who_cares":["mcuboot","embedded","mynewt"],"confidence":0.6,"fix_status":"unknown","needs_auth":"no","worst_case":"Bootloader stack corrupted, causing instability or failed boot","analyst_note":"Confirm the fixed MCUboot release version from the patch link (github.com) and the vendor advisory; sources give no fixed version.","how_to_check":"- Check whether the build defines `MCUBOOT_SHA512` or `MCUBOOT_SIGN_EC384`, and whether `MCUBOOT_DIRECT_XIP`, `MCUBOOT_RAM_LOAD` and `MCUBOOT_SIGN_PURE` are absent\n- Confirm the Mynewt split-image feature (`split_go()`) is compiled in\n- The default SHA-256 build is not affected","plain_action":"","product_name":"mcuboot","needs_analyst":true,"not_affected_if":["default-config","sha256-only","direct-xip","ram-load","sign-pure"],"who_is_affected":"Only builds of MCUboot that use the legacy Mynewt split-image feature with a SHA-384 or SHA-512 digest, with MCUBOOT_SIGN_PURE off, are exposed. Default SHA-256 builds and projects using direct XIP or RAM load are not affected. The sources state the fix as sizing the buffer to IMAGE_HASH_SIZE, but no fixed release version is given.","user_interaction":"no","product_ecosystem":"vendor","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.000883,"input_tokens":5179,"output_tokens":730,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-16671':16A,19A '-2026':15A,18A '-256':148C,246C '-384':50B '-512':53B '/split_image_check':193C '16':166C '32':35B,87C,149C,168C,209C '48':41B,138C '64':43B,133C 'affect':319C 'algorithm':158C 'api':229C 'applic':241C 'attack':283C,291C 'attacker-chosen':290C 'attacker-control':282C 'boot':69B,309C,316C 'boot/bootutil/include/bootutil/crypto/sha.h':143C 'boot/bootutil/src/image_validate.c':121C 'boot/bootutil/src/loader.c':79C 'bootload':59B,302C 'bootutil':100C 'bound':297C 'buffer':6A,38B,88C,145C,164C 'build':13A,247C,274C 'built':47B 'byte':36B,44B,109C,150C,169C,210C,256C 'caller':232C 'caus':64B 'check':77C 'chosen':292C 'code':73B,324C 'compil':129C,190C 'compile-tim':128C 'configur':157C,180C,320C 'constant':131C 'content':278C 'control':284C 'copi':105C,153C 'corrupt':57B,299C 'cve':14A,17A 'declar':80C 'default':12A,179C,244C 'digest':45B,204C,262C 'direct':197C 'ec384':216C 'ec384/sha-384':142C 'embed':21B 'execut':74B,325C 'fail':68B,315C 'featur':187C 'fix':82C,272C,327C 'go':192C,225C 'hash':5A,86C,95C,107C,112C,115C,116C,118C,124C,332C,335C,340C 'i.e':194C 'imag':4A,32B,76C,106C,117C,123C,186C,266C,334C,339C 'img':101C 'impact':295C 'insid':233C 'instabl':65B,313C 'invok':237C 'larger':207C 'legaci':28B,182C 'length':154C,270C,346C 'load':202C 'loader':85C,265C,331C 'manifest':311C 'match':344C 'may':63B 'mcuboot':1A,20A,22B,26B,135C,140C,196C,200C,211C,214C,218C,234C 'meaning':281C 'memcpi':113C 'must':188C,205C,221C 'mynewt':23B,29B,183C,240C 'neither':195C 'non':11A,178C 'non-default':10A,177C 'one':260C 'one-way':259C 'out-paramet':96C 'over-written':253C 'overflow':7A,171C,251C,269C 'overrun':56B,162C 'packag':24B 'paramet':98C 'pass':90C,338C 'path':33B,310C 'present':174C 'public':228C 'pure':220C 'ram':201C 'rather':70B,321C 'realist':294C 'receiv':39B 'reliabl':72B,323C 'routin':104C 'seed':345C 'sha':49B,52B,147C,245C 'sha512':136C,212C 'sign':54B,141C,215C,219C 'size':108C,119C,125C,287C,330C,336C,341C 'split':3A,31B,75C,185C,191C,224C,308C 'split-boot':307C 'split-imag':2A,30B,184C 'stack':8A,37B,61B,304C 'time':130C,275C 'track':146C,155C 'uint8':83C 'uncontrol':298C 'valid':102C 'way':261C 'write':161C 'written':255C 'xip':198C","nicknames":[],"mitigations":[],"who_affected":"Only builds of MCUboot that use the legacy Mynewt split-image feature with a SHA-384 or SHA-512 digest, with MCUBOOT_SIGN_PURE off, are exposed. Default SHA-256 builds and projects using direct XIP or RAM load are not affected. The sources state the fix as sizing the buffer to IMAGE_HASH_SIZE, but no fixed release version is given.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"unknown","audience":"developers","plain_action":null,"pkeys":["mcuboot"],"ptokens":["mcuboot"],"labels":["embedded","low","mcuboot","mynewt","package","vendor"],"campaign_type":null,"search_a":"'-16671':16A,19A '-2026':15A,18A 'buffer':6A 'build':13A 'cve':14A,17A 'default':12A 'hash':5A 'imag':4A 'mcuboot':1A,20A 'non':11A 'non-default':10A 'overflow':7A 'split':3A 'split-imag':2A 'stack':8A","search_b":"'-384':50B '-512':53B '32':35B '48':41B '64':43B 'boot':69B 'bootload':59B 'buffer':38B 'built':47B 'byte':36B,44B 'caus':64B 'code':73B 'corrupt':57B 'digest':45B 'embed':21B 'execut':74B 'fail':68B 'imag':32B 'instabl':65B 'legaci':28B 'may':63B 'mcuboot':22B,26B 'mynewt':23B,29B 'overrun':56B 'packag':24B 'path':33B 'rather':70B 'receiv':39B 'reliabl':72B 'sha':49B,52B 'sign':54B 'split':31B 'split-imag':30B 'stack':37B,61B","search_c":"'-256':148C,246C '/split_image_check':193C '16':166C '32':87C,149C,168C,209C '48':138C '64':133C 'affect':319C 'algorithm':158C 'api':229C 'applic':241C 'attack':283C,291C 'attacker-chosen':290C 'attacker-control':282C 'boot':309C,316C 'boot/bootutil/include/bootutil/crypto/sha.h':143C 'boot/bootutil/src/image_validate.c':121C 'boot/bootutil/src/loader.c':79C 'bootload':302C 'bootutil':100C 'bound':297C 'buffer':88C,145C,164C 'build':247C,274C 'byte':109C,150C,169C,210C,256C 'caller':232C 'check':77C 'chosen':292C 'code':324C 'compil':129C,190C 'compile-tim':128C 'configur':157C,180C,320C 'constant':131C 'content':278C 'control':284C 'copi':105C,153C 'corrupt':299C 'declar':80C 'default':179C,244C 'digest':204C,262C 'direct':197C 'ec384':216C 'ec384/sha-384':142C 'execut':325C 'fail':315C 'featur':187C 'fix':82C,272C,327C 'go':192C,225C 'hash':86C,95C,107C,112C,115C,116C,118C,124C,332C,335C,340C 'i.e':194C 'imag':76C,106C,117C,123C,186C,266C,334C,339C 'img':101C 'impact':295C 'insid':233C 'instabl':313C 'invok':237C 'larger':207C 'legaci':182C 'length':154C,270C,346C 'load':202C 'loader':85C,265C,331C 'manifest':311C 'match':344C 'mcuboot':135C,140C,196C,200C,211C,214C,218C,234C 'meaning':281C 'memcpi':113C 'must':188C,205C,221C 'mynewt':183C,240C 'neither':195C 'non':178C 'non-default':177C 'one':260C 'one-way':259C 'out-paramet':96C 'over-written':253C 'overflow':171C,251C,269C 'overrun':162C 'paramet':98C 'pass':90C,338C 'path':310C 'present':174C 'public':228C 'pure':220C 'ram':201C 'rather':321C 'realist':294C 'reliabl':323C 'routin':104C 'seed':345C 'sha':147C,245C 'sha512':136C,212C 'sign':141C,215C,219C 'size':108C,119C,125C,287C,330C,336C,341C 'split':75C,185C,191C,224C,308C 'split-boot':307C 'split-imag':184C 'stack':304C 'time':130C,275C 'track':146C,155C 'uint8':83C 'uncontrol':298C 'valid':102C 'way':261C 'write':161C 'written':255C 'xip':198C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-12T23:19:25+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L","cvss_by":"vulnerabilities@zephyrproject.org","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-16671","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-16671","severity":null,"published_at":"2026-11-13T02:18:57+00:00","modified_at":"2026-11-13T02:18:57+00:00","first_seen_at":"2026-11-13T02:41:37+00:00","fetched_at":"2026-11-13T02:41:37+00:00","note":null}],"documents":[{"id":141891,"url":"https://github.com/mcu-tools/mcuboot/commit/9fb70f00173766d73cdadd82266bd61e4ddd0252","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":141892,"url":"https://github.com/mcu-tools/mcuboot/security/advisories/GHSA-vj6q-r752-fpqv","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-12T23:19:25+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}