🇰🇷 한글 설명
Linux 커널의 nfsd 구성 요소에서 nfsd4_setattr 함수가 특정 시간 위임 속성을 처리할 때 NULL 포인터를 역참조하여 커널 오류(Kernel Oops)를 유발하는 취약점입니다. 공격자가 특수한 NFSv4 상태 ID를 포함한 SETATTR 요청을 보내면 인증 없이도 시스템을 중단시킬 수 있습니다.
💡 쉬운 설명
해커가 특수한 명령어를 보내면 컴퓨터의 핵심 시스템인 커널이 잘못된 정보를 읽으려다 멈춰버리는 문제입니다. 별도의 로그인 없이도 원격에서 시스템을 다운시킬 수 있어 위험합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nfsd: fix null dereference in nfsd4_setattr for deleg timestamp attrs
When a SETATTR request includes FATTR4_WORD2_TIME_DELEG_ACCESS or
FATTR4_WORD2_TIME_DELEG_MODIFY in the attribute bitmap, nfsd4_setattr()
sets deleg_attrs=true and calls nfs4_preprocess_stateid_op() to validate
the stateid.
If the client supplies the NFSv4 "one stateid" (all-0xFF bytes),
check_special_stateids() returns nfs_ok without populating the output
nfs4_stid pointer, because the special-stateid path in
nfs4_preprocess_stateid_op() jumps to done: with s==NULL, and the
"if (s)" block that would set *cstid is skipped. The local variable `st`
remains NULL.
Back in nfsd4_setattr(), the if (deleg_attrs) block then unconditionally
dereferences st->sc_type (at offset 4 from NULL), causing a kernel oops.
This is remotely triggerable by any NFSv4 client: send COMPOUND [PUTROOTFH,
SETATTR(ONE_STATEID, {bmval2=FATTR4_WORD2_TIME_DELEG_ACCESS, ...})].
No authentication, delegation, or prior state is required.
Fix by adding a NULL check before the dereference. A special stateid is
not a delegation stateid, so the existing nfserr_bad_stateid return value
is already correct; we only need to guard the pointer dereference itself.
📍 영향받는 시스템
NFSv4를 사용하는 Linux 커널 시스템
⚔️ 공격 벡터
인증되지 않은 원격 NFSv4 클라이언트가 특수한 COMPOUND 요청을 전송
🛡️ 대응 방법
커널 패치를 적용하여 nfsd4_setattr 함수 내 NULL 포인터 체크 로직을 추가
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 패치 버전인지 확인