🇰🇷 한글 설명
Linux 커널의 NFS 구현에서 서버가 클라이언트에 위임(delegation)을 부여할 때, 특정 오류 상황에서 클라이언트가 이를 기록하지 못하고 DELEGRETURN을 전송하지 않는 취약점이 발견되었습니다. 이로 인해 서버는 클라이언트가 위임을 계속 보유한 것으로 오해하게 되며, 결과적으로 클라이언트의 상태 관리자가 무한 루프에 빠져 서비스 장애를 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터 간에 파일을 공유할 때 권한을 주고받는 과정에서 기록이 누락되어 서로 상태가 맞지 않는 문제가 발생합니다. 이로 인해 시스템이 잘못된 정보를 계속 확인하려 시도하면서 컴퓨터 성능이 떨어지거나 서비스가 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
NFS: Return a delegation the client fails to record
When an NFS server grants a delegation in an OPEN reply,
nfs_inode_set_delegation() records it on the client. However, three
of its error flows return without sending DELEGRETURN.
A delegation can be relinquished only by DELEGRETURN (RFC 8881
Section 20.2.4), so dropping one silently leaves the server believing
the client still holds it. If the server happens to recall that
delegation, the client answers CB_RECALL with NFS4ERR_BADHANDLE
because it has no record of the stateid. The server revokes the
delegation and moves it onto its cl_revoked list, because the client
never sends the FREE_STATEID that would drain it. Every subsequent
SEQUENCE reply then carries SEQ4_STATUS_RECALLABLE_STATE_REVOKED,
and the client's state manager loops issuing TEST_STATEID across its
delegations without ever clearing the condition.
The window is easy to reach now that a server offers a write
delegation on any write OPEN: a delegation recalled for one opener
races a re-open that the server answers with a fresh write
delegation.
Instead of dropping it, hand the delegation back during these error
flows.
📍 영향받는 시스템
Linux kernel (NFS client components)
⚔️ 공격 벡터
특정 조건에서 NFS OPEN 요청을 통해 위임 상태 불일치를 유도하여 클라이언트의 상태 관리자 무한 루프 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 nfs_inode_set_delegation() 오류 흐름 수정 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인