CVE-2026-98995 in Linux
요약
\~에 의해 VulDB • 2026. 10. 23.
리눅스 커널에서 다음 취약점이 해결되었습니다:
namespace: mnt_change_mountpoint()에서 이전 부모의 ->overmount 초기화하기
__umount_mnt()는 마운트가 자신을 오버마운트하는 것을 언마운트할 때, 해당 부모의 ->overmount를 초기화합니다. 그러나 mnt_change_mountpoint()는 그렇지 않습니다. 이 함수는 마운트를 새로운 부모로 이동시키지만, 이전 부모가 여전히 그 마운트를 가리키도록 방치합니다.
attach_recursive_mnt()에서 하위로 이동되는 마운트의 경우 이는 문제가 되지 않습니다. 기존 최상위 마운트가 새 위치에 이동될 때쯤이면, 새 마운트는 이미 이전 부모의 ->overmount를 초기화했기 때문입니다.
그러나 reparent()에서는 상황이 다릅니다. propagate_umount()는 언마운트되지 않을 첫 번째 조상으로 살아남은 오버마운트를 이동시킵니다. 그 마운트가 제거된 직후, 해당 원본 마운트는 즉시 언마운트됩니다. 만약 파일 디스크립터가 이 언마운트된 마운드를 생존시켜 둔다면, ->overmount는 이미 이동된 마운트를 가리키게 됩니다. 이는 더 이상 유효하지 않은 포인터(dangling pointer)이며, 이동된 마운트가 언마운트되고 해제(freed)됨에 따라 Use-After-Free(UAF) 취약점이 발생합니다.
do_lock_mount()는 mount_lock 하에서 대상 경로로부터 ->overmount를 따라갑니다. 최상위 오버마운트(topmost_overmount()) 아래쪽에 있는 마운트를 대상으로 할 때, 해당 파일 디스크립터가 존재하면 해제된 마운드로 진입하게 되며 do_lock_mount()는 그곳에 있는 무언가에 대한 참조(reference)를 획득합니다.
따라서 __umount_mnt()와 동일한 방식으로 mnt_change_mountpoint()에서 이전 부모의 ->overmount를 초기화해야 합니다. 이렇게 하면 마운트의 ->overmount가 항상 자신에게 연결된(mounted/attached) 마운트를 가리키게 됩니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.