🇰🇷 한글 설명
Linux 커널의 NTFS 드라이버에서 ntfs_read_inode_mount() 함수가 $MFT 속성 목록을 처리할 때 경계 검사를 불충분하게 수행하여 발생하는 취약점입니다. 공격자가 조작된 NTFS 파일 시스템을 마운트할 경우, 할당된 버퍼 범위를 벗어난 메모리를 읽는 Out-of-bounds read가 발생할 수 있습니다.
💡 쉬운 설명
나쁜 의도로 만들어진 특수한 USB나 하드디스크를 컴퓨터에 연결(마운트)하는 것만으로도 컴퓨터의 메모리 정보를 몰래 읽어낼 수 있는 결함입니다. 데이터의 길이를 확인하는 과정에서 실수로 범위를 벗어난 부분을 읽게 되는 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ntfs: bound the attribute-list entry in ntfs_read_inode_mount()
The $MFT attribute-list walk in ntfs_read_inode_mount() validates each
entry only with "(u8 *)al_entry + 6 > al_end" and
"(u8 *)al_entry + le16_to_cpu(al_entry->length) > al_end", but then reads
al_entry->lowest_vcn (an __le64 at offset 8) and al_entry->mft_reference
(offset 16) -- fields beyond the 6 bytes proven in range. al_entry->length
is attacker-controlled and only required non-zero, so a short entry (e.g.
length 8) placed at the tail passes both checks while the lowest_vcn /
mft_reference reads fall past al_end.
al_end is ni->attr_list + attr_list_size (the on-disk size); the buffer is
kvzalloc(round_up(attr_list_size, SECTOR_SIZE)), so the sector rounding
usually absorbs the over-read -- but when attr_list_size is a multiple of
SECTOR_SIZE there is no slack and a crafted $MFT attribute list produces an
out-of-bounds read at mount time.
Validate the entry with ntfs_attr_list_entry_is_valid() (added in patch
1/3) before dereferencing it, matching the bound the other attribute-list
walks now use. The validator already requires the length to cover the fixed
header, which makes the separate "!al_entry->length" check redundant, so
drop it too.
📍 영향받는 시스템
Linux kernel (NTFS driver 사용 시스템)
⚔️ 공격 벡터
조작된 $MFT 속성 목록이 포함된 NTFS 파일 시스템을 마운트하여 발생
🛡️ 대응 방법
ntfs_attr_list_entry_is_valid() 검증 로직이 포함된 최신 Linux 커널로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 패치된 버전인지 확인합니다.