🇰🇷 한글 설명
Linux 커널의 RDMA/ucma 구성 요소에서 ucma_set_ib_path() 함수가 핸들러 락을 사용하지 않아 발생하는 레이스 컨디션 취약점입니다. 이로 인해 ctx->file이 변경되는 동안 잘못된 메모리 주소에 접근하여 Use-After-Free(UAF) 및 커널 패닉을 유발할 수 있습니다.
💡 쉬운 설명
데이터를 처리하는 과정에서 잠금 장치를 제대로 사용하지 않아, 작업 도중 데이터의 위치가 바뀌면서 시스템이 충돌하거나 오류가 발생하는 문제입니다. 이로 인해 컴퓨터의 핵심 기능인 커널이 멈추거나 비정상적으로 작동할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/ucma: Lock the handler in ucma_set_ib_path()
ucma_set_ib_path() calls ucma_event_handler() straight from the write()
path, without the handler lock that keeps ctx->file stable while a uevent
is queued. The handler re-reads ctx->file for every dereference:
mutex_lock(&ctx->file->mut); /* file A */
list_add_tail(&uevent->list, &ctx->file->event_list); /* file B */
mutex_unlock(&ctx->file->mut); /* file B */
wake_up_interruptible(&ctx->file->poll_wait); /* file B */
A concurrent ucma_migrate_id() reassigns ctx->file while the SET_OPTION
caller sleeps in mutex_lock(), so the list_add_tail() lands on file B's
event_list while only file A's mutex is held, racing every other user of
that list:
BUG: KASAN: slab-use-after-free in __list_add_valid_or_report+0x1aa/0x1c0
Read of size 8 at addr ffff888153c6a418 by task poc_corr/486
Call Trace:
__list_add_valid_or_report+0x1aa/0x1c0
ucma_event_handler+0x1be/0xc00
ucma_set_ib_path+0x45e/0x710
ucma_set_option+0x32e/0x590
ucma_write+0x1f9/0x330
Allocated by task 505:
ucma_write_cm_event+0x1a1/0x660
Freed by task 505:
kfree+0x1da/0x4c0
ucma_get_event+0x5d5/0x7e0
The freed object is a ucma_event that another thread dequeued from file B's
list under file B's mutex. File A's mut is left held on top of that,
wedging its next writer in uninterruptible sleep.
This path needs a bound and address-resolved cm_id, so it requires an RDMA
device to be present.
Take the handler lock around the call.
📍 영향받는 시스템
RDMA 기능을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
로컬 사용자가 RDMA 장치를 통해 특정 시스템 호출(write)을 수행하여 레이스 컨디션을 유발
🛡️ 대응 방법
커널 패치를 적용하여 ucma_set_ib_path() 호출 시 핸들러 락을 사용하도록 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 최신 보안 패치 버전인지 확인합니다.