CVE-2026-89782 in Linux
요약
\~에 의해 VulDB • 2026. 09. 16.
리눅스 커널에서 다음 취약점이 해결되었습니다:
fs/ntfs3: U16_MAX 엔트리 수를 초과하는 리스타트 테이블 확장을 거부함
$LogFile 재생 중 log_replay()는 로그 레코드 헤더에서 가져온 transact_id로 트랜잭션 테이블을 인덱싱합니다. check_log_rec()은 transact_id가 0이 아니며 적절히 정렬되어 있는지만 검증할 뿐, 그 크기는 확인하지 않으므로, 조작된 이미지(arbitrarily large index를 요청하는)는 임의로 큰 인덱스를 요청할 수 있습니다.
alloc_rsttbl_from_idx()는 extend_rsttbl()을 통해 해당 인덱스를 커버하기 위해 테이블을 확장하며, 이 함수는 새로운 엔트리 개수를 init_rsttbl()에 전달합니다:
rt = init_rsttbl(esize, used + add);
used + add는 u32로 계산되지만 init_rsttbl()은 u16를 인자로 받으며, 해당 카운트는 struct RESTART_TABLE에서 __le16으로 저장됩니다. used + add가 U16_MAX를 초과하면 절단(truncated)되고, init_rsttbl()은 필요한 인덱스보다 훨씬 작은 테이블을 할당합니다. 이후 alloc_rsttbl_from_idx()는 원래의(절단되지 않은) 오프셋에서 역참조 및 쓰기 작업을 수행하는데, 이는 할당한 영역을 벗어난 접근(out-of-bounds access)이며, 조작된 NTFS 이미지를 마운트함으로써 도달 가능합니다.
BUG: KASAN: use-after-free in alloc_rsttbl_from_idx (fs/ntfs3/fslog.c:950) Read of size 4 at addr ffff8880327ffff8 by task exploit alloc_rsttbl_from_idx (fs/ntfs3/fslog.c:950) log_replay (fs/ntfs3/fslog.c:4562) ntfs_loadlog_and_replay (fs/ntfs3/fsntfs.c:324) ntfs_fill_super (fs/ntfs3/super.c:1393) get_tree_bdev_flags vfs_get_tree path_mount __x64_sys_mount
리스타트 테이블은 그 __le16 카운트에 의해 U16_MAX 엔트리 수로 제한되므로, 더 큰 확장 요청은 유효하지 않은 입력입니다. extend_rsttbl()에서 이를 거부합니다. 모든 호출자는 이미 NULL 반환을 처리하고 있습니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.