🇰🇷 한글 설명
Zephyr OS의 Bluetooth Mesh PB-ADV 프로비저닝 과정에서 타이머 재설정 로직의 오류로 인해 발생합니다. 공격자가 잘못된 패킷을 보내 프로비저닝 실패를 유도한 뒤, 특정 주기로 유효한 FCS를 가진 패킷을 전송하면 프로토콜 타이머가 초기화되어 연결이 해제되지 않고 장치가 프로비저닝 불가능한 상태로 고정됩니다.
💡 쉬운 설명
블루투스 연결 설정 과정에서 공격자가 가짜 신호를 계속 보내 장치를 먹통으로 만드는 공격입니다. 이로 인해 새로운 기기가 해당 장치에 연결하거나 설정을 시도할 수 없게 됩니다.
🇺🇸 원문 (English)
In Zephyr's Bluetooth Mesh PB-ADV provisioning bearer (subsys/bluetooth/mesh/pb_adv.c), prov_msg_recv() rescheduled the provisioning protocol watchdog timer unconditionally at the top of the function, before the FCS check and before the ADV_LINK_INVALID check. Once a provisioning attempt fails, prov_failed() sets ADV_LINK_INVALID and the only recovery path is the protocol timer firing (protocol_timeout -> prov_link_close -> close_link -> reset_adv_link and re-enabling of scanning and the unprovisioned device beacon).
A remote, unauthenticated attacker on the BLE advertising channel can first induce a provisioning failure (e.g. with a malformed generic-provisioning PDU) and then transmit any FCS-valid PB-ADV transaction PDU on the same link ID more often than once per protocol timeout (60 s, or 120 s for OOB input/output). Because each such packet reset the timer even on an invalidated link, protocol_timeout never fired, the dead link was never torn down, and the device remained pinned in an un-provisionable state with its unprovisioned beacon disabled and new Link Open requests rejected.
PB-ADV PDUs are processed without authentication and the FCS is a keyless CRC, so no pairing or prior trust is required and the attacker chooses the link ID itself. The impact is a persistent denial of provisioning/re-provisioning service; there is no memory-safety, confidentiality, or integrity impact.
The vulnerable code shipped in releases through v4.4.1. The fix moves the timer reschedule to after the ADV_LINK_INVALID check (and the FCS check before the reset) so an invalidated link can no longer be kept alive by incoming packets.
📍 영향받는 시스템
Zephyr OS v4.4.1 및 그 이전 버전
⚔️ 공격 벡터
BLE 광고 채널을 통한 원격, 인증되지 않은 공격자가 악의적인 PB-ADV PDU 전송
🛡️ 대응 방법
타이머 재설정 로직을 ADV_LINK_INVALID 체크 이후로 이동시킨 최신 버전으로 업데이트
🔧 검증 코드
출력된 버전이 v4.4.1 이하인 경우 해당 취약점에 노출된 상태입니다.
zephyr-sdk-version-check | grep -E 'v[0-9]+\.[0-9]+\.[0-9]+' | awk '$1 <= "v4.4.1"'
📊 CVSS Vector String
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
💻 영향받는 소프트웨어
Microsoft Entra Provisioning Service