CVE-2026-13213

The Hearing Access Service (HAS) GATT server in subsys/bluetooth/audio/has.c installs a connection-callback set unconditionally via BT_CONN_CB_DEFINE, so security_changed() runs for every connection that establishes security even before the application has called bt_has_register(). The service attribute pointers hearing_aid_features_attr, preset_control_point_attr, and active_preset_index_attr remain NULL until bt_has_register() resolves them and sets has.registered. With CONFIG_BT_SETTINGS, settings_set_cb() restores each bonded client's persisted context at boot and unconditionally sets context->flags to BONDED_CLIENT_INIT_FLAGS (non-zero). When a previously bonded peer reconnects and re-establishes security during the startup window before bt_has_register() has been called, security_changed() sees the non-zero flags and schedules notify_work_handler, which calls bt_gatt_is_subscribed() with a still-NULL attribute pointer. That triggers an assertion (__ASSERT(attr, ...) in bt_gatt_is_subscribed()), or a NULL dereference of attr->uuid when assertions are compiled out. The result is a remotely triggerable (Bluetooth, adjacent) crash of the HAS peripheral. Exploitation requires the peer to have previously bonded with the device and to reconnect within the boot-time race window before the application registers the service; a peer that reconnects persistently can prolong the outage. Impact is denial of service only, with no memory corruption or information disclosure. The fix adds an early if (!has.registered) { return; } guard in security_changed(), so no notification work is scheduled until the GATT service is registered and its attribute pointers are valid.
Configurations

No configuration.

History

12 Oct 2026, 15:10

Type Values Removed Values Added
Summary
  • (es) El servidor GATT del Servicio de Acceso Auditivo (HAS) en subsys/bluetooth/audio/has.c instala un conjunto de devolución de llamada de conexión incondicionalmente a través de BT_CONN_CB_DEFINE, por lo que security_changed() se ejecuta para cada conexión que establece seguridad incluso antes de que la aplicación haya llamado a bt_has_register(). Los punteros de atributo del servicio hearing_aid_features_attr, preset_control_point_attr y active_preset_index_attr permanecen NULL hasta que bt_has_register() los resuelve y establece has.registered. Con CONFIG_BT_SETTINGS, settings_set_cb() restaura el contexto persistente de cada cliente vinculado al arrancar y establece incondicionalmente context -> flags a BONDED_CLIENT_INIT_FLAGS (no cero). Cuando un par previamente vinculado se reconecta y restablece la seguridad durante la ventana de inicio antes de que se haya llamado a bt_has_register(), security_changed() ve los indicadores no cero y programa notify_work_handler, que llama a bt_gatt_is_subscribed() con un puntero de atributo aún NULL. Eso activa una aserción (__ASSERT(attr, ...) en bt_gatt_is_subscribed()), o una desreferencia NULL de attr -> uuid cuando las aserciones se compilan fuera. El resultado es un fallo (Bluetooth, adyacente) del periférico HAS que puede ser activado remotamente. La explotación requiere que el par se haya vinculado previamente con el dispositivo y que se reconecte dentro de la ventana de carrera de tiempo de arranque antes de que la aplicación registre el servicio; un par que se reconecta persistentemente puede prolongar la interrupción. El impacto es solo denegación de servicio, sin corrupción de memoria ni revelación de información. La solución añade una protección temprana if (!has.registered) { return; } en security_changed(), por lo que no se programa ningún trabajo de notificación hasta que el servicio GATT esté registrado y sus punteros de atributo sean válidos.

Information

Published : 2026-08-24 18:16

Updated : 2026-10-12 15:10


NVD link : CVE-2026-13213

Mitre link : CVE-2026-13213

CVE.ORG link : CVE-2026-13213


JSON object : View

Products Affected

No product.

CWE
CWE-476

NULL Pointer Dereference