bt_iso_recv() in subsys/bluetooth/host/iso.c pulled the ISO SDU header (4 bytes) or, when the timestamp flag is set, the timestamped SDU header (8 bytes) from the inbound HCI ISO Data buffer via net_buf_pull_mem() without first checking buf->len. The upstream hci_iso() handler enforces buf->len == the controller-declared ISO Data_Load length, so a malicious or buggy controller / adjacent BLE peer on an established CIS/BIS can present a first-fragment (BT_ISO_START) or single (BT_ISO_SINGLE) PDU shorter than the SDU header. Because net_buf_simple_pull_mem only guards length with __ASSERT_NO_MSG (compiled out when CONFIG_ASSERT is disabled, the production default), the pull underflows buf->len (uint16_t, e.g. 0 - 8 = 0xFFF8) and advances buf->data past valid data: the subsequent reads of hdr->slen and hdr->sn are out-of-bounds reads of adjacent pool memory. For the multi-fragment (START) case the corrupted buffer is retained as iso->rx, and a following CONT/END fragment's net_buf_tailroom() guard underflows to a near-SIZE_MAX value, defeating the bounds check and causing net_buf_add_mem() to memcpy attacker-supplied fragment data far past the RX pool buffer (out-of-bounds write). The flaw affects ISO receive builds (CONFIG_BT_ISO_RX, selected by the default-off LE Audio options BT_ISO_PERIPHERAL/BT_ISO_CENTRAL/BT_ISO_SYNC_RECEIVER) and has existed since the ISO subsystem was introduced (v2.6.0) through v4.4.0. The fix adds explicit buf->len < sizeof(ts_hdr) and buf->len < sizeof(hdr) checks that drop the buffer before pulling.
{
"cna_assigner": "zephyr",
"cwe_ids": [
"CWE-787"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/10xxx/CVE-2026-10658.json",
"unresolved_ranges": [
{
"extracted_events": [
{
"range": [
{
"introduced": "2.6.0"
},
{
"fixed": "4.6.0"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
}
]
}
]
}{
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"last_affected": "4.4.0"
}
],
"source": "DESCRIPTION"
},
{
"range": [
{
"fixed": "756b16b64317defefad36fc994316cf96e418708"
}
],
"source": "REFERENCES_COMMIT"
}
]
}
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-10658.json"
[
{
"deprecated": false,
"digest": {
"function_hash": "134572500762474954415273241181365668001",
"length": 3050
},
"id": "CVE-2026-10658-20f143e4",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/756b16b64317defefad36fc994316cf96e418708",
"target": {
"file": "subsys/bluetooth/host/iso.c",
"function": "bt_iso_recv"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"168099114548585924020238587370884715754",
"191884450519088609702116423180981832424",
"200153252509417698657746578027052864057",
"146020677195187697394620360524422161079",
"120270977927743524503825982216260583843",
"27287518066979489025828454268399349583",
"203699319397607226302795931346278208100",
"261463190253638825116255803701988653499"
],
"threshold": 0.9
},
"id": "CVE-2026-10658-f3960217",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/zephyrproject-rtos/zephyr/commit/756b16b64317defefad36fc994316cf96e418708",
"target": {
"file": "subsys/bluetooth/host/iso.c"
}
}
]
"2026-11-05T08:04:21Z"