🇰🇷 한글 설명
Linux 커널의 NFC LLCP 구성 요소에서 TLV(Type-Length-Value) 파싱 시 경계 검사가 누락되어 발생하는 취약점입니다. 공격자가 조작된 CONNECT 또는 CC PDU를 전송할 경우, 메모리 경계를 벗어난 읽기(OOB Read)나 정수 언더플로우를 유발하여 시스템 안정성을 해칠 수 있습니다.
💡 쉬운 설명
NFC 통신을 처리하는 과정에서 데이터의 길이를 제대로 확인하지 않아 발생하는 오류입니다. 근처에 있는 공격자가 특수한 신호를 보내 기기의 메모리 정보를 잘못 읽게 만들거나 시스템을 불안정하게 만들 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nfc: llcp: bound the connect_sn TLV walk to the skb
Commit 27256cdb290e ("nfc: llcp: bound SNL TLV parsing to the skb and
add length checks") fixed the unbounded TLV walk in nfc_llcp_recv_snl(),
and commit d8bd2dedbde5 ("nfc: llcp: fix OOB read and u8 offset wrap in
TLV parsers") subsequently bounded nfc_llcp_parse_gb_tlv() and
nfc_llcp_parse_connection_tlv(). One sibling parser sharing the same
pattern remains unbounded: nfc_llcp_connect_sn().
nfc_llcp_connect_sn() walks a TLV list, reading a two-byte header
(type, length) followed by length bytes of value, without checking that
the two header bytes or the declared length stay within the buffer. It
returns a pointer to a service name of up to 255 bytes that may point
past the end of the skb; it is subsequently consumed by memcmp() in
nfc_llcp_sock_from_sn(). In addition tlv_array_len was computed as
"skb->len - LLCP_HEADER_SIZE" in size_t, so a CONNECT/CC frame shorter
than the LLCP header underflows to a huge length and the walk runs far
past the buffer.
nfc_llcp_connect_sn() is reachable from nfc_llcp_recv_connect() and
nfc_llcp_recv_cc(), i.e. from received CONNECT and CC PDUs. A nearby
NFC device can reach this without authentication; LLCP link activation
happens automatically after NFC-DEP, and the nfc_llcp_rx_skb()
dispatcher applies no minimum-length guard.
Walk the TLV list by pointer, bounded by skb_tail_pointer(skb), and
validate each declared length before use, matching the approach already
used for nfc_llcp_recv_snl(). Starting the walk at
&skb->data[LLCP_HEADER_SIZE] against the tail pointer also removes the
size_t underflow for short frames.
Found by 0sec automated security-research tooling (https://0sec.ai).
📍 영향받는 시스템
Linux Kernel (NFC LLCP 관련 모듈이 활성화된 버전)
⚔️ 공격 벡터
인증 없이 근거리 NFC 통신을 통해 조작된 LLCP CONNECT 또는 CC PDU 패킷 전송
🛡️ 대응 방법
커널 패치를 적용하여 nfc_llcp_connect_sn() 함수의 TLV 파싱 시 경계 검사 및 길이 검증 로직을 업데이트해야 합니다.
🔧 검증 코드
커널 버전을 확인하고 해당 함수가 커널 심볼에 존재하는지 확인하여 패치 적용 여부를 검토합니다.
uname -r && grep -r "nfc_llcp_connect_sn" /proc/kallsyms 2>/dev/null