🇰🇷 한글 설명
Linux 커널의 NFSD 구성 요소에서 nfsd_ssc_lock을 해제한 후 ssc_expire_umount 탐색을 재시작하지 않아 발생하는 취약점입니다. 잠금 해제 기간 동안 다른 스레드가 리스트 항목을 삭제하고 메모리를 해제하면, 다음 반복 과정에서 해제된 메모리 주소를 참조하게 되어 시스템 오류가 발생할 수 있습니다.
💡 쉬운 설명
파일 공유 시스템(NFS)이 만료된 연결을 정리하는 과정에서, 정리 중인 목록이 갑자기 바뀌어 컴퓨터가 잘못된 메모리 주소를 읽게 되는 문제입니다. 이로 인해 시스템이 멈추거나 보안 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
NFSD: restart ssc_expire_umount walk after dropping nfsd_ssc_lock
nfsd4_ssc_expire_umount() walks nn->nfsd_ssc_mount_list with
list_for_each_entry_safe(ni, tmp, ...). For each expired entry it
sets nsui_busy = true, drops nfsd_ssc_lock to run mntput() on the
source vfsmount, then reacquires the lock to list_del + kfree the
entry and continue iterating via the macro's saved tmp pointer.
The nsui_busy flag protects the current ni from concurrent
nfsd4_ssc_setup_dul() finders during the lock-drop window, but it
does not pin tmp. Another nfsd RPC thread that fails its source-
server mount and reaches nfsd4_ssc_cancel_dul() will, during that
same window, take nfsd_ssc_lock, list_del + kfree its own ssc_umount
item, and release the lock. If that item is the saved tmp of the
expire walk, the next iteration dereferences a freed
nfsd4_ssc_umount_item.
Restart the walk from the head after the mntput() unlock window so
no saved next pointer survives the lock-drop. The list is bounded
by the number of active inter-server source mounts (typically small)
and the expire delayed-work runs periodically rather than per-IO,
so the restart is cheap.
📍 영향받는 시스템
Linux Kernel (NFSD 관련 모듈이 포함된 버전)
⚔️ 공격 벡터
특정 조건의 NFS RPC 요청을 반복적으로 보내 메모리 해제 시점과 리스트 탐색 시점을 일치시키는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.