CVE-2026-10685 in Zephyr
Tóm tắt
Bởi VulDB • 31/07/2026
Trình xử lý phản hồi ghi CCC của máy khách GATT Bluetooth Zephyr, `gatt_write_ccc_rsp()` trong tệp `subsys/bluetooth/host/gatt.c`, đã gọi hàm callback `params->subscribe()` của ứng dụng sau khi nó đã gọi `params->notify(conn, params, NULL, 0)`.
Theo API GATT công khai, một callback notify với dữ liệu NULL là tín hiệu được tài liệu hóa cho biết rằng việc đăng ký (subscription) đã kết thúc và cấu trúc `bt_gatt_subscribe_params` có thể bị giải phóng hoặc tái sử dụng bởi ứng dụng; việc gọi `subscribe()` trên cấu trúc này sau đó là lỗi use-after-free, bao gồm cả lời gọi gián tiếp thông qua con trỏ hàm `params->subscribe` đã bị giải phóng.
Nhánh xử lý lỗi có thể đạt được từ xa (ở gần kề): một thiết bị Zephyr đóng vai trò máy khách GATT mà gọi `bt_gatt_subscribe()` có thể bị đẩy vào thứ tự thực thi này khi một peer máy chủ GATT kết nối trả lời lệnh ghi CCC bằng Phản hồi Lỗi ATT (mã lỗi do peer cung cấp sẽ đi qua `att_error_rsp` -> `att_handle_rsp` rồi đến `gatt_write_ccc_rsp`).
Đối với các ứng dụng giải phóng hoặc tái chế tham số đăng ký trong trình xử lý kết thúc thông báo của chúng, điều này dẫn đến hỏng bộ nhớ, sự cố (từ chối dịch vụ) hoặc tiềm ẩn việc kiểm soát luồng thực thi bị ảnh hưởng bởi kẻ tấn công. Bản sửa lỗi sắp xếp lại trình xử lý sao cho callback `subscribe()` chạy trước lệnh `notify(NULL)` kết thúc trong cả hai đường dẫn lỗi và hủy đăng ký.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.