🇰🇷 한글 설명
Linux 커널의 NFSD에서 관리 상태 취소 중 클라이언트 사용 후 해제(Use-After-Free) 취약점이 발견되었습니다. nfsd4_revoke_states() 함수가 락을 해제하는 과정에서 레이스 컨디션이 발생하여, 클라이언트 객체가 이미 해제된 후에도 참조될 수 있는 문제가 있습니다.
💡 쉬운 설명
네트워크 파일 공유 시스템에서 특정 작업이 처리되는 도중, 사용 중인 데이터가 갑자기 메모리에서 삭제되어 시스템 오류나 보안 문제가 발생할 수 있는 결함입니다. 공격자가 이를 악용하면 시스템 권한을 탈취하거나 강제로 종료시킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
NFSD: Prevent client use-after-free during admin state revocation
A stateid holds only a bare pointer to its nfs4_client; a stateid
reference does not pin it. The client survives only because
__destroy_client() drains its stateids before free_client() runs.
nfsd4_revoke_states() drops nn->client_lock across revoke_one_stid(),
which dereferences the client to revoke a stateid and read
clp->cl_minorversion. A teardown racing the dropped lock can free
the client first.
Pinning cl_rpc_users under client_lock blocks the DESTROY_CLIENTID and
EXCHANGE_ID teardown, which refuses while cl_rpc_users is non-zero.
force_expire_client() ignores it: once its wait for cl_rpc_users to
reach zero has passed, a later pin goes unnoticed.
Under client_lock, skip a client whose cl_time is already zero --
force_expire_client() clears it there before waiting -- otherwise pin
cl_rpc_users before dropping the lock. The walk then either sees the
expiry and skips, or pins in time for that wait to cover the revoke.
📍 영향받는 시스템
Linux Kernel (NFSD 관련 모듈이 포함된 버전)
⚔️ 공격 벡터
NFSv4 클라이언트 상태 취소와 클라이언트 해제 프로세스 간의 레이스 컨디션을 유도하여 메모리 오염 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 제조사의 보안 공지와 대조하십시오.