CVE-2026-74483 in Linux
요약
\~에 의해 VulDB • 2026. 08. 15.
리눅스 커널에서 다음 취약점이 해결되었습니다:
binfmt_misc: 마운트 실패 시 사용자 네임스페이스 누수 방지
bm_get_tree()는 사용자 네임스페이스에 대한 참조를 가져와 이를 sget 키로 get_tree_keyed()에 전달합니다. sget_fc()는 해당 참조를 sb->s_fs_info로 이동시키고 fc->s_fs_info를 지우므로, 이 시점부터 슈퍼블록이 이를 소유하게 되고 bm_free()에서는 더 이상 이를 볼 수 없게 됩니다.
슈퍼블록은 ->put_super()에서 이를 해제합니다. 그러나 generic_shutdown_super()는 if (sb->s_root) 분기 내부에서만 ->put_super()를 호출하므로, bm_fill_super()가 실패할 때 이를 해제하는 주체가 없습니다:
- kzalloc_obj()의 실패로 인해 s_root이 NULL 상태가 되고 전체 분기가 건너뛰어집니다. - 파일 루프에서 simple_fill_super()가 실패하면 s_root은 설정되지만, s_op는 여전히 ->put_super()가 없는 simple_super_operations를 가리킵니다. bm_fill_super()는 simple_fill_super()가 성공적으로 반환된 후에만 s_ops를 설치하며, 이를 더 일찍 설치해도 simple_fill_super()가 s_op를 덮어쓰기 때문에 도움이 되지 않습니다.
어떤 경우든 vfs_get_super()는 deactivate_locked_super()를 호출하고 참조는 완전히 사라집니다. binfmt_misc 마운트는 사용자 네임스페이스에서 사용 가능하며, inode 및 dentry 캐시는 모두 SLAB_ACCOUNT이므로, 메모리 cgroup에 제한된 권한 없는 호출자는 필요할 때마다 simple_fill_super()를 실패시켜 시도마다 하나의 사용자 네임스페이스를 누수시킬 수 있습니다.
대신 ->kill_sb()에서 참조를 해제합니다(이는 nfsd 및 rpc_pipefs가 키 기반 s_fs_info를 해제하는 방식과 동일하게 조건 없이 실행됨).
또한 이는 슈퍼블록이 여전히 @fs_supers에 있는 동안 ->put_super()가 s_fs_info를 지우는 것을 방지합니다. generic_shutdown_super()는 kill_sb()가 실행될 때까지 sget_fc()가 이를 계속 찾을 수 있도록 의도적으로 그대로 남겨둡니다. 그러나 NULL인 s_fs_info로 인해 test_keyed_super()에서 이를 놓치게 되므로, 동일한 사용자 네임스페이스에 대한 동시 마운트는 grab_super() 대기 단계를 건너뛰고 아직 정리 중인 네임스페이스에 대해 두 번째 슈퍼블록을 생성합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.