🇰🇷 한글 설명
Linux 커널의 ntfs3 드라이버에서 ntfs_dir_emit() 및 hdr_find_e() 함수 내 경계 검사 오류로 인해 발생하는 Out-of-bounds read 취약점입니다. UTF-16LE 인코딩 크기와 헤더 크기를 고려하지 않은 잘못된 경계 검사로 인해 조작된 NTFS 이미지를 사용할 경우 메모리 경계를 넘어 읽기가 발생할 수 있습니다.
💡 쉬운 설명
NTFS 파일 시스템을 읽을 때 파일 이름의 길이를 잘못 계산하여, 허용된 메모리 범위를 벗어나 데이터를 읽어버리는 보안 결함입니다. 공격자가 특수하게 제작된 저장 장치를 연결하면 시스템의 민감한 정보를 훔쳐보거나 오류를 일으킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ntfs3: fix out-of-bounds read in ntfs_dir_emit() and hdr_find_e()
The bounds check in ntfs_dir_emit() compares fname->name_len (a
character count) against e->size (a byte count) without accounting
for the 2-byte-per-character UTF-16LE encoding or the ATTR_FILE_NAME
header size:
if (fname->name_len + sizeof(struct NTFS_DE) > le16_to_cpu(e->size))
This computes: name_len + 16 > e_size
The correct check must account for the ATTR_FILE_NAME header (66 bytes
before the name) and the UTF-16LE character size (2 bytes each):
sizeof(NTFS_DE) + offsetof(ATTR_FILE_NAME, name) +
name_len * sizeof(short) > e_size
Which computes: 16 + 66 + name_len * 2 > e_size
The correct calculation already exists as fname_full_size() in ntfs.h
and is used in cmp_fnames(), namei.c, and fslog.c, but was not used
in the readdir path.
A crafted NTFS image with an index entry containing a small e->size
but large fname->name_len bypasses the current check, causing
ntfs_utf16_to_nls() to read past the entry boundary.
Additionally, add a key_size validation in hdr_find_e() to ensure the
declared key_size does not exceed the available entry data, preventing
comparison functions from reading past entry boundaries on the lookup
path.
📍 영향받는 시스템
Linux kernel (ntfs3 driver 사용 환경)
⚔️ 공격 벡터
조작된 NTFS 파일 시스템 이미지가 포함된 저장 매체를 시스템에 마운트하거나 읽기 시도
🛡️ 대응 방법
ntfs3 드라이버의 경계 검사 로직이 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:H
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux