🇰🇷 한글 설명
Linux 커널의 ntfs3 파일 시스템 드라이버에서 $Extend/$Reparse 및 $Extend/$ObjId 메타파일의 INDEX_ROOT 속성을 처리할 때 경계 외 읽기(Out-of-bounds read) 취약점이 발견되었습니다. 특정 조건에서 resident_data() 함수가 속성 크기를 충분히 검사하지 않아 할당된 버퍼 범위를 벗어난 메모리를 읽을 수 있습니다.
💡 쉬운 설명
조작된 NTFS 파일 시스템 이미지를 마운트할 때, 컴퓨터 메모리의 허용된 범위를 넘어선 데이터를 읽어오는 보안 결함입니다. 이로 인해 시스템 정보가 유출되거나 프로그램이 예기치 않게 종료될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
fs/ntfs3: fix out-of-bounds read of INDEX_ROOT in reparse/objid init
ntfs_reparse_init() and ntfs_objid_init() parse the index root of the
$Extend/$Reparse and $Extend/$ObjId metafiles (the INDEX_ROOT attributes
named $R and $O). They read its type and rule fields through
resident_data(), which does not check that the resident attribute is
large enough to hold them.
mi_enum_attr() accepts a resident attribute with data_off == asize and
data_size == 0. For such an attribute placed last in its MFT record,
resident_data() returns a pointer to the end of the record_size buffer,
so reading root->type / root->rule reads past the allocation.
Use resident_data_ex(attr, sizeof(struct INDEX_ROOT)) and bail out when
it returns NULL, as ntfs_security_init() already does for $SDH / $SII.
The attribute is only parsed while mounting a crafted image, so this
needs CAP_SYS_ADMIN.
BUG: KASAN: slab-out-of-bounds in ntfs_reparse_init (fs/ntfs3/fsntfs.c:2306)
Read of size 4 at addr ffff88801219dc00 by task mount
ntfs_reparse_init (fs/ntfs3/fsntfs.c:2306)
ntfs_fill_super (fs/ntfs3/super.c:1604)
get_tree_bdev_flags (fs/super.c:1703)
vfs_get_tree (fs/super.c:1758)
path_mount (fs/namespace.c:4131)
__x64_sys_mount (fs/namespace.c:4360)
📍 영향받는 시스템
Linux kernel (ntfs3 driver 사용 시)
⚔️ 공격 벡터
CAP_SYS_ADMIN 권한을 가진 사용자가 조작된 NTFS 이미지 파일을 마운트 시도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인