🇰🇷 한글 설명
Linux 커널의 watch_queue 서브시스템에서 free_watch() 함수가 watch 객체의 메모리를 실제로 해제하지 않아 메모리 누수가 발생하는 취약점입니다. 누락된 kfree 호출을 추가하여 해결되었습니다. keyctl 시스템 호출을 통해 반복적으로 watch를 생성하면 커널 메모리가 계속 소모될 수 있습니다.
💡 쉬운 설명
컴퓨터 운영체제 안에서 더 이상 쓰지 않는 메모리를 반납하지 않는 버그입니다. 이 상태가 반복되면 시스템의 사용 가능한 메모리가 점점 줄어들 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
watch_queue: Actually free the watch
free_watch() does everything barring actually freeing the watch object. Fix
this by adding the missing kfree.
kmemleak produces a report something like the following. Note that as an
address can be seen in the first word, the watch would appear to have gone
through call_rcu().
BUG: memory leak
unreferenced object 0xffff88810ce4a200 (size 96):
comm "syz-executor352", pid 3605, jiffies 4294947473 (age 13.720s)
hex dump (first 32 bytes):
e0 82 48 0d 81 88 ff ff 00 00 00 00 00 00 00 00 ..H.............
80 a2 e4 0c 81 88 ff ff 00 00 00 00 00 00 00 00 ................
backtrace:
[<ffffffff8214e6cc>] kmalloc include/linux/slab.h:581 [inline]
[<ffffffff8214e6cc>] kzalloc include/linux/slab.h:714 [inline]
[<ffffffff8214e6cc>] keyctl_watch_key+0xec/0x2e0 security/keys/keyctl.c:1800
[<ffffffff8214ec84>] __do_sys_keyctl+0x3c4/0x490 security/keys/keyctl.c:2016
[<ffffffff84493a25>] do_syscall_x64 arch/x86/entry/common.c:50 [inline]
[<ffffffff84493a25>] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
[<ffffffff84600068>] entry_SYSCALL_64_after_hwframe+0x44/0xae
📍 영향받는 시스템
메모리 해제 누락 패치 이전의 Linux 커널 버전 (watch_queue 및 keyctl watch 기능 사용 환경)
⚔️ 공격 벡터
로컬 사용자 권한으로 keyctl watch 기능을 반복 호출해 커널 메모리를 고갈시키는 서비스 거부(DoS) 형태
🛡️ 대응 방법
배포판 보안 업데이트를 적용하거나 수정이 포함된 최신 Linux 커널로 업그레이드하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지 또는 Linux 커널 패치 기록과 대조하여 해당 수정이 포함된 빌드인지 확인합니다.