🇰🇷 한글 설명
Linux 커널의 io-wq 모듈에서 워커 생성 시 CPU 마스크 할당이 실패하면, 아직 wqes 배열에 추가되지 않은 현재 노드의 io_wqe 구조체 메모리가 오류 처리 경로에서 해제되지 않아 메모리 누수가 발생합니다. 이 문제는 Syzkaller 퍼징 과정에서 발견되었습니다.
💡 쉬운 설명
리눅스 커널이 메모리를 할당한 뒤 실패 상황에서 그 메모리를 반환하지 않아, 시간이 지나며 사용 가능한 메모리가 점점 줄어드는 문제입니다. 공격자가 이를 반복적으로 유발하면 시스템 자원이 고갈될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
io-wq: Fix memory leak in worker creation
If the CPU mask allocation for a node fails, then the memory allocated for
the 'io_wqe' struct of the current node doesn't get freed on the error
handling path, since it has not yet been added to the 'wqes' array.
This was spotted when fuzzing v6.1-rc1 with Syzkaller:
BUG: memory leak
unreferenced object 0xffff8880093d5000 (size 1024):
comm "syz-executor.2", pid 7701, jiffies 4295048595 (age 13.900s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<00000000cb463369>] __kmem_cache_alloc_node+0x18e/0x720
[<00000000147a3f9c>] kmalloc_node_trace+0x2a/0x130
[<000000004e107011>] io_wq_create+0x7b9/0xdc0
[<00000000c38b2018>] io_uring_alloc_task_context+0x31e/0x59d
[<00000000867399da>] __io_uring_add_tctx_node.cold+0x19/0x1ba
[<000000007e0e7a79>] io_uring_setup.cold+0x1b80/0x1dce
[<00000000b545e9f6>] __x64_sys_io_uring_setup+0x5d/0x80
[<000000008a8a7508>] do_syscall_64+0x5d/0x90
[<000000004ac08bec>] entry_SYSCALL_64_after_hwframe+0x63/0xcd
📍 영향받는 시스템
io_uring 기능을 사용하는 Linux 커널 (v5.1 이후 io-wq 코드를 포함하는 버전, 수정 패치 적용 전 커널)
⚔️ 공격 벡터
로컬 사용자가 io_uring_setup 등 시스템 호출을 반복 실행하여 CPU 마스크 할당 실패 조건을 유도하고 메모리 누수를 누적시키는 방식 (서비스 거부 유발 가능)
🛡️ 대응 방법
커널을 해당 메모리 누수 수정 패치가 포함된 최신 안정 버전으로 업데이트하거나 배포판의 보안 업데이트를 적용하세요.
🔧 검증 코드
출력된 커널 버전이 패치 적용된 배포판 보안 업데이트 버전인지 배포판 보안 공지(또는 changelog)와 비교하여 확인하며, 수정 이전 버전이면 업데이트가 필요합니다.
uname -r && (dpkg -l linux-image-$(uname -r) 2>/dev/null || rpm -q kernel 2>/dev/null) | head -5