🇰🇷 한글 설명
Linux 커널의 RDMA/bnxt_re 드라이버에서 공유 페이지를 사용자 공간에 노출하기 전 초기화하지 않는 취약점이 발견되었습니다. 이로 인해 커널 메모리에 남아있던 민감한 데이터가 사용자 공간으로 유출될 수 있습니다.
💡 쉬운 설명
컴퓨터의 중요한 정보가 담긴 메모리 공간을 깨끗이 지우지 않고 일반 사용자에게 보여주는 실수입니다. 공격자는 이 공간을 통해 시스템의 비밀 정보를 훔쳐볼 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/bnxt_re: zero shared page before exposing to userspace
bnxt_re_alloc_ucontext() allocates uctx->shpg via
__get_free_page(GFP_KERNEL). The buddy allocator does not zero pages
without __GFP_ZERO, so the page contains stale kernel data from
whatever object most recently freed it.
The page is then mapped into userspace via vm_insert_page() under
BNXT_RE_MMAP_SH_PAGE in bnxt_re_mmap(). The driver only ever writes
4 bytes (a u32 AVID) at offset BNXT_RE_AVID_OFFT (0x10) inside
bnxt_re_create_ah(); the remaining 4092 bytes of the page are exposed
to userspace unsanitised, leaking kernel memory contents.
Any user with access to /dev/infiniband/uverbsX on a host with a
bnxt_re device (typically rdma group membership) can read this data
via a single mmap() at pgoff 0 after IB_USER_VERBS_CMD_GET_CONTEXT.
Other shared pages in the same file already use get_zeroed_page()
correctly:
drivers/infiniband/hw/bnxt_re/ib_verbs.c
srq->uctx_srq_page = (void *)get_zeroed_page(GFP_KERNEL);
cq->uctx_cq_page = (void *)get_zeroed_page(GFP_KERNEL);
uctx->shpg is the only outlier. Bring it in line with the existing
convention by switching to get_zeroed_page().
📍 영향받는 시스템
bnxt_re 드라이버를 사용하는 Linux 커널 시스템
⚔️ 공격 벡터
/dev/infiniband/uverbsX 장치에 접근 권한이 있는 사용자가 mmap() 시스템 호출을 통해 메모리 내용을 읽음
🛡️ 대응 방법
커널 패치를 적용하여 __get_free_page() 대신 get_zeroed_page()를 사용하도록 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 취약점이 해결된 패치 버전인지 확인