Zephyr Bluetooth 컨트롤러 ISO 적응 계층(subsys/bluetooth/controller/ll_sw/isoal.c)이 프레임 ISO PDU 시작 세그먼트의 길이 필드를 검증하지 못합니다. Bluetooth 사양에 따라 시작 세그먼트(sc=0)는 항상 3바이트 time_offset을 전달하므로 해당 세그먼트 헤더 길이는 최소한 PDU_ISO_SEG_TIMEOFFSET_SIZE(3) 이상이어야 합니다. isoal_check_seg_header()는 len < 3인 시작 세그먼트를 유효한 것으로 허용하고 isoal_rx_framed_consume()은 uint8_t에서 길이 = seg_hdr->len - 3을 계산했습니다. 언더플로
Zephyr Bluetooth 컨트롤러 ISO 적응 계층(subsys/bluetooth/controller/ll_sw/isoal.c)이 프레임 ISO PDU 시작 세그먼트의 길이 필드를 검증하지 못합니다. Bluetooth 사양에 따라 시작 세그먼트(sc=0)는 항상 3바이트 time_offset을 전달하므로 해당 세그먼트 헤더 길이는 최소한 PDU_ISO_SEG_TIMEOFFSET_SIZE(3) 이상이어야 합니다. isoal_check_seg_header()는 len < 3인 시작 세그먼트를 유효한 것으로 수락하고 isoal_rx_framed_consume()은 uint8_t에서 길이 = seg_hdr->len - 3을 계산하여 len이 0-2일 때 253-255로 언더플로됩니다. 너무 큰 길이는 isoal_rx_append_to_sdu()로 전달되며, 복사본은 소스 PDU 길이가 아닌 대상 SDU 버퍼 크기에 대해서만 고정됩니다. 따라서 수신된 PDU를 초과하는 최대 255바이트의 컨트롤러 메모리가 (sink_sdu_write_hci()/net_buf_add_mem을 통해) HCI ISO 데이터 패킷으로 복사되어 호스트에 전달됩니다. PDU 및 해당 세그먼트 헤더는 전적으로 공격자가 제어하고 CIS 및 BIS 동기화 HCI 데이터 경로(hci_driver.c)와 공급업체 데이터 경로(ull_iso.c)를 통해 도달할 수 있는 무선으로 도착하므로 장치가 동기화된 원격 CIS 피어 또는 브로드캐스터는 범위를 벗어난 읽기를 트리거하여 호스트에 대한 정보 공개 및 잠재적인 서비스 거부(오류 또는 잘못된 형식의 대형 HCI ISO 패킷)를 유발할 수 있습니다. 이 결함은 v3.0.0에 프레임 ISO 수신이 도입된 이후 모든 Zephyr 릴리스에 영향을 미칩니다. 수정 사항은 isoal_check_seg_header()에서 len < 3인 sc=0 세그먼트를 거부하고 isoal_rx_framed_consume()에서 빼기 전에 가드를 추가합니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 65.00 |
| 악용 신호(PoC 존재) | ×1.20 |
| VPI | 78.00 |
VPI 공식 vpi-v1 기준