🇰🇷 한글 설명
Linux 커널의 rtl818x Wi-Fi 드라이버에서 USB URB를 해제하기 전에 송신 상태 큐를 먼저 비워 발생하는 취약점입니다. 이로 인해 이미 해제된 skb(socket buffer)를 콜백 함수가 참조하게 되어 커널 NULL 포인터 역참조 및 시스템 충돌이 발생할 수 있습니다.
💡 쉬운 설명
Wi-Fi 장치를 종료할 때 데이터 처리 순서가 잘못되어, 이미 삭제된 메모리 영역을 컴퓨터가 다시 읽으려다 시스템이 멈추는 오류입니다. 이 문제는 장치가 데이터를 보내는 과정에서 메모리 관리 오류를 일으켜 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: rtl818x: Kill URBs before clearing tx status queue
In rtl8187_stop() move the call of usb_kill_anchored_urbs() before clearing
b_tx_status.queue. This change prevents callbacks from using already freed
skb due to anchor was not killed before freeing such skb.
BUG: kernel NULL pointer dereference, address: 0000000000000080
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
PGD 0 P4D 0
Oops: Oops: 0000 [#1] SMP NOPTI
CPU: 7 UID: 0 PID: 0 Comm: swapper/7 Not tainted 6.15.0 #8 PREEMPT(voluntary)
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015
RIP: 0010:ieee80211_tx_status_irqsafe+0x21/0xc0 [mac80211]
Call Trace:
<IRQ>
rtl8187_tx_cb+0x116/0x150 [rtl8187]
__usb_hcd_giveback_urb+0x9d/0x120
usb_giveback_urb_bh+0xbb/0x140
process_one_work+0x19b/0x3c0
bh_worker+0x1a7/0x210
tasklet_action+0x10/0x30
handle_softirqs+0xf0/0x340
__irq_exit_rcu+0xcd/0xf0
common_interrupt+0x85/0xa0
</IRQ>
Tested on RTL8187BvE device.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
📍 영향받는 시스템
Linux kernel (rtl818x 드라이버를 사용하는 시스템, 특히 6.15.0 이전 버전)
⚔️ 공격 벡터
로컬 공격자가 특정 Wi-Fi 하드웨어 동작을 유도하여 커널 패닉(DoS)을 발생시킬 수 있음
🛡️ 대응 방법
rtl8187_stop() 함수 내에서 usb_kill_anchored_urbs() 호출 순서를 수정하여 패치된 최신 Linux 커널로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 패치 버전인지 확인하십시오.