🇰🇷 한글 설명
Linux 커널의 RDMA/rxe 드라이버에서 ATOMIC_WRITE 페이로드 길이를 적절히 검증하지 않아 발생하는 취약점입니다. 공격자가 0바이트 길이의 요청을 보내면 커널 메모리의 tailroom 영역에 있는 8바이트 데이터를 읽어 공격자의 메모리 영역으로 유출할 수 있습니다.
💡 쉬운 설명
네트워크를 통해 컴퓨터의 중요한 정보를 몰래 훔쳐볼 수 있는 보안 구멍이 발견되었습니다. 공격자가 특수한 명령을 보내면 컴퓨터 내부의 비밀 데이터가 외부로 흘러나갈 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/rxe: Reject non-8-byte ATOMIC_WRITE payloads
atomic_write_reply() at drivers/infiniband/sw/rxe/rxe_resp.c
unconditionally dereferences 8 bytes at payload_addr(pkt):
value = *(u64 *)payload_addr(pkt);
check_rkey() previously accepted an ATOMIC_WRITE request with pktlen ==
resid == 0 because the length validation only compared pktlen against
resid. A remote initiator that sets the RETH length to 0 therefore reaches
atomic_write_reply() with a zero-byte logical payload, and the responder
reads sizeof(u64) bytes from past the logical end of the packet into
skb->head tailroom, then writes those 8 bytes into the attacker's MR via
rxe_mr_do_atomic_write(). That is a remote disclosure of 4 bytes of kernel
tailroom per probe (the other 4 bytes are the packet's own trailing ICRC).
IBA oA19-28 defines ATOMIC_WRITE as exactly 8 bytes. Anything else is
protocol-invalid. Hoist a strict length check into check_rkey() so the
responder never reaches the unchecked dereference, and keep the existing
WRITE-family length logic for the normal RDMA WRITE path.
Reproduced on mainline with an unmodified rxe driver: a sustained
zero-length ATOMIC_WRITE probe repeatedly leaks adjacent skb head-buffer
bytes into the attacker's MR, including recognisable kernel strings and
partial kernel-direct-map pointer words. With this patch applied the
responder rejects the PDU and the MR stays all-zero.
📍 영향받는 시스템
Linux kernel (RDMA/rxe driver 사용 환경)
⚔️ 공격 벡터
원격에서 조작된 0바이트 길이의 ATOMIC_WRITE RDMA 요청 전송
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 rxe 드라이버의 길이 검증 로직을 강화해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.