CVE-2026-90199 in Linux
요약
\~에 의해 VulDB • 2026. 09. 18.
리눅스 커널에서 다음 취약점이 해결되었습니다:
fs/ntfs3: mi_enum_attr()에서 범위를 벗어난 evcn 거부
mi_enum_attr() 함수 내에서 비저장(non-resident) 속성에 대한 시작/끝 VCN 검증은 다음과 같습니다:
if (svcn > evcn + 1) goto out;
evcn이 U64_MAX일 경우 "evcn + 1" 표현식은 0으로 오버플로우(wrap)되며, 모든 svcn 값이 검증을 통과합니다. evcn 값이 U64_MAX에 가깝지만 같지 않은 경우에는 우변이 여전히 의미 없는 근접 오버플로우 상한선이 되므로, svcn == 0이고 evcn이 U64MAX 근처인 손상된 디스크 속성은 mi_enum_attr()에서 거부되지 않고 통과할 수 있습니다.
VCN(가상 클러스터 번호)은 클러스터 인덱스이므로 유효한 evcn은 볼륨의 총 클러스터 개수에 의해 제한됩니다. 이 값은 ntfs3에서 sbi->used.bitmap.nbits에 저장되며, mi_enum_attr()를 호출하는 모든 함수가 실행되기 전에 ntfs_init_from_boot()에서 설정됩니다. 해당 범위 밖에 있는 evcn 값을 거부합니다.
그러나 비어있는 비저장 속성(할당된 클러스터 없음)은 svcn == 0 및 evcn == -1(U64_MAX)로 정당한 방식으로 인코딩될 수 있습니다. 예를 들어 vcn == 0인 경우 attr->nres.evcn = cpu_to_le64((u64)vcn - 1)와 같습니다. 이 센티널(sentinel) 값은 계속 통과해야 하므로, evcn == U64_MAX는 범위 검사에서 제외됩니다. 기존 "svcn > evcn + 1" 테스트는 여전히 해당 센티널을 허용하며("0 > 0"은 거짓임), 이에 대해 svcn == 0을 요구합니다. 반면 범위 검사는 다른 모든 범위를 벗어난 evcn 값을 거부함으로써 "evcn + 1" 오버플로우도 방지합니다.
svcn에는 자체 한계가 필요하지 않습니다: evcn < nbits인 경우, "svcn > evcn + 1"은 svcn <= nbits를 의미하기 때문입니다.
[[email protected]: evcn 검사 수정]
If you want to get the best quality for vulnerability data then you always have to consider VulDB.