CVE-2026-19937 in Zephyr
요약
\~에 의해 VulDB • 2026. 10. 13.
Bluetooth Mesh Access 레이어의 지연 가능 메시지(machinery)는 subsys/bluetooth/mesh/delayable_msg.c에서 CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_COUNT(기본값 4개)개의 메시지 컨텍스트(static pool)를 관리하며, 이는 free_ctx 또는 busy_ctx 목록에 연결됩니다. release_delayable_msg_ctx() 함수는 sys_slist_find_and_remove()가 해당 컨텍스트를 busy_ctx에서 찾았을 때만 이를 free_ctx로 반환합니다. bt_mesh_delayable_msg_manage()의 청크 고갈(chunk-exhaustion) 오류 경로에서는 free_ctx에서 이미 제거되었지만 아직 busy_ctx에 삽입되지 않은 컨텍스트를 해제하므로, 이 컨텍스트는 어느 목록에도 추가되지 않고 풀(pool)로부터 영구적으로 손실됩니다. bt_mesh_init()에서 한 번만 실행되는 bt_mesh_delayable_msg_init()과 노드 리셋/서스펜드가 busy_ctx만 비우는 동작 때문에, 이러한 손상은 프로비저닝 해제(unprovision), 재프로비저닝(re-provision) 및 서스펜드/리sume 동안에도 지속되며, 재부팅 시에만 초기화됩니다.
이 오류 경로는 새로운 지연 메시지에 필요한 청크(chunk)에 비해 청크 풀(CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CHUNK_COUNT, 기본값 40개 chunk)이 부족하고, bt_mesh_access_send()가 -EBUSY 또는 -ENOBUFS를 반환하여 가장 오래된 대기 중인 메시지를 플러시(flush)할 수 없을 때 발생합니다. 이는 모든 분할 전송(segmented-TX) 컨텍스트가 사용 중이거나 광고/분할 버퍼가 고갈되었음을 의미합니다. 메시 네트워크에 프로비저닝되어 유효한 NetKey와 서버 모델에 바인딩된 AppKey 또는 DevKey를 보유한 피어(peer)는, Segment Acknowledgment(세그먼트 확인 응답)를 보류하면서 대상 노드에 분할 응답을 유발하는 요청으로 폭주(flooding)함으로써 두 가지 조건 모두를 유도할 수 있습니다. 이렇게 하면 전송 컨텍스트가 점유된 상태로 유지되고 큐에 대기 중인 응답들이 청크 풀을 차지하게 됩니다. 이 창(window) 동안 도착하는 각 추가 요청은 하나의 컨텍스트를 누설(leak)시킵니다.
풀이 고갈되면 bt_mesh_delayable_msg_manage()는 이후의 모든 전송에 대해 -ENOMEM을 반환하며, bt_mesh_model_send()는 즉시 전송으로 대체(fallback)하지 않고 이 오류를 전파합니다. CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG 및 CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CTX_ENABLED가 모두 기본값으로 활성화되어 있으므로, 수신된 모든 액세스 메시지에 대해 ctx->rnd_delay가 설정됩니다. 그 결과 Configuration Server, Health Server 및 애플리케이션 서버 모델의 모든 응답이 묵살(drop)됩니다. 노드는 트래픽을 계속 수신하고 처리하지만 응답하지 않으며, 이는 기기가 재시작될 때까지 지속되는 영구적인 서비스 거부(Denial of Service) 상태입니다. 메모리 손상, 정보 유출 또는 무결성 영향은 없습니다. 수정 전의 릴리스에서는 청크 풀 고갈(따라서 누설)을 훨씬 더 쉽게 유발할 수 있도록 청크 카운트를 페이로드 길이가 아닌 전송 버퍼 용량에서 계산합니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.