🇰🇷 한글 설명
Linux 커널의 nfsd 구성 요소에서 v4_end_grace를 작성할 때 서버 종료 프로세스와 경합이 발생하여 메모리 해제 후 접근하는 Use-After-Free 취약점이 존재합니다. 이 문제는 nfsd_mutex를 유지할 수 없는 데드락 위험 때문에 발생하며, 새로운 플래그와 락을 도입하여 이를 해결했습니다.
💡 쉬운 설명
리눅스 서버가 종료되는 과정에서 특정 데이터가 이미 삭제되었음에도 불구하고 시스템이 해당 데이터에 접근하려고 시도하여 오류가 발생할 수 있는 문제입니다. 이로 인해 시스템이 불안정해지거나 보안 위협이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nfsd: provide locking for v4_end_grace
Writing to v4_end_grace can race with server shutdown and result in
memory being accessed after it was freed - reclaim_str_hashtbl in
particularly.
We cannot hold nfsd_mutex across the nfsd4_end_grace() call as that is
held while client_tracking_op->init() is called and that can wait for
an upcall to nfsdcltrack which can write to v4_end_grace, resulting in a
deadlock.
nfsd4_end_grace() is also called by the landromat work queue and this
doesn't require locking as server shutdown will stop the work and wait
for it before freeing anything that nfsd4_end_grace() might access.
However, we must be sure that writing to v4_end_grace doesn't restart
the work item after shutdown has already waited for it. For this we
add a new flag protected with nn->client_lock. It is set only while it
is safe to make client tracking calls, and v4_end_grace only schedules
work while the flag is set with the spinlock held.
So this patch adds a nfsd_net field "client_tracking_active" which is
set as described. Another field "grace_end_forced", is set when
v4_end_grace is written. After this is set, and providing
client_tracking_active is set, the laundromat is scheduled.
This "grace_end_forced" field bypasses other checks for whether the
grace period has finished.
This resolves a race which can result in use-after-free.
📍 영향받는 시스템
Linux kernel (nfsd module 사용 환경)
⚔️ 공격 벡터
서버 종료 시점과 NFSv4 grace period 종료 시점 사이의 타이밍을 이용한 경합 조건 유도
🛡️ 대응 방법
nfsd 관련 패치가 적용된 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux