🇰🇷 한글 설명
Linux 커널의 mt7915 WiFi 드라이버에서 mt7915_mac_dump_work() 함수 실행 중 Use-After-Free(UAF) 취약점이 발견되었습니다. 장치가 분리될 때 crash_data가 먼저 해제된 후 작업 큐의 작업이 실행되면서 이미 해제된 메모리에 접근하는 레이스 컨디션이 발생합니다.
💡 쉬운 설명
WiFi 장치를 제거하는 과정에서 컴퓨터가 메모리를 정리하기 전에 특정 작업이 남아 있어, 이미 사라진 메모리 공간을 다시 사용하려고 시도할 때 발생하는 오류입니다. 이로 인해 시스템이 충돌하거나 보안 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: mt76: mt7915: fix use-after-free bugs in mt7915_mac_dump_work()
When the mt7915 pci chip is detaching, the mt7915_crash_data is
released in mt7915_coredump_unregister(). However, the work item
dump_work may still be running or pending, leading to UAF bugs
when the already freed crash_data is dereferenced again in
mt7915_mac_dump_work().
The race condition can occur as follows:
CPU 0 (removal path) | CPU 1 (workqueue)
mt7915_pci_remove() | mt7915_sys_recovery_set()
mt7915_unregister_device() | mt7915_reset()
mt7915_coredump_unregister() | queue_work()
vfree(dev->coredump.crash_data) | mt7915_mac_dump_work()
| crash_data-> // UAF
Fix this by ensuring dump_work is properly canceled before
the crash_data is deallocated. Add cancel_work_sync() in
mt7915_unregister_device() to synchronize with any pending
or executing dump work.
📍 영향받는 시스템
Linux kernel (mt76/mt7915 driver module)
⚔️ 공격 벡터
장치 제거(detach) 과정에서 발생하는 레이스 컨디션을 이용한 로컬 공격
🛡️ 대응 방법
mt7915_unregister_device() 함수 내에 cancel_work_sync()를 추가하여 메모리 해제 전 대기 중인 작업을 취소하도록 커널 패치 적용
🔧 검증 코드
현재 커널 버전과 mt7915 드라이버 정보를 확인하여 패치된 최신 커널 버전인지 대조합니다.
uname -r && modinfo mt76_mt7915 2>/dev/null