🇰🇷 한글 설명
Linux 커널의 xprtrdma 구성 요소에서 잘못된 형식의 응답을 처리할 때 수신 버퍼를 적절히 재등록하지 않는 취약점입니다. 공격자가 짧거나 잘못된 버전의 응답을 지속적으로 보내면 클라이언트의 수신 큐가 고갈되어 통신이 중단될 수 있습니다.
💡 쉬운 설명
네트워크 통신 중에 가짜 또는 잘못된 응답을 계속 보내서 컴퓨터의 수신 대기 공간을 모두 써버리게 만드는 공격입니다. 이 공격을 받으면 통신 통로가 막혀서 연결이 끊어지게 됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
xprtrdma: Repost Receive buffers for malformed replies
rpcrdma_wc_receive() decrements the transport's Receive count for
every completion before it dispatches a successful Receive to
rpcrdma_reply_handler(). The handler must post a replacement
Receive WR before returning unless ownership of the rep has moved
elsewhere, as on the backchannel path.
Commit 2ae50ad68cd7 ("xprtrdma: Close window between waking RPC
senders and posting Receives") moved the Receive refill out of
rpcrdma_wc_receive(), where it had run ahead of every reply, into
rpcrdma_reply_handler() so that the responder's credit grant could
be parsed before reposting. The bad-version and short-reply exits
never reach that refill: they recycle the rep and return without
calling rpcrdma_post_recvs().
A remote peer can therefore drain the client's posted Receive
queue by sending a sustained stream of replies that are shorter
than the fixed transport header or that carry an unrecognized
RPC/RDMA version. Each such reply consumes one posted Receive
without replacing it. Once the queue empties, the peer's next
Send finds no posted Receive and the transport stalls until
reconnect.
Route both malformed-reply exits through the shared repost tail
after recycling the rep, refilling against buf->rb_credits, the
most recent accepted credit grant. Neither exit updates the
congestion window, so RPCs admitted under the previous grant
remain in flight awaiting replies. A smaller refill target would
let a stream of malformed replies ratchet the posted Receive count
down to the batch floor while the congestion window still admits
rb_credits RPCs; a burst of valid replies to those RPCs could then
overrun the posted Receives, and because the client connects with
rnr_retry_count of zero, a single RNR NAK terminates the
connection. Refilling against rb_credits also restores the target
that applied to malformed replies before commit 2ae50ad68cd7
("xprtrdma: Close window between waking RPC senders and posting
Receives") when rpcrdma_post_recvs() computed it from rb_credits
internally. rb_credits is at least one from connection
establishment onward, so the repost path always keeps Receives
posted.
📍 영향받는 시스템
Linux kernel (xprtrdma module 사용 환경)
⚔️ 공격 벡터
원격의 공격자가 규격에 맞지 않는 짧은 응답이나 잘못된 버전의 RPC/RDMA 응답을 지속적으로 전송
🛡️ 대응 방법
커널 패치(Commit 2ae50ad68cd7 관련 수정 사항 포함)를 적용하여 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 취약점이 해결된 패치 버전 이상인지 확인합니다.