CVE-2026-19740 in Zephyr
요약
\~에 의해 VulDB • 2026. 10. 11.
Zephyr 소프트웨어의 Bluetooth LE 컨트롤러에서 Link Layer Control Procedure(LLCP) 구현은 LL_PHY_UPDATE_IND를 수락한 수신 노드를 유지하여, 업데이트 인스턴스에 도달했을 때 호스트 알림을 위해 나중에 재사용할 수 있도록 합니다(llcp_rx_node_retain() 함수(subsys/bluetooth/controller/ll_sw/ull_llcp.c), 및 해당 노드는 NODE_RX_TYPE_RETAIN으로 표시된 동안 의도적으로 재활용되지 않음). subsys/bluetooth/controller/ll_sw/ull_llcp_phy.c의 llcp_lp_pu_rx() 및 llcp_rp_pu_rx()에서 잘못된 PDU 처리 경로는 먼저 유지된 노드를 해제하지 않고 llcp_lr_complete()/llcp_rr_complete()를 통해 절차를 완료하므로, 노드에 대한 유일한 참조인 절차 컨텍스트가 수신 풀 외부에 여전히 보유되어 있는 동안 해제됩니다.
확립된 LE 연결 상의 피어 장치는 페어링이나 암호화 없이도 이를 결정론적으로 유발할 수 있습니다. 주변 장치(Peripheral)의 경우 LL_PHY_REQ를 보내고, LL_PHY_RSP를 받은 후, 몇몇 연결 이벤트 이후로 설정된 인스턴스를 가진 유효한 LL_PHY_UPDATE_IND를 전송하여 노드를 유지하게 만든 다음, 그 인스턴스에 도달하기 전에 LL_LENGTH_REQ와 같은 다른 모든 LL Control PDU를 보냅니다. ull_cp_rx()는 이를 활성 원격 PHY 업데이트 절차로 라우팅하며, 이는 잘못된 PDU 경로를 취합니다. 로컬에서 시작된 PHY 업데이트 후 LL_REJECT_IND가 오는 경우에도 동일한 대칭 케이스가 적용됩니다.
기본 구성(CONFIG_BT_ASSERT 및 CONFIG_BT_CTLR_ASSERT_DEBUG 모두 기본값이 y)에서는 llcp_lr_check_done()/llcp_rr_check_done()의 불변식 위반으로 인해 컨트롤러 어설션(assertion)이 트리거되어 k_oops()(또는 k_panic())로 이어지며, 이는 무선 범위 내로부터 단일 조작된 PDU 시퀀스로 장치를 고장나게 만듭니다. 이러한 어설션이 컴파일되지 않은 경우, 각 시도마다 수신 PDU 노드와 memq 링크가 조용히 누수됩니다. 컨트롤러의 수신 풀은 작으며(PDU_RX_CNT는 CONFIG_BT_CTLR_RX_BUFFERS에 의해 결정되며 기본값은 1), 공격자가 재연결하는 것만으로 비용을 치므로 몇 번의 반복으로 풀이 고갈되어 부팅 전까지 Bluetooth를 작동 불가능하게 만듭니다. 릴리스 v3.4.0부터 v3.7.x까지는 구성과 무관하게 어설션에 도달하지 못하므로 모든 시도가 조용히 누수됩니다.
영향력은 가용성(Availability) 제한적입니다. 고아 노드는 나중에 역참조되는 덩그라미 포인터(dangling pointer)를 남기지 않으며 호스트로 전달되지도 않으므로, 메모리 부패나 정보 유출은 발생하지 않습니다. 동일한 풀 리퀘스트는 Connection Update 및 CIS 생성 절차에도 동일하게 적용되며, 이들도 잘못된 PDU 처리 경로에서 같은 누락이 있었습니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.