Android security tags, read closely by Lightrion

CVE-2026-55285 AI-generated analysis

platform/hardware/nxp/secure_element, NXP eSE HAL (pn8x and snxxx HIDL/AIDL SecureElement and VirtualISO services)

AI-generated: written from the bulletin and the fixing diffs by claude-fable-5-1, then checked against the code by claude-opus-5-5 (4 corrections). Verify against the commit before relying on it.

Adds a range check on the channel number the Secure Element returns in the MANAGE CHANNEL OPEN response, before that number is used as an index into mOpenedChannels. The check is added to the ten openLogicalChannel implementations the commit touches in the NXP secure_element HAL (pn8x 1.0/1.1, plus snxxx 1.0/1.1/1.2/aidl SecureElement and VirtualISO). The fix also makes pn8x closeChannel return immediately on an invalid channel number.

Root cause

In each openLogicalChannel, phNxpEse_Transceive sends the MANAGE CHANNEL OPEN command. When it succeeded with status word 0x90 0x00, the first response byte rspApdu.p_data[0] was copied into resApduBuff.channelNumber and used directly as the index in `mOpenedChannels[resApduBuff.channelNumber] = true`. Nothing compared that byte against the array capacity. The capacity is MAX_LOGICAL_CHANNELS for pn8x and mMaxChannelCount for snxxx; in snxxx 1.2 and aidl, mOpenedChannels is resized to mMaxChannelCount. A Secure Element that returned a channel byte at or above that bound caused an out-of-bounds boolean write. Separately, in pn8x closeChannel the invalid-channel branch only set sestatus = FAILED and did not return, so execution continued past the if/else chain. The commit message calls this a missing early return.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2026 · Findings