🇰🇷 한글 설명
Linux 커널의 nvmet-tcp 구성 요소에서 과도하게 긴 PDU를 수신할 때 경계 외 쓰기(Out-of-bounds write)가 발생하는 취약점입니다. 공격자가 조작된 PDU를 전송하면 고정된 128바이트 버퍼의 범위를 초과하여 커널 메모리를 오염시킬 수 있습니다.
💡 쉬운 설명
컴퓨터가 데이터를 받을 때 정해진 그릇보다 더 큰 데이터를 억지로 밀어 넣어 메모리를 망가뜨리는 문제입니다. 이를 통해 해커가 원격에서 시스템의 중요한 정보를 조작하거나 제어권을 뺏을 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nvmet-tcp: fix out-of-bounds write when receiving an over-long PDU
nvmet_tcp_try_recv_pdu() reads a PDU header into the fixed 128-byte
queue->pdu union, then computes the remaining payload length as
queue->left = hdr->hlen - queue->offset + hdgst;
and reads that many more bytes into &queue->pdu + queue->offset, without
ever bounding the result against sizeof(queue->pdu).
A struct nvme_tcp_icreq_pdu is itself 128 bytes, exactly the size of the
union. Once a header digest has been negotiated (hdgst = 4), a second
ICReq passes the hlen == nvmet_tcp_pdu_size() check but yields
queue->left = 128 - 8 + 4 = 124, so bytes 8..132 are written into the
128-byte buffer -- 4 bytes past its end, over queue->hdr_digest and
queue->data_digest. Those bytes are attacker-controlled (an ICReq
carries no digest), and the duplicate ICReq is only rejected later,
after the overflow. A remote unauthenticated host can thus corrupt
kernel memory adjacent to the receive buffer.
Reject any PDU whose declared length would read past the end of
queue->pdu before the second recv.
📍 영향받는 시스템
Linux kernel (nvmet-tcp 모듈 사용 환경)
⚔️ 공격 벡터
인증되지 않은 원격 공격자가 조작된 길이의 NVMe-over-TCP PDU를 전송하여 발생
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 PDU 길이 검증 로직을 적용해야 함
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 최신 패치 버전인지 배포판 보안 공지를 통해 확인하십시오.