Description
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.
Published: 2026-08-24
Score: 5.3 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The Hearing Access Service GATT server in Zephyr installs a connection-callback unconditionally, causing security_changed() to run for every connection established before the application registers the service. When a previously bonded peer reconnects during the boot window, security_changed() schedules notification work that accesses a NULL attribute pointer, triggering an assertion or a null dereference if assertions are disabled. This results in a remotely triggerable crash of the HAS peripheral, providing only a denial-of-service effect; there is no memory corruption or data disclosure.

Affected Systems

Affected systems are Zephyr RTOS devices that have the Hearing Access Service enabled and rely on the CONFIG_BT_SETTINGS setting to restore bonded client contexts at boot. The problem manifests in Zephyr versions prior to the inclusion of the early guard fix added in the referenced commit.

Risk and Exploitability

The CVSS score of 5.3 indicates moderate severity, and the vulnerability is not listed in CISA’s KEV catalog. Exploitation requires the attacker to have previously bonded with the target device and to reconnect via Bluetooth within the short window that follows a device restart, during which the service has not yet registered. The attack vector is a nearby Bluetooth connection; no additional privilege or network access is needed. Once triggered, the device becomes unavailable until reboot or repair.

Generated by OpenCVE AI on August 24, 2026 at 19:07 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the Zephyr patch from commit cb2329e090755abde8e57cf1c12aa2b9ca41a6a2 which adds an early guard in security_changed() to skip notifications until HAS is registered.
  • Ensure that bt_has_register() is called early in the application initialization sequence, before the device can process any Bluetooth connections after a restart.
  • Consider disabling CONFIG_BT_SETTINGS or modifying settings_set_cb() to refrain from applying bonded client flags until after the service registration phase.

Generated by OpenCVE AI on August 24, 2026 at 19:07 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 24 Aug 2026 18:45:00 +0000

Type Values Removed Values Added
First Time appeared Zephyrproject
Zephyrproject zephyr
Vendors & Products Zephyrproject
Zephyrproject zephyr

Mon, 24 Aug 2026 17:30:00 +0000

Type Values Removed Values Added
Description 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.
Title Bluetooth HAS: NULL-pointer dereference DoS when a bonded peer reconnects before bt_has_register
Weaknesses CWE-476
References
Metrics cvssV3_1

{'score': 5.3, 'vector': 'CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Subscriptions

Zephyrproject Zephyr
cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-08-24T17:10:37.182Z

Reserved: 2026-06-24T15:29:16.365Z

Link: CVE-2026-13213

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-24T18:16:59.450

Modified: 2026-08-24T18:16:59.450

Link: CVE-2026-13213

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-24T19:15:04Z

Weaknesses