🔍 CVE-2026-11368

7.1
CVSS Score
HIGH
2026-08-04
2026-10-23 23:10
✅ 완료

🇰🇷 한글 설명

Zephyr 블루투스 호스트의 ATT 계층에서, 연결이 끊어질 때 전송 중이던 ATT 패킷의 지연된 완료 콜백이 이미 해제된 채널 메모리를 참조하는 use-after-free 취약점입니다. 원격 피어가 ATT 트래픽 중 연결을 끊는 것만으로 블루투스 호스트를 충돌시키거나 메모리를 오염시킬 수 있습니다. 수정본은 채널 해제 전에 참조 포인터를 NULL로 초기화합니다.

💡 쉬운 설명

블루투스 기기 간 연결이 끊어지는 순간을 악용해 기기가 이미 지운 메모리를 다시 건드리게 만드는 결함입니다. 원격에서 아무 인증 없이 기기의 블루투스 기능을 멈추게 하거나 메모리를 손상시킬 수 있습니다.

🇺🇸 원문 (English)

The Bluetooth host ATT layer (subsys/bluetooth/host/att.c) associates each in-flight ATT TX buffer with its owning channel via the static tx_meta_data_storage[] array (data->att_chan = chan). When a buffer's last reference is dropped, its net-buf destroy callback defers the completion handling to the system workqueue (att_tx_destroy -> att_tx_destroy_work_handler -> att_on_sent_cb -> bt_att_sent), where bt_att_sent dereferences the channel and its ATT context (sys_slist_get(&att->reqs)). When a peer disconnects while an ATT PDU (a server notification/indication or any response) is still in flight in the controller TX path, L2CAP tears the channel down in l2cap_chan_del(): it runs the disconnected callback and then the released callback (bt_att_released), which frees the channel slab slot. Because the in-flight buffer is held by the connection TX path rather than the channel's own queue, its deferred destroy work can run after the channel has been freed. The att_on_sent_cb guard intended to drop the stale callback itself dereferences meta->att_chan, which is now a dangling pointer into a freed (and possibly reused) slab slot. A remote peer with an ATT connection can drive this by disconnecting during routine ATT traffic; no pairing or user interaction is required to reach the ATT bearer. The result is a use-after-free read/write of freed channel memory, reliably crashing the Bluetooth host (denial of service) and, because the channel slab slot may be reused, potentially corrupting live memory. The fix makes bt_att_released() NULL the att_chan field of every tx_meta_data_storage[] entry still referencing the channel before freeing it, so the deferred guard observes a NULL pointer and drops the callback. Teardown and the destroy work both run on the cooperative system workqueue, so the array update is serialized and needs no lock.

📍 영향받는 시스템

Zephyr RTOS 블루투스 호스트 스택(subsys/bluetooth/host/att.c)을 사용하는 펌웨어 및 제품

⚔️ 공격 벡터

블루투스 ATT 연결을 맺은 원격 공격자가 일반적인 ATT 통신 중 의도적으로 연결을 끊어 지연 콜백의 use-after-free를 유발

🛡️ 대응 방법

Zephyr 패치가 포함된 최신 버전으로 업데이트하여 bt_att_released()가 참조 중인 tx_meta_data_storage 항목의 att_chan을 NULL로 설정하도록 적용

🔧 검증 코드

출력된 소스에서 bt_att_released 함수 내에 tx_meta_data_storage 항목의 att_chan을 NULL로 초기화하는 코드가 있으면 패치가 적용된 것이고, 없으면 취약한 상태입니다.

Shell / Script
grep -n "att_chan" $(find / -path '*subsys/bluetooth/host/att.c' 2>/dev/null | head -1) 2>/dev/null

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H

💻 영향받는 소프트웨어

Windows Bluetooth Service