CVE-2026-64102 in Linux
요약
\~에 의해 VulDB • 2026. 07. 22.
리눅스 커널에서 다음 취약점이 해결되었습니다:
RDMA/siw: 서명된 수신 연산 전에 MPA FPDU 길이 오버플로우(underflow) 거부
악의적인 연결된 siw 피어는 공표된 오퍼코드에 대해 고정된 DDP/RDMAP 헤더보다 작은 MPA 길이 필드(c_hdr->mpa_len, 16비트 빅엔디안, 피어가 제어 가능)를 가진 iWARP FPDU를 보낼 수 있습니다. Soft-iWARP는 iwarp_pktinfo[opcode].hdr_len을 기반으로 siw_get_hdr()에서 전체 헤더를 구문 분석하지만 mpa_len이 해당 헤더 길이와 비교되지는 않습니다.
그 후 siw_tcp_rx_data()에서는 다음을 유도합니다:
srx->fpdu_part_rem = be16_to_cpu(mpa_len) - fpdu_part_rcvd + MPA_HDR_SIZE;
여기서 fpdu_part_rcvd는 이 시점에서 iwarp_pktinfo[opcode].hdr_len과 같습니다. 태그된 WRITE( hdr_len 16, MPA_HDR_SIZE 2 )의 경우 가장 작은 온-와이어 mpa_len인 0은 fpdu_part_rem = -14를 생성하며, hdr_len - MPA_HDR_SIZE보다 작은 모든 mpa_len는 음수 정수로 오버플로우됩니다.
이 서명된 값은 다음과 같이 siw_proc_write()/siw_proc_rresp()로 흐릅니다:
bytes = min(srx->fpdu_part_rem, srx->skb_new);
int len으로 siw_check_mem()에 전달되며(유효한 기준 주소에서 len이 음수일 때 addr + len > mem->va + mem->len 간격 검사가 충족됨), 서명된 복사 길이로 skb_copy_bits()를 통해 siw_rx_data() -> siw_rx_kva()/siw_rx_umem()에 도달합니다. skb_copy_bits()의 헤더 복사 분기는 이를 size_t로 승격시켜 멀티 기가바이트 읽기를 생성합니다.
실제 커널 TCP 수신 경로를 구동하는 KUnit 하네스 아래에서 KASAN을 사용하면 -- 루프백 AF_INET 소켓 페어, kernel_sendmsg를 통해 잘못된 FPDU 작성, softirq에서 sk_data_ready 발화, tcp_read_sock가 siw_tcp_rx_data로 디스패치 -- 다음과 같은 보고가 나옵니다:
BUG: KASAN: use-after-free in skb_copy_bits+0x284/0x480 Read of size 4294967295 at addr ffff888... Call Trace: skb_copy_bits siw_rx_kva siw_rx_data siw_check_mem siw_proc_write siw_tcp_rx_data __tcp_read_sock siw_qp_llp_data_ready tcp_data_ready tcp_data_queue
피어 헤더가 완전히 조립되는 가장 초기 지점에서 누락된 불변식을 추가합니다. iwarp_pktinfo[*].hdr_len - MPA_HDR_SIZE는 정확히 각 오퍼코드에 대해 siw 송신기가 최소 mpa_len으로 사용하는 값입니다(drivers/infiniband/sw/siw/siw_qp.c:33). 따라서 이는 프로토콜 계약과 일치합니다. 범위를 벗어난 FPDU는 TERM_ERROR_LAYER_LLP / LLP_ETYPE_MPA / LLP_ECODE_FPDU_START로 연결을 종료합니다 -- 이는 RFC 5044 섹션 8 오류 코드 3("FPDU 시작 시 Marker 및 ULPDU Length 필드가 동의하지 않음")이며, 이 불일치에 대한 올바른 프레임링 오류 클래스입니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.