HIGH Introduced in 2.6.12
bluetooth OCF Filter Bypass
CVE-2026-98460
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
01Description
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: hci_sock: reject out-of-range OCF values The raw HCI socket security filter has 128 OCF bits per supported OGF, but masks the 10-bit OCF with 127 before looking up the command. An unprivileged socket can therefore submit a reserved OCF that aliases an allowlisted command modulo 128. A conforming controller should reject reserved opcodes. Nevertheless, the security decision must apply to the opcode that will actually be sent, especially since controller-specific behavior is outside the host stack's control. Reject OCF values that cannot be represented by the security filter instead of aliasing them onto an unrelated command.
02KernelScan AI Analysis
Risk summary
A local unprivileged user with access to a raw HCI socket can bypass the kernel's Bluetooth command filter by sending HCI commands with reserved OCF values (128-1023) that alias to allowlisted commands modulo 128. This allows unauthorized HCI commands to reach the Bluetooth controller, potentially enabling device pairing, key extraction, controller reconfiguration, or denial of service.
Vulnerability analysis
The Bluetooth raw socket security filter uses a 128-bit bitmap per command group to track permitted command codes, but the validation logic masked the 10-bit command code with 127 before checking the bitmap. This caused command codes 128–1023 to wrap around and match bits for codes 0–127, allowing an attacker to send reserved commands that the filter incorrectly treated as allowed. The fix adds an explicit range check rejecting any command code greater than 127 before the bitmap lookup, ensuring the security decision applies to the actual command sent to the controller. The vulnerability can be triggered by any local process that can open a raw HCI socket — typically requiring the CAP_NET_RAW capability in the initial namespace, but also reachable from a user namespace where that capability is granted, since the filter's capability check tests the initial namespace.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.10 | 2.6.12 | 5.10.271 | 70b0a27bdde0 |
| 5.15 | 2.6.12 | 5.15.222 | 598686f5d65b |
| 6.1 | 2.6.12 | 6.1.189 | c1fd465ea1c5 |
| 6.12 | 2.6.12 | 6.12.112 | 320dedad15e8 |
| 6.18 | 2.6.12 | 6.18.55 | 173457fa3e99 |
| 6.6 | 2.6.12 | 6.6.158 | 68f0bcc4e16e |
| 7.2 | 2.6.12 | 7.2.9 | 47d67ec424e6 |
| mainline | 2.6.12 | 7.3 | e93fad891c72 |
| cip/5.10 | 2.6.12 | 5.10.271-cip78 | 70b0a27bdde0 |
| cip/6.1 | 2.6.12 | 6.1.189-cip61 | c1fd465ea1c5 |
| cip/6.1-rt | 2.6.12 | 6.1.189-cip61-rt32 | c1fd465ea1c5 |
| cip/6.12 | 2.6.12 | 6.12.112-cip33 | 320dedad15e8 |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.112-cip33 |
| cip/6.1 | Fixed in 6.1.189-cip61 |
| cip/6.1-rt | Fixed in 6.1.189-cip61-rt32 |
| cip/5.10 | Fixed in 5.10.271-cip78 |
| cip/5.10-rt | Affected — no CIP fix yet (latest 5.10.268-cip77-rt34) |
| cip/4.19 | Affected — no CIP fix yet (latest 4.19.325-cip136) |
| cip/4.19-rt | Affected — no CIP fix yet (latest 4.19.325-cip136-rt50) |
| cip/4.4 | Affected — no CIP fix yet (latest 4.4.302-cip115) |
| cip/4.4-rt | Affected — no CIP fix yet (latest 4.4.302-cip115-rt63) |