🇰🇷 한글 설명
Linux 커널의 IB/isert 드라이버에서 로그인 PDU의 길이를 계산할 때 하한선 검증이 누락되어 발생하는 취약점입니다. 공격자가 헤더 길이보다 짧은 데이터를 전송하면 정수 언더플로우가 발생하여 메모리 범위를 벗어난 복사가 수행되고 시스템이 충돌합니다.
💡 쉬운 설명
해커가 특수하게 조작된 아주 짧은 데이터를 보내면 컴퓨터의 메모리 계산 오류를 일으켜 시스템을 강제로 종료시킬 수 있습니다. 이 과정에서 별도의 로그인 정보 없이도 공격이 가능하여 위험합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN
In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done()
computes the login request payload length as wc->byte_len minus
ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int.
A remote iSER initiator can post a login Send work request carrying
fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows
and login_req_len becomes negative.
isert_rx_login_req() then reads that negative length back into a signed
int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the
min() is signed it keeps the negative value; the value is then passed as
the memcpy() length and sign-extended to a multi-gigabyte size_t. The
copy into the 8192-byte login->req_buf runs far out of bounds and
faults, crashing the target node. The login phase precedes iSCSI
authentication, so no credentials are required to reach this path.
Reject any login PDU shorter than ISER_HEADERS_LEN before the
subtraction, mirroring the existing early return on a failed work
completion, so login_req_len can never go negative. The upper bound was
already safe: a posted login buffer cannot deliver more than
ISER_RX_PAYLOAD_SIZE, so the difference stays at or below
MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing
lower bound needs to be added.
📍 영향받는 시스템
Linux kernel (IB/isert driver 포함 버전)
⚔️ 공격 벡터
네트워크를 통한 원격 iSER 이니시에이터의 조작된 로그인 PDU 전송
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 로그인 PDU 길이 검증 로직을 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 보안 공지(Advisory)와 대조합니다.