Android security tags, read closely by Lightrion

CVE-2026-28653 AI-generated analysis

platform/system/nfc (Android 14/15) and platform/packages/modules/Nfc libnfc-nci (Android 16/17), NFC Type 3 Tag (T3T) reader/writer, NDEF CHECK/UPDATE command builder

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 (7 corrections). Verify against the commit before relying on it.

Adds a range check before the loop in rw_t3t_send_next_ndef_update_cmd and rw_t3t_send_next_ndef_check_cmd (src/nfc/tags/rw_t3t.cc). The first block number plus the block count can no longer go past the 16-bit range, where the commit says the uint16 block_id loop counter could wrap and cause an unbounded heap out-of-bounds write.

Root cause

In rw_t3t_send_next_ndef_update_cmd and rw_t3t_send_next_ndef_check_cmd, the block descriptor loop runs `for (block_id = first_block_to_write; block_id < (first_block_to_write + ndef_blocks_to_write); block_id++)` (and the CHECK equivalent with first_block_to_read / cur_blocks_to_read). Each iteration appends a 2- or 3-byte block descriptor with UINT8_TO_STREAM / UINT16_TO_STREAM into the command buffer through p. The commit describes this as a uint16 loop counter wrap: when the first block plus the block count reaches past 65535, block_id wraps, and the commit says this leads to an unbounded heap out-of-bounds write. The block count comes from ndef_blocks_remaining and blocks_per_update, and blocks_per_update is capped by p_cb->ndef_attrib.nbw.

How the fix works

Completeness

Behavior changes

Per major

Unknowns

Back to September 2026 · Findings