🇰🇷 한글 설명
Linux 커널의 Bluetooth BNEP 모듈에서 bnep_init()이 bnep_sock_init()의 반환값을 무시하여 발생하는 wild-memory-access 취약점입니다. 모듈 제거 시 미정리된 리소스에 proto_unregister()가 접근하여 커널 패닉을 야기합니다.
💡 쉬운 설명
Linux 커널의 블루투스 드라이버 부분에서 메모리 정리 절차를 건너뛰어 시스템이 이미 해제된 메모리에 접근합니다. 이로 인해 로컬 사용자가 모듈을 제거할 때 시스템 충돌이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: bnep: fix wild-memory-access in proto_unregister
There's issue as follows:
KASAN: maybe wild-memory-access in range [0xdead...108-0xdead...10f]
CPU: 3 UID: 0 PID: 2805 Comm: rmmod Tainted: G W
RIP: 0010:proto_unregister+0xee/0x400
Call Trace:
<TASK>
__do_sys_delete_module+0x318/0x580
do_syscall_64+0xc1/0x1d0
entry_SYSCALL_64_after_hwframe+0x77/0x7f
As bnep_init() ignore bnep_sock_init()'s return value, and bnep_sock_init()
will cleanup all resource. Then when remove bnep module will call
bnep_sock_cleanup() to cleanup sock's resource.
To solve above issue just return bnep_sock_init()'s return value in
bnep_exit().
📍 영향받는 시스템
Linux 커널 (Bluetooth BNEP 모듈 포함된 대부분의 배포판)
⚔️ 공격 벡터
로컬 권한자(root)가 rmmod bnep 명령으로 BNEP 모듈을 제거할 때 발생
🛡️ 대응 방법
커널을 최신 버전으로 업데이트하거나 bnep_init()에서 bnep_sock_init()의 반환값을 확인하는 패치 적용
🔧 검증 코드
BNEP 모듈의 버전이나 현재 커널 버전이 표시되며, 배포판의 보안 업데이트 내역에서 해당 CVE 패치 적용 여부를 확인해야 합니다.
modinfo bnep 2>/dev/null | grep -i version || uname -r