🇰🇷 한글 설명
Linux 커널의 nfsd 구성 요소에서 seqid_op 재시도 시 stateowner가 아닌 stateid를 해제해야 하는 오류가 발견되었습니다. 이로 인해 참조 횟수(refcount) 언더플로우가 발생하여 Use-After-Free 취약점이 유발되거나, 반대로 stid 참조가 누수되어 시스템 자원이 고갈될 수 있습니다.
💡 쉬운 설명
리눅스 서버의 파일 공유 기능(NFS)에서 메모리를 관리하는 규칙이 잘못 적용되어 시스템이 불안정해질 수 있습니다. 이 오류를 이용하면 해커가 시스템의 메모리를 조작하거나 서버를 멈추게 할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nfsd: drop the stateid, not the stateowner, on seqid_op replay retry
In nfs4_preprocess_seqid_op() the stateid is obtained from
nfsd4_lookup_stateid(), which holds a reference on the nfs4_stid
(sc_count) but takes no reference on the stateowner. openlockstateid()
merely casts that stid and likewise takes no reference.
When nfsd4_cstate_assign_replay() returns -EAGAIN (the replay owner is
being torn down, RP_UNHASHED) it has not taken a stateowner reference on
that path. The error handling nevertheless called
nfs4_put_stateowner(stp->st_stateowner), dropping an so_count reference
the function never acquired -- risking a stateowner refcount underflow and
use-after-free -- while leaking the sc_count reference held on the stid.
The leaked stid reference can also stall a concurrent
nfsd4_close_open_stateid() waiting for sc_count to drop.
Drop the reference actually held -- the stid -- before retrying. The
stateowner stays alive through the reference held by the stid. This mirrors
the open path in nfsd4_process_open1(), where the put balances a reference
that path explicitly holds on the stateowner.
📍 영향받는 시스템
Linux Kernel (nfsd 모듈을 사용하는 버전)
⚔️ 공격 벡터
조작된 NFSv4 요청을 통해 특정 상태 ID 재시도 경로를 유도하여 메모리 참조 오류 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인