🇰🇷 한글 설명
Linux 커널의 af_packet 구성 요소에서 TPACKET 링 버퍼를 통해 0바이트 데이터를 전송할 때 발생하는 취약점입니다. 하드웨어 헤더 길이가 0인 장치에서 빈 skb(socket buffer)가 생성되어 네트워크 전송 과정 중 커널 경고(WARNING)를 유발합니다.
💡 쉬운 설명
데이터가 하나도 없는 빈 패킷을 보내려고 할 때 리눅스 시스템 내부에서 오류가 발생하는 문제입니다. 이로 인해 시스템에 경고 메시지가 뜨거나 예기치 않은 동작이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
af_packet: Don't send zero-byte data in tpacket_snd().
syzbot reported a WARNING in __dev_queue_xmit() triggered via tpacket_snd():
skb_assert_len
WARNING: at include/linux/skbuff.h:2753 skb_assert_len
WARNING: at __dev_queue_xmit+0x21bc/0x4970 net/core/dev.c:4781
Call Trace:
<TASK>
dev_queue_xmit include/linux/netdevice.h:3448 [inline]
packet_xmit+0x243/0x310 net/packet/af_packet.c:276
tpacket_snd net/packet/af_packet.c:2907 [inline]
packet_sendmsg+0x28d6/0x4eb0 net/packet/af_packet.c:3134
When sending 0-byte packets via TPACKET ring buffer on devices with no
hard header (e.g. dev->hard_header_len == 0), tpacket_fill_skb()
populates an skb with skb->len == 0 and returns 0. tpacket_snd() then
forwards this empty skb to packet_xmit(), causing __dev_queue_xmit() to
hit skb_assert_len(skb).
Similar checks exist in packet_snd() via commit dc633700f00f
("net/af_packet: check len when min_header_len equals to 0") and in
packet_sendmsg_spkt() via commit 6a341729fb31 ("af_packet: Don't send
zero-byte data in packet_sendmsg_spkt().").
Return -EINVAL in tpacket_fill_skb() when skb->len is zero to reject
zero-length packets in tpacket_snd().
📍 영향받는 시스템
Linux kernel (af_packet module 사용 환경)
⚔️ 공격 벡터
로컬 사용자가 TPACKET 링 버퍼를 사용하여 0바이트 크기의 패킷을 전송 시도
🛡️ 대응 방법
tpacket_fill_skb() 함수에서 skb->len이 0인 경우 -EINVAL를 반환하도록 커널 패치를 적용하여 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 패치 버전인지 확인