🇰🇷 한글 설명
Linux 커널의 rtl8150 USB 네트워크 드라이버에서 rtl8150_start_xmit() 함수 호출 중 Use-After-Free(UAF) 취약점이 발견되었습니다. USB 전송 요청(URB)이 완료되어 skb 메모리가 해제된 후, 통계 업데이트를 위해 해당 메모리에 접근할 때 발생합니다.
💡 쉬운 설명
네트워크 카드가 데이터를 보낸 직후, 컴퓨터가 이미 삭제된 데이터 정보를 다시 읽으려고 시도하면서 발생하는 오류입니다. 이 과정에서 시스템이 충돌하거나 보안 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: usb: rtl8150: fix use-after-free in rtl8150_start_xmit()
syzbot reported a KASAN slab-use-after-free read in rtl8150_start_xmit()
when accessing skb->len for tx statistics after usb_submit_urb() has
been called:
BUG: KASAN: slab-use-after-free in rtl8150_start_xmit+0x71f/0x760
drivers/net/usb/rtl8150.c:712
Read of size 4 at addr ffff88810eb7a930 by task kworker/0:4/5226
The URB completion handler write_bulk_callback() frees the skb via
dev_kfree_skb_irq(dev->tx_skb). The URB may complete on another CPU
in softirq context before usb_submit_urb() returns in the submitter,
so by the time the submitter reads skb->len the skb has already been
queued to the per-CPU completion_queue and freed by net_tx_action():
CPU A (xmit) CPU B (USB completion softirq)
------------ ------------------------------
dev->tx_skb = skb;
usb_submit_urb() --+
|-------> write_bulk_callback()
| dev_kfree_skb_irq(dev->tx_skb)
| net_tx_action()
| napi_skb_cache_put() <-- free
netdev->stats.tx_bytes |
+= skb->len; <-- UAF read
Fix it by caching skb->len before submitting the URB and using the
cached value when updating the tx_bytes counter.
The pre-existing tx_bytes semantics are preserved: the counter tracks
the original frame length (skb->len), not the ETH_ZLEN/USB-alignment
padded "count" value that is handed to the device. Changing that
would be a user-visible accounting change and is out of scope for
this UAF fix.
📍 영향받는 시스템
Linux kernel (rtl8150 USB network driver 포함 버전)
⚔️ 공격 벡터
특정 네트워크 트래픽 패턴을 유도하여 커널 메모리 해제 후 접근(UAF)을 유발하는 로컬/원격 공격
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 수정된 최신 패치 버전인지 확인합니다.