ZeroHour

CVE-2026-89583

niche

Out-of-bounds read in Linux kernel Bluetooth EIR parsing leaks kernel memory via LE Audio

CVSS 3.1
8.1 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's Bluetooth Extended Inquiry Response (EIR) parser contains an out-of-bounds read in eir_get_service_data(), which mis-accounts the remaining buffer length by subtracting only each field's data length instead of its full dlen + 2 footprint, so the length drifts and eventually the parser reads past the end of the buffer. A remote attacker within Bluetooth radio range can trigger this by broadcasting periodic advertising (PA) payloads packed with mismatching Service Data fields to a device acting as an ISO broadcast sink; the parser walks off the le_per_adv_data[] array into the rest of struct hci_conn. If a drifted field matches the BAA UUID, the leaked kernel bytes are copied into the socket's ISO base structure, where user space can read them back via getsockopt(BT_ISO_BASE), yielding disclosure of adjacent kernel heap memory (CVSS 3.1: 8.1, high confidentiality and availability impact, adjacent-network vector). Affected systems are Linux machines whose Bluetooth stack is configured as an LE Audio ISO broadcast sink — a relatively new and specialized role, not the common phone/headset case. No public proof of concept is known, the flaw is not on the CISA KEV list, and no in-the-wild exploitation has been reported.

What to do: Apply kernel updates from your distribution once the fix (recomputing eir_len from the end of the buffer each iteration) is included, and verify with your vendor's advisory that the backported patch covers eir_get_service_data(). If patching is delayed, avoid operating affected systems as ISO broadcast sinks (disable LE Audio broadcast sink / periodic advertising sync where feasible) or turn off Bluetooth entirely on devices that don't need it. Watch kernel logs for slab/KASAN out-of-bounds reports on Bluetooth RX paths as an indicator of probing.

Affected
Linux kernel (Bluetooth EIR parsing, eir_get_service_data(), reached via the ISO broadcast sink / periodic advertising p
Estimated exposure
nicheunknown — plausibly on the order of tens of thousands of devices or fewer — While Linux ships on billions of devices, the vulnerable code path requires the device to operate as a Bluetooth LE Audio ISO broadcast sink, a feature that is opt-in and part of a still-nascent LE Audio ecosystem (mainly embedded audio…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: eir: Fix OOB read in eir_get_service_data() eir_get_service_data() walks the advertising data for a Service Data field with a matching UUID. On a mismatch it advances: eir += dlen; eir_len -= dlen; eir_get_data() reports dlen as the field's data length, but the field spans dlen + 2 bytes once its length and type bytes count, and more when non-Service-Data fields were skipped to reach it. The pointer lands correctly on the next field. eir_len does not, and the shortfall compounds across fields until eir_get_data() reads the length and type bytes of a "field" past the end of the buffer. For an ISO broadcast sink that buffer is hcon->le_per_adv_data[], filled from the periodic advertising reports of a remote broadcaster. A PA payload packed with mismatching Service Data fields walks off the array into the rest of struct hci_conn. A drifted field that matches the BAA UUID puts those bytes in iso_pi(sk)->base, where user space reads them back with getsockopt(BT_ISO_BASE). Recompute eir_len from the end of the buffer each iteration.

Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H

In the news

No ingested article mentions this CVE yet.