🇰🇷 한글 설명
Linux 커널의 RDMA/rxe 구성 요소에서 IB_QP_MAX_DEST_RD_ATOMIC 속성 수정 시 Use-After-Free(UAF) 취약점이 발생합니다. 로컬 권한을 가진 사용자가 race condition을 유발하여 리소스를 해제한 후 다시 참조하게 함으로써 시스템을 중단시킬 수 있습니다.
💡 쉬운 설명
컴퓨터의 통신 자원을 관리하는 과정에서, 이미 사용이 끝난 메모리 주소를 다시 사용하려고 시도할 때 발생하는 오류입니다. 이를 통해 공격자는 시스템을 강제로 멈추게 할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/rxe: Fix responder UAF on IB_QP_MAX_DEST_RD_ATOMIC modify_qp
rxe_qp_from_attr() handles IB_QP_MAX_DEST_RD_ATOMIC outside the
IB_QP_STATE path, so it holds no state_lock and runs while the responder
task rxe_receiver() (recv_task on rxe_wq) is live. A modify_qp() setting
only that attribute calls free_rd_atomic_resources() then
alloc_rd_atomic_resources(), swapping qp->resp.resources[] while
rxe_prepare_res()/find_resource() walk it; free_rd_atomic_resources()
also leaves the cached pointer qp->resp.res dangling. A local
unprivileged user can race the free/realloc into a use-after-free in
rxe_receiver() (local DoS).
Drain recv_task around the swap with rxe_disable_task()/rxe_enable_task(),
as rxe_qp_reset() already does when tearing this array down, re-enabling
only after alloc_rd_atomic_resources() succeeds so the responder never
resumes against a NULL qp->resp.resources on the ENOMEM path. Also clear
qp->resp.res in free_rd_atomic_resources(), like the rxe_resp.c
completion paths.
Reproduced under KASAN; the slab-use-after-free in rxe_receiver() is gone.
📍 영향받는 시스템
RDMA/rxe 모듈을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 특정 RDMA 속성을 조작하여 메모리 해제와 재할당 사이의 타이밍 차이를 이용한 공격
🛡️ 대응 방법
커널 패치를 적용하여 rxe_receiver() 작업이 리소스 교체 중에 실행되지 않도록 동기화하고 dangling pointer를 제거해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 보안 패치 버전인지 확인합니다.