CVE-2026-80798 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nfc: llcp: LLCP 헤더보다 짧은 PDU 거부하기
모든 LLCP PDU는 두 바이트의 헤더(DSAP/SSAP + PTYPE)로 시작하지만, 수신 경로에서는 프레임이 최소한 LLCP_HEADER_SIZE 바이트인지 확인하지 않고 파싱했습니다.
nfc_llcp_rx_skb()는 nfc_llcp_ptype()/nfc_llcp_dsap()/nfc_llcp_ssap()를 통해 헤더를 읽으며, 이는 pdu->data[0] 및 pdu->data[1]에 대한 역참조를 수행합니다. CONNECT 또는 CC PDU의 경우 tlv_array_len = skb->len - LLCP_HEADER_SIZE;가 size_t로 계산되어 TLV 순회에 전달됩니다. 프레임이 헤더보다 짧은 경우 이 뺄셈은 오버플로우하여 거대한 값으로_wrapping_되고, 순회가 버퍼를 훨씬 넘어 실행되며 결과적으로 경계 밖 읽기(out-of-bounds read)가 발생합니다.
근처의 NFC 장치는 인증 없이 이에 접근할 수 있습니다. LLCP 링크 활성화는 NFC-DEP 이후 자동으로 발생하기 때문입니다.
타겟(nfc_llcp_data_received())과 이니시에이터(nfc_llcp_recv()) 경로 모두에서 공유되는 공통 수신 차단 지점인 __nfc_llcp_recv()를 보호하여, 짧은 skb가 rx_work 워커에 의해 파싱되기 전에 삭제되도록 합니다. pskb_may_pull()을 사용하여 두 헤더 바이트가 비선형(non-linear) skb의 경우에도 skb 선형 영역(linear area)에 위치하도록 보장하며, 이는 형제 NCI 및 HCI 수신 경로에서 헤더를 검증하는 방식과 일치합니다.
linux-next 환경에서 /dev/virtual_nci를 통해 KFENCE 경계 밖 읽기(out-of-bounds read)로 재현되었습니다.
0sec 자동화 보안 연구 도구(https://0sec.ai)에 의해 발견됨.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.