🇰🇷 한글 설명
Linux 커널의 NFSv4/pNFS 구성 요소에서 GETDEVICEINFO 요청 처리 중 발생하는 NULL 포인터 역참조 취약점입니다. 공격자가 조작된 멀티패스-DS 바디를 전송하여 r_addr의 길이가 0인 경우, 커널이 NULL 포인터를 참조하게 되어 시스템 패닉(Panic)을 유발할 수 있습니다.
💡 쉬운 설명
해커가 조작된 데이터를 보내면 컴퓨터의 핵심 운영체제(커널)가 잘못된 정보를 읽으려다 갑자기 멈추거나 꺼질 수 있는 문제입니다. 이는 주로 네트워크를 통해 연결된 저장 장치 서버가 공격받았을 때 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
NFSv4/pNFS: reject zero-length r_addr in nfs4_decode_mp_ds_addr
nfs4_decode_mp_ds_addr() decodes the r_netid and r_addr opaques of a
netaddr4 from a GETDEVICEINFO multipath-DS body, then immediately
calls strrchr(buf, '.') to locate the port separator. Both decodes
use xdr_stream_decode_string_dup(), and the current code checks only
"nlen < 0" / "rlen < 0" before dereferencing the returned string.
When the on-wire opaque has length zero, xdr_stream_decode_opaque_inline()
returns 0 and xdr_stream_decode_string_dup() falls through to its
"*str = NULL; return ret" tail, leaving buf NULL with a return value
of 0. The "< 0" check does not catch this, and the next line is
strrchr(NULL, '.'), a kernel NULL pointer dereference reachable from
any pNFS-flexfile client mounted against a malicious or compromised
metadata server.
Reject the zero-length cases explicitly so the decoder fails with
-EBADMSG (treated as a malformed GETDEVICEINFO body) instead of
panicking the client.
📍 영향받는 시스템
NFSv4/pNFS를 사용하는 Linux 커널 시스템 (pNFS-flexfile 클라이언트 포함)
⚔️ 공격 벡터
악의적으로 조작된 GETDEVICEINFO 메시지를 전송하는 공격 대상 메타데이터 서버를 통한 네트워크 공격
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 nfs4_decode_mp_ds_addr 함수 내의 길이 검증 로직을 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 보안 공지(Security Advisory)와 대조합니다.