{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2026-72209", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2026-08-09T03:40:39.912Z", "datePublished": "2026-08-15T05:54:04.772Z", "dateUpdated": "2026-08-17T05:41:36.117Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-17T05:41:36.117Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nntfs: validate attribute values on lookup\n\nntfs_attr_find() and ntfs_external_attr_find() check that generic\nresident attribute values fit in their attribute records and that\nfixed-size resident values are large enough. For variable-length resident\nformats, however, the fixed part is not enough: embedded length fields\ncan still point callers past the resident value.\n\nA crafted image can set a small resident $FILE_NAME value_length while\nleaving file_name_length large. Callers then trust file_name_length and\nread past the resident value when converting or comparing the name. This\nwas reproduced with a crafted image under KASAN as a slab-out-of-bounds\nread from the kmalloc-1k MFT record copy. The stack included\nntfs_lookup(), ntfs_iget(), ntfs_read_locked_inode(), ntfs_attr_name_get(),\nntfs_ucstonls(), and utf16s_to_utf8s().\n\nAdd a shared attribute value validator and use it before a lookup path\ncan return an attribute, including the AT_UNUSED enumeration case where\ncallers inspect returned attributes directly. The helper validates\nresident value bounds, minimum resident value sizes, variable-length\n$FILE_NAME fields, and non-resident mapping-pairs metadata that was\npreviously checked separately in both lookup paths.\n\nThis also preserves the intended resident @val matching semantics in the\nexternal attribute lookup path. The old duplicated validation block\noverwrote the actual resident value length with the type-specific minimum\nlength before comparing @val, so variable-length resident values could\nfail to match even when the bytes were identical. Keep the comparison on\nthe actual value length, and make ntfs_attrlist_entry_add() compare\nresident attributes with lowest_vcn zero instead of reading the\nnon-resident union member after a successful resident match.\n\nReject non-resident $FILE_NAME records too: the format requires\n$FILE_NAME to be resident and callers treat returned records as resident." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL" }, "scenarios": [ { "lang": "en", "value": "AV:N - NTFS registers ntfs_export_ops; remote nfsd/ksmbd VFS lookups on an exported crafted NTFS volume reach ntfs_lookup→ntfs_iget→ntfs_read_locked_inode→ntfs_attr_name_get without local syscall access.\nAC:L - The attacker fully controls on-disk $FILE_NAME metadata (small resident value_length with large file_name_length) in a crafted image; the fix commit reproduced the slab OOB read via ntfs_lookup deterministically with no races.\nPR:N - Triggering needs only read access to mounted NTFS content (e.g., authenticated or guest NFS/SMB client on an exported share) or supplying removable media later mounted by the host; no init-namespace root or CAP_SYS_ADMIN on the lookup path.\nUI:N - Once a crafted NTFS volume is mounted and exported (or loop-mounted in a user namespace), normal remote lookups/opens reach the vulnerable attribute parsing without further victim clicks or cooperative actions.\nS:U - The slab out-of-bounds read and potential kernel crash stay within the mounting host kernel authority; this is standard filesystem parsing exploitation, not a VM escape, IOMMU bypass, or cross-sandbox scope change.\nC:H - Callers trust inflated file_name_length and ntfs_ucstonls/utf16s_to_utf8s read past the resident $FILE_NAME value in the kmalloc-1k MFT record copy, disclosing adjacent slab heap memory beyond a few bytes.\nI:H - Attacker-controlled file_name_length drives kernel parsing of forged resident metadata and adjacent slab contents; per kernel CNA guidance, this memory-corruption class can be leveraged for arbitrary kernel modification or control-flow hijack beyond the immediate read.\nA:H - KASAN reports slab-out-of-bounds read from the MFT record copy on lookup; reading past the resident $FILE_NAME value can oops or panic the kernel when accessing invalid adjacent memory." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/ntfs/attrib.c", "fs/ntfs/attrlist.c" ], "versions": [ { "version": "6ceb4cc81ef3409ff79dcb959771f9110787397a", "lessThan": "e4c36dfac57a7261e9aeb0f3a7f30944a8aefb56", "status": "affected", "versionType": "git" }, { "version": "6ceb4cc81ef3409ff79dcb959771f9110787397a", "lessThan": "d5803e3345dae9c6470bb61869885236276b9a35", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/ntfs/attrib.c", "fs/ntfs/attrlist.c" ], "versions": [ { "version": "7.1", "status": "affected" }, { "version": "0", "lessThan": "7.1", "status": "unaffected", "versionType": "semver" }, { "version": "7.1.5", "lessThanOrEqual": "7.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "7.2", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "7.1", "versionEndExcluding": "7.1.5" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "7.1", "versionEndExcluding": "7.2" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/e4c36dfac57a7261e9aeb0f3a7f30944a8aefb56" }, { "url": "https://git.kernel.org/stable/c/d5803e3345dae9c6470bb61869885236276b9a35" } ], "title": "ntfs: validate attribute values on lookup", "x_generator": { "engine": "bippy-1.2.0" } } } }