CVE-2026-46133 in Linux
요약
\~에 의해 VulDB • 2026. 05. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
RDMA/rxe: ICRC 처리 전에 알려지지 않은 오퍼코드를 거부합니다
커밋 7244491dab34("RDMA/rxe: rxe_rcv에서 payload_size() 호출 전 패드 및 ICRC 검증")을 적용한 후에도, 단일 비인증 UDP 패킷이 여전히 커널 패닉을 유발할 수 있습니다. 해당 패치는 짧은 패킷에 대해 유효한 오퍼코드만 있는 경우 payload_size() 오버플로우(underflow)만 처리했을 뿐, 알려지지 않은 오퍼코드를 포함하는 패킷에는 적용되지 않았습니다. 아래에 설명된 알려지지 않은 오퍼코드에 의한 경계 밖(OOB) 읽기는 해당 커밋보다 이전 시점부터 존재하며 초기 Soft RoCE 드라이버까지 거슬러 올라갑니다.
해당 지점에 추가된 검사는 다음과 같습니다.
pkt->paylen < header_size(pkt) + bth_pad(pkt) + RXE_ICRC_SIZE
여기서 header_size(pkt)는 rxe_opcode[pkt->opcode].length로 확장됩니다. rxe_opcode[] 배열은 256개의 엔트리를 가지지만 정의된 IB 오퍼코드에 대해서만 채워져 있습니다. 다른 모든 엔트리(예: 오퍼코드 0xff)는 0으로 초기화되므로 length == 0이 되며, 검사는 다음과 같이 단순화됩니다.
pkt->paylen < 0 + bth_pad(pkt) + RXE_ICRC_SIZE
이는 pkt->paylen을 충분히 제한하지 못합니다. 이후 rxe_icrc_hdr()는 다음을 계산합니다.
rxe_opcode[pkt->opcode].length - RXE_BTH_BYTES
length == 0일 때 오버플로우(underflow)가 발생하여 rxe_crc32()에 거대한 값을 전달하며, 이로 인해 skb 페이로드에 대한 경계 밖 읽기가 발생합니다.
해당 수정이 적용된 v7.0-rc7에서 QEMU/KVM 환경(CONFIG_RDMA_RXE=y 및 CONFIG_KASAN=y 설정) 아래 다음 명령어 실행 후 재현되었습니다.
rdma link add rxe0 type rxe netdev eth0
BTH 오퍼코드=0xff 및 QPN=IB_MULTICAST_QPN을 가진 포트 4791로 향하는 단일 48바이트 UDP 패킷이 다음을 유발합니다.
BUG: KASAN: slab-out-of-bounds in crc32_le+0x115/0x170 Read of size 1 at addr ... The buggy address is located 0 bytes to the right of allocated 704-byte region Call Trace: crc32_le+0x115/0x170 rxe_icrc_hdr.isra.0+0x226/0x300 rxe_icrc_check+0x13f/0x3a0 rxe_rcv+0x6e1/0x16e0 rxe_udp_encap_recv+0x20a/0x320 udp_queue_rcv_one_skb+0x7ed/0x12c0
동일한 구조를 가진 후속 패킷은 매핑되지 않은 메모리에서 오류를 발생시키고 커널을 패닉 상태로 만듭니다. 이 트리거는 모듈 로딩과 "rdma link add" 명령어 실행만으로 가능하며, QP(Queue Pair), 연결, 인증은 필요하지 않습니다.
어떤 길이 연산이 수행되기 전에 rxe_opcode[] 엔트리가 없는 오퍼코드를 가진 패킷을 0 마스크 또는 0 길이를 통해 감지하여 거부함으로써 이 문제를 해결합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.