{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2026-64431",
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "state": "PUBLISHED",
        "assignerShortName": "Linux",
        "dateReserved": "2026-07-19T15:36:31.787Z",
        "datePublished": "2026-07-25T08:51:07.194Z",
        "dateUpdated": "2026-08-17T04:55:32.047Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-08-17T04:55:32.047Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nntfs: avoid calling post_write_mst_fixup() for invalid index_block\n\nntfs_icx_ib_sync_write() calls post_write_mst_fixup() when ntfs_ib_write()\nreturns an error, intending to restore the buffer after a failed write.\n\nHowever, ntfs_ib_write() returns an error immediately if\npre_write_mst_fixup() validation fails. The caller,\nntfs_icx_ib_sync_write(), interprets any error as a write failure\nrequiring rollback. It does not differentiate between I/O errors and\nvalidation failures, and calls post_write_mst_fixup() anyway.\n\nSince post_write_mst_fixup() assumes that the index_block contents is\ncorrect, it doesn't perform the boundary checks, which results in\nout-of-bounds memory access.\n\nAn attacker can craft a malicious NTFS image with:\n  - large index_block.usa_ofs offset, pointing outside the ntfs_record\n  - index_block.usa_count = 0, causing integer underflow\n  - or index_block.usa_count larger than actual number of sectors in the\n    ntfs_record, causing out-of-bounds access\n\nKASAN reports describing the memory corruption:\n  ==================================================================\n  BUG: KASAN: slab-out-of-bounds in post_write_mst_fixup+0x19c/0x1d0\n  Read of size 2 at addr ffff8881586c9018 by task p/9428\n  Call Trace:\n   <TASK>\n   dump_stack_lvl+0x100/0x190\n   print_report+0x139/0x4ad\n   ? post_write_mst_fixup+0x19c/0x1d0\n   ? __virt_addr_valid+0x262/0x500\n   ? post_write_mst_fixup+0x19c/0x1d0\n   kasan_report+0xe4/0x1d0\n   ? post_write_mst_fixup+0x19c/0x1d0\n   post_write_mst_fixup+0x19c/0x1d0\n   ntfs_icx_ib_sync_write+0x179/0x220\n   ntfs_inode_sync_filename+0x83d/0x1080\n   __ntfs_write_inode+0x1049/0x1480\n   ntfs_file_fsync+0x131/0x9b0\n  ==================================================================\n  BUG: KASAN: slab-out-of-bounds in post_write_mst_fixup+0x1aa/0x1d0\n  Write of size 2 at addr ffff8881586c91fe by task p/9428\n  Call Trace:\n   <TASK>\n   dump_stack_lvl+0x100/0x190\n   print_report+0x139/0x4ad\n   ? post_write_mst_fixup+0x1aa/0x1d0\n   ? __virt_addr_valid+0x262/0x500\n   ? post_write_mst_fixup+0x1aa/0x1d0\n   kasan_report+0xe4/0x1d0\n   ? post_write_mst_fixup+0x1aa/0x1d0\n   post_write_mst_fixup+0x1aa/0x1d0\n   ntfs_icx_ib_sync_write+0x179/0x220\n   ntfs_inode_sync_filename+0x83d/0x1080\n   __ntfs_write_inode+0x1049/0x1480\n   ntfs_file_fsync+0x131/0x9b0\n  ==================================================================\n\nLet's move the post_write_mst_fixup() call to ntfs_ib_write().\nThe ntfs_ib_write() function calls pre_write_mst_fixup() at the beginning.\nIf the index_block contents is invalid, pre_write_mst_fixup() fails and\nntfs_ib_write() returns early without calling post_write_mst_fixup() on\nbad index_block."
                }
            ],
            "metrics": [
                {
                    "cvssV3_1": {
                        "version": "3.1",
                        "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
                        "baseScore": 7.8,
                        "baseSeverity": "HIGH"
                    },
                    "scenarios": [
                        {
                            "lang": "en",
                            "value": "AV:L - The malformed USA fields originate in a crafted NTFS volume, and exploitation proceeds through local file modification followed by fsync or writeback. Network file access alone cannot create the required malformed index metadata.\nAC:L - The attacker controls the index block, USA offset/count, target filename, and triggering operation; no race or condition outside attacker control is required. The usa_count underflow provides a deterministic corruption path.\nPR:L - Although a direct NTFS mount requires initial-namespace CAP_SYS_ADMIN because NTFS lacks FS_USERNS_MOUNT, delegated or automatic mounting allows an ordinary local user to reach the trigger. After mounting, only write access to the crafted file is needed and no capability check occurs.\nUI:N - In reasonable automount, delegated-mount, or fstab-user deployments, no separate victim action is required. The attacker can mount or access the volume, modify the writable file, and invoke fsync independently.\nS:U - The corruption occurs in the host kernel and compromises resources governed by that same kernel security authority. This is standard local kernel privilege escalation rather than a guest-to-host or IOMMU boundary escape.\nC:H - Unchecked USA metadata causes substantial out-of-bounds reads, and the accompanying kernel heap corruption can be leveraged to disclose arbitrary kernel memory. The reads are not confined to a small bounded value.\nI:H - An underflowed usa_count produces up to 65,535 two-byte writes at 512-byte intervals, spanning roughly 32 MiB beyond the index-block allocation. Attacker-controlled initial source values and heap grooming make control-flow hijacking or arbitrary kernel modification defensible.\nA:H - The extensive out-of-bounds access can corrupt unrelated kernel objects or access invalid memory, causing an oops, panic, or system-wide failure. The trigger is repeatable through local filesystem operations."
                        }
                    ]
                }
            ],
            "affected": [
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "unaffected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "fs/ntfs/index.c"
                    ],
                    "versions": [
                        {
                            "version": "0a8ac0c1fa0b99a5b29002bc7f232ed7eafddef0",
                            "lessThan": "e2018628301a6d9f54e34b0cb417f1688c66df1d",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "0a8ac0c1fa0b99a5b29002bc7f232ed7eafddef0",
                            "lessThan": "5b6eedd7cc2936f9238e852b553a1b326105bde8",
                            "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/index.c"
                    ],
                    "versions": [
                        {
                            "version": "7.1",
                            "status": "affected"
                        },
                        {
                            "version": "0",
                            "lessThan": "7.1",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "7.1.4",
                            "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.4"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "7.1",
                                    "versionEndExcluding": "7.2"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/e2018628301a6d9f54e34b0cb417f1688c66df1d"
                },
                {
                    "url": "https://git.kernel.org/stable/c/5b6eedd7cc2936f9238e852b553a1b326105bde8"
                }
            ],
            "title": "ntfs: avoid calling post_write_mst_fixup() for invalid index_block",
            "x_generator": {
                "engine": "bippy-1.2.0"
            }
        }
    }
}