CVE-2026-10685
Last modified
CVE-2026-10685 is a high-severity vulnerability rated 7.6/10 on the CVSS scale. The Zephyr Bluetooth GATT client CCC-write response handler gatt_write_ccc_rsp() in subsys/bluetooth/host/gatt.c invoked the application's params->subscribe() callback after it had already called params->notify(conn, params, NULL, 0). Per the public GATT API, a notify callback with NULL data is the documented signal that the subscription has terminated and the bt_gatt_subscribe_params struct may be freed or reused by the application; calling subscribe() on the struct afterwards is a use-after-free, including an indirect call through the freed params->subscribe function pointer. The error branch is remotely (adjacent) reachable: a Zephyr device acting as a GATT client that calls bt_gatt_subscribe() can be driven into this ordering when a connected GATT server peer answers the CCC write with an ATT Error Response (the peer-supplied error code flows through att_error_rsp -> att_handle_rsp into gatt_write_ccc_rsp). For applications that free or recycle subscription parameters in their notification-termination handler, this results in memory corruption, a crash (denial of service), or potentially attacker-influenced control flow. The fix reorders the handler so the subscribe() callback runs before the terminating notify(NULL) in both the error and unsubscribe paths.. EPSS estimates a 0.18% chance of exploitation in the next 30 days.
Description
The Zephyr Bluetooth GATT client CCC-write response handler gatt_write_ccc_rsp() in subsys/bluetooth/host/gatt.c invoked the application's params->subscribe() callback after it had already called params->notify(conn, params, NULL, 0). Per the public GATT API, a notify callback with NULL data is the documented signal that the subscription has terminated and the bt_gatt_subscribe_params struct may be freed or reused by the application; calling subscribe() on the struct afterwards is a use-after-free, including an indirect call through the freed params->subscribe function pointer. The error branch is remotely (adjacent) reachable: a Zephyr device acting as a GATT client that calls bt_gatt_subscribe() can be driven into this ordering when a connected GATT server peer answers the CCC write with an ATT Error Response (the peer-supplied error code flows through att_error_rsp -> att_handle_rsp into gatt_write_ccc_rsp). For applications that free or recycle subscription parameters in their notification-termination handler, this results in memory corruption, a crash (denial of service), or potentially attacker-influenced control flow. The fix reorders the handler so the subscribe() callback runs before the terminating notify(NULL) in both the error and unsubscribe paths.
Metrics
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H
Weakness Enumeration
Affected Software
| Vendor | Product | Versions |
|---|---|---|
| Zephyrproject | Zephyr | >= 2.4.0, < 4.5.0 |
References
Timeline
- Published
- Last Modified
- Status
- Analyzed
Frequently Asked Questions
What is CVE-2026-10685?
How severe is CVE-2026-10685?
How do I fix CVE-2026-10685?
How Strix Helps
- How Strix found a critical auth bypass in etcdStrix autonomously discovered a critical authentication bypass in etcd, later designated CVE-2026-33413.
- Autonomous PentestingAI agents that find and validate exploitable vulnerabilities like this one across your applications.
- PR ReviewsPentest every pull request so vulnerable code is caught before it ships to production.
- AI Penetration TestingHow AI-driven penetration testing continuously covers your attack surface.
Related CVEs from 2026
- CVE-2026-1068An improper certificate validation vulnerability was reporte…6
- CVE-2026-10680The Classic (BR/EDR) L2CAP signaling handlers l2cap_br_conf_…7.6
- CVE-2026-10681In Zephyr's userspace dynamic-objects subsystem, thread_idx_…7
- CVE-2026-10682The userspace verifier z_vrfy_log_filter_set() for the log_f…7.8
- CVE-2026-10683In the Synopsys DesignWare I2C driver (drivers/i2c/i2c_dw.c)…4.6
- CVE-2026-10684In subsys/debug/coredump/coredump_shell.c, print_coredump_hd…3
- CVE-2026-10686Zephyr's IPv6 forwarding path re-sent routed unicast packets…7.5
- CVE-2026-10687Rejected reason: This CVE Record has been rejected by the Ze…
- CVE-2026-10688A vulnerability was determined in ahujasid blender-mcp up to…5.5
- CVE-2026-1069GitLab has remediated an issue in GitLab CE/EE affecting all…7.5
- CVE-2026-10690A vulnerability was identified in wonderwhy-er DesktopComman…6.3
- CVE-2026-10691A security flaw has been discovered in wonderwhy-er DesktopC…4.3
Are you affected by CVE-2026-10685?
Run a free Strix scan to check your systems for this vulnerability.
Scan your code nowSource: NVD / NIST
