🇰🇷 한글 설명
Linux 커널의 RDMA/siw 드라이버에서 Read Response 처리 시 누적된 데이터 길이가 할당된 버퍼 크기를 초과하는지 검증하지 않는 취약점입니다. 공격자가 요청된 길이보다 더 큰 페이로드를 가진 응답 세그먼트를 전송할 경우, 메모리 경계를 벗어난 쓰기(Out-of-bounds write)가 발생할 수 있습니다.
💡 쉬운 설명
데이터를 받는 과정에서 그릇의 크기를 확인하지 않아, 너무 많은 양의 데이터를 한꺼번에 부으면 그릇 밖으로 데이터가 넘쳐흐르는 문제입니다. 이로 인해 시스템의 중요한 메모리 영역이 손상될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/siw: bound Read Response placement to the RREAD length
In drivers/infiniband/sw/siw/siw_qp_rx.c, siw_proc_rresp() places each
inbound Read Response DDP segment at sge->laddr + wqe->processed and then
accumulates wqe->processed, but it never checks the running total against
the sink buffer length on continuation segments. siw_check_sge() resolves
and validates the sink memory only on the first fragment (the if (!*mem)
branch), and siw_rresp_check_ntoh() compares the cumulative length against
wqe->bytes only on the final segment (the !frx->more_ddp_segs guard).
A connected siw peer that answers an outstanding RREAD with Read Response
segments that keep the DDP Last flag clear, carrying more total payload
than the RREAD requested, drives wqe->processed past the validated sink
buffer; the next siw_rx_data() call writes out of bounds at
sge->laddr + wqe->processed. siw runs iWARP over ordinary routable TCP,
so the peer is the remote end of an established RDMA connection and needs
no local privilege.
Bound every segment before placement, exactly as siw_proc_send() and
siw_proc_write() already do for their tagged and untagged paths, and
terminate the connection with a base-or-bounds DDP error when the
Read Response would overrun the sink buffer.
This is the second receive-path length fix for this file. A separate
change rejects an MPA FPDU length that underflows the per-fragment
remainder in the header decode; that guard does not cover this case,
because here each individual segment length is self-consistent and only
the accumulated placement offset overruns the buffer.
📍 영향받는 시스템
Linux kernel (RDMA/siw driver 사용 시스템)
⚔️ 공격 벡터
연결된 원격 RDMA 피어(Peer)가 요청된 크기보다 큰 Read Response 세그먼트를 전송하여 메모리 오버런 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 siw_proc_rresp() 함수의 경계 검증 로직을 적용해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.