140 lines
8.3 KiB
JSON
140 lines
8.3 KiB
JSON
{
|
|
"dataType": "CVE_RECORD",
|
|
"dataVersion": "5.2",
|
|
"cveMetadata": {
|
|
"cveId": "CVE-2026-89614",
|
|
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
|
|
"state": "PUBLISHED",
|
|
"assignerShortName": "Linux",
|
|
"dateReserved": "2026-09-11T19:38:34.735Z",
|
|
"datePublished": "2026-09-11T19:45:14.747Z",
|
|
"dateUpdated": "2026-10-19T08:49:46.853Z"
|
|
},
|
|
"containers": {
|
|
"cna": {
|
|
"providerMetadata": {
|
|
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
|
|
"shortName": "Linux",
|
|
"dateUpdated": "2026-10-19T08:49:46.853Z"
|
|
},
|
|
"descriptions": [
|
|
{
|
|
"lang": "en",
|
|
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nntfs: bound the free-cluster bitmap scan to the volume\n\nvol->lcn_empty_bits_per_page is sized from vol->nr_clusters at mount, but\nntfs_cluster_alloc() bounds its scan of that array by the size of $Bitmap.\nThose are independent on-disk quantities and the mount-time check only\nrejects a $Bitmap that is too small, so an image whose $Bitmap covers more\nclusters than the volume has lets the scan index past the array. A run\nwhose LCN lies in that gap takes the allocator straight there, since the\ncaller passes the file's own last LCN as its locality hint. KASAN reports\na slab out-of-bounds read when a file on such a volume is extended.\n\nClamp the scan to what that array covers, mirroring the max_index\ncalculation the mount-time scan already uses, and reject a decoded LCN\nat or beyond nr_clusters in the mapping pairs decoder. Conforming\nvolumes are unaffected."
|
|
}
|
|
],
|
|
"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 - fs/ntfs registers ntfs_export_ops, so nfsd/ksmbd VFS writes on an exported NTFS volume reach ntfs_file_write_iter->iomap->ntfs_attr_expand->ntfs_cluster_alloc, and reads reach ntfs_mapping_pairs_decompress, without local shell access.\nAC:L - A crafted image whose $Bitmap covers more clusters than nr_clusters, plus a file run whose LCN sits in that gap, deterministically drives the allocator to index past lcn_empty_bits_per_page and the decoder to accept out-of-volume LCNs, with no race or victim-specific layout.\nPR:N - Triggering needs only permission to cause server-side parse or extend of mounted NTFS metadata (guest/anonymous SMB, a permissive NFS export, or an unprivileged local open/write on an already-mounted volume), not init-namespace root or CAP_SYS_ADMIN at trigger time.\nUI:N - After the crafted volume is mounted and optionally exported, ordinary remote or local write/truncate/fallocate, and reads that decompress mapping pairs, trigger the bug; no extra victim mount dialog, USB insertion, or confirmation is required during the attack.\nS:U - Slab out-of-bounds access to vol->lcn_empty_bits_per_page and misdirected block I/O remain in the host kernel/OS security domain and do not cross a VM, container, or IOMMU boundary to another authority.\nC:H - ntfs_cluster_alloc performs a KASAN-confirmed slab out-of-bounds read of lcn_empty_bits_per_page at an attacker-influenced page index, and decoded LCNs past nr_clusters make iomap reads disclose data beyond the NTFS volume, a kernel heap/OOB-read disclosure primitive.\nI:H - With zone_end set from the poisoned LCN, the bitmap scan calls ntfs_set_lcn_empty_bits() on out-of-range indices (heap OOB write of empty-bit counts) and iomap can write past the volume using those LCNs, a kernel memory-corruption primitive consistent with privilege escalation.\nA:H - KASAN reports a slab out-of-bounds access when a file on such a volume is extended; indexing past the kvmalloc array can oops, and the OOB write of lcn_empty_bits_per_page can panic or hang the host, so even failed exploitation denies service."
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"affected": [
|
|
{
|
|
"product": "Linux",
|
|
"vendor": "Linux",
|
|
"defaultStatus": "unaffected",
|
|
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
|
|
"programFiles": [
|
|
"fs/ntfs/lcnalloc.c",
|
|
"fs/ntfs/runlist.c"
|
|
],
|
|
"versions": [
|
|
{
|
|
"version": "11ccc9107dc460de28af90fac1f42404d9802735",
|
|
"lessThan": "dc15a9f5307d5372aef3b64bf3ed7802f530c471",
|
|
"status": "affected",
|
|
"versionType": "git"
|
|
},
|
|
{
|
|
"version": "11ccc9107dc460de28af90fac1f42404d9802735",
|
|
"lessThan": "19cac7902a8ab748e15f98ddaafcf5f8882be21d",
|
|
"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/lcnalloc.c",
|
|
"fs/ntfs/runlist.c"
|
|
],
|
|
"versions": [
|
|
{
|
|
"version": "7.1",
|
|
"status": "affected"
|
|
},
|
|
{
|
|
"version": "0",
|
|
"lessThan": "7.1",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "7.2.4",
|
|
"lessThanOrEqual": "7.2.*",
|
|
"status": "unaffected",
|
|
"versionType": "semver"
|
|
},
|
|
{
|
|
"version": "7.3",
|
|
"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.2.4"
|
|
},
|
|
{
|
|
"vulnerable": true,
|
|
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
|
|
"versionStartIncluding": "7.1",
|
|
"versionEndExcluding": "7.3"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"references": [
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/dc15a9f5307d5372aef3b64bf3ed7802f530c471"
|
|
},
|
|
{
|
|
"url": "https://git.kernel.org/stable/c/19cac7902a8ab748e15f98ddaafcf5f8882be21d"
|
|
}
|
|
],
|
|
"title": "ntfs: bound the free-cluster bitmap scan to the volume",
|
|
"x_generator": {
|
|
"engine": "bippy-1.2.0"
|
|
}
|
|
}
|
|
}
|
|
} |