CVE-2026-80800 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nfc: llcp: connect_sn TLV 순회를 skb로 제한함
커밋 27256cdb290e("nfc: llcp: SNL TLV 파싱을 skb로 제한하고 길이 검사 추가")는 nfc_llcp_recv_snl() 내의 무제한 TLV 순회 문제를 수정했으며, 커밋 d8bd2dedbde5("nfc: llcp: TLV 파서에서 OOB 읽기 및 u8 오프셋 래핑 수정")은 이후로 nfc_llcp_parse_gb_tlv()와 nfc_llcp_parse_connection_tlv()를 제한했습니다. 동일한 패턴을 공유하는 형제 파서 중 하나인 nfc_llcp_connect_sn()는 여전히 무제한 상태입니다.
nfc_llcp_connect_sn()는 TLV 목록을 순회하며, 두 바이트 헤더(타입, 길이)에 이어 길이에 해당하는 값의 바이트를 읽습니다. 그러나 이 동작은 두 개의 헤더 바이트나 선언된 길이가 버퍼 내에 유지되는지 여부를 확인하지 않습니다. 최대 255바이트까지 서비스 이름을 가리키는 포인터를 반환하는데, 이는 skb 끝을 벗어날 수 있으며 이후 nfc_llcp_sock_from_sn()의 memcmp()에서 소비됩니다. 또한 tlv_array_len은 size_t로 "skb->len - LLCP_HEADER_SIZE"로 계산되었으므로, LLCP 헤더보다 짧은 CONNECT/CC 프레임의 경우 오버플로우가 발생하여 거대한 길이가 되고 순회가 버퍼를 훨씬 넘어갑니다.
nfc_llcp_connect_sn()는 nfc_llcp_recv_connect() 및 nfc_llcp_recv_cc(), 즉 수신된 CONNECT 및 CC PDU에서 접근 가능합니다. 근처에 있는 NFC 장치는 인증 없이 이 지점에 도달할 수 있습니다. LLCP 링크 활성화는 NFC-DEP 이후 자동으로 발생하며, nfc_llcp_rx_skb() 디스패처에는 최소 길이 보호 기능이 적용되지 않습니다.
skb_tail_pointer(skb)로 제한된 포인터를 사용하여 TLV 목록을 순회하고, 사용 전에 각 선언된 길이를 검증합니다. 이는 이미 nfc_llcp_recv_snl()에서 사용되는 접근 방식과 일치합니다. &skb->data[LLCP_HEADER_SIZE]부터 시작하여 tail pointer에 대해 순회를 수행하면 짧은 프레임의 size_t 오버플로우 문제도 제거됩니다.
0sec 자동화 보안 연구 도구(https://0sec.ai)를 통해 발견됨.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.