CVE-2023-53311 in Linux
요약
\~에 의해 VulDB • 2026. 05. 26.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nilfs2: iput를 통한 인노드 더티 처리 시 nilfs_root의 use-after-free 수정
nilfs2의 언마운트 과정에서 nilfs2가 nilfs_detach_log_writer()에서 라이터를 분리한 후에는 nilfs_root 구조체를 참조하는 주체가 없습니다. 기존에는 nilfs_evict_inode()가 "garbage_list"에 남아 있는 인노드가 nilfs_detach_log_writer() 종료 시 nilfs_dispose_list에 의해 해제되면 nilfs_root에 대한 use-after-free 읽기를 유발할 수 있었습니다. 이 버그는 커밋 9b5a04ac3ad9("nilfs2: nilfs_evict_inode()에서 nilfs_root의 use-after-free 버그 수정")로 수정되었습니다.
그러나 iput()에서 mark_inode_dirty_sync()가 호출되는 호출 경로에서 UAF(Use-After-Free)가 발생할 가능성이 또 다른 것으로 드러났습니다:
nilfs_detach_log_writer() nilfs_dispose_list() iput() mark_inode_dirty_sync() __mark_inode_dirty() nilfs_dirty_inode() __nilfs_mark_inode_dirty() nilfs_load_inode_block() --> nilfs_root 구조체의 UAF 유발
i_state에 I_DIRTY_TIME 플래그가 설정되고 i_nlink이 0이 아닌 경우 iput()가 최종 참조 시 mark_inode_dirty_sync()를 호출하도록 변경한 커밋 0ae45f63d4ef("vfs: lazytime 마운트 옵션 지원 추가") 이후에 이러한 상황이 발생할 수 있습니다.
이 문제는 syzbot 재현기를 사용할 때 커밋 28a65b49eb53("nilfs2: 읽기 전용으로 전환된 후 더티 데이터 쓰기 금지") 이후에 나타나지만, 해당 문제는 이전에 잠재적으로 존재했을 가능성이 있습니다.
nilfs 구조체에 "purging flag"를 추가하고, "garbage_list"를 처리하는 동안 해당 플래그를 설정하며, __nilfs_mark_inode_dirty()에서 이를 확인함으로써 이 문제를 해결합니다.
커밋 9b5a04ac3ad9("nilfs2: nilfs_evict_inode()에서 nilfs_root의 use-after-free 버그 수정")와 달리, 이 패치는 마운트 시 복구 기능을 손상시키지 않도록 ns_writer를 사용하여 작업을 건너뛸지 여부를 결정하는 데 의존하지 않습니다. nilfs_salvage_orphan_logs 루틴은 로그 라이터를 연결하기 전에 회수된 데이터의 버퍼를 더티 상태로 만드므로, ns_writer가 NULL일 때 __nilfs_mark_inode_dirty()가 작업을 건너뛰도록 변경하면 복구 쓰기가 실패할 수 있습니다. 정리 전용 플래그를 사용하는 목적은 이러한 조건을 좁히기 위함입니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.