🇰🇷 한글 설명
Linux 커널의 RDMA/uverbs 구성 요소에서 ib_uverbs_post_send 함수가 사용자 공간에서 전달된 wqe_size 값을 검증 없이 kmalloc()에 사용합니다. 이로 인해 작은 크기의 값이 입력될 경우 커널 힙 메모리의 경계를 벗어난 읽기(Out-of-bounds read)가 발생하여 민감한 커널 정보가 유출될 수 있습니다.
💡 쉬운 설명
프로그램이 메모리를 빌릴 때 실제 필요한 크기보다 훨씬 적게 빌린 뒤, 그 범위를 넘어서 다른 데이터를 읽으려고 시도하는 보안 결함입니다. 이 과정에서 컴퓨터의 중요한 비밀 정보가 외부로 새 나갈 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/uverbs: Validate wqe_size before using it in ib_uverbs_post_send
ib_uverbs_post_send() uses cmd.wqe_size from userspace without any
validation before passing it to kmalloc() and using the allocated
buffer as struct ib_uverbs_send_wr.
If a user provides a small wqe_size value (e.g., 1), kmalloc() will
succeed, but subsequent accesses to user_wr->opcode, user_wr->num_sge,
and other fields will read beyond the allocated buffer, resulting in
an out-of-bounds read from kernel heap memory. This could potentially
leak sensitive kernel information to userspace.
Additionally, providing an excessively large wqe_size can trigger a
WARNING in the memory allocation path, as reported by syzkaller.
This is inconsistent with ib_uverbs_unmarshall_recv() which properly
validates that wqe_size >= sizeof(struct ib_uverbs_recv_wr) before
proceeding.
Add the same validation for ib_uverbs_post_send() to ensure wqe_size
is at least sizeof(struct ib_uverbs_send_wr).
📍 영향받는 시스템
Linux Kernel (RDMA/uverbs 모듈 사용 환경)
⚔️ 공격 벡터
사용자 공간에서 조작된 작은 wqe_size 값을 ib_uverbs_post_send 함수로 전달
🛡️ 대응 방법
wqe_size가 ib_uverbs_send_wr 구조체의 크기보다 큰지 확인하는 검증 로직이 포함된 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인