CVE-2026-90133 (GCVE-0-2026-90133)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:06 – Updated: 2026-09-18 17:53
VLAI
Title
ntfs: Fix index_root heap OOB write in ntfs_ir_to_ib()
Summary
In the Linux kernel, the following vulnerability has been resolved: ntfs: Fix index_root heap OOB write in ntfs_ir_to_ib() ntfs_ir_to_ib copies all entries from index_root into a freshly allocated index_block_size-byte buffer without verifying that the entries fit in the available space. The entries in index_root may be larger than the usable entry space in the index block. This can cause OOB writes past the end of the allocation. The validator ntfs_index_root_inconsistent() checks that entries are self-consistent within the IR value, but never cross-checks them against index_block_size. There is no bounds check in ntfs_ir_to_ib() before the memcpy. Fixing this at the sink in ntfs_ir_to_ib() since ntfs_index_root_inconsistent() validates the logical consistency of index_root as a structure and a root with large entries is a structurally valid root. The bug is a size conflict of ntfs_ir_to_ib(). Also, the validator is called once per inode load in ntfs_read_locked_inode() while ntfs_ir_to_ib() is only called during a reparent, a check there adds no overhead to the common path. Moreover, even a future call path that bypasses the validator would still be protected. With NULL as first parameter of ntfs_error(), the volume error flag is never set by this call, so the device name will be absent from the error message. In any case, that the caller, ntfs_ir_reparent(), prints an error message that includes the device name on NULL returns. I think this is the best solution available without adding 'struct super_block *sb' as a parameter to ntfs_ir_to_ib(). This heap out-of-bounds write is triggered by a crafted filesystem image, which is not in the kernel threat model, anyway, fixing memory errors would be nice to keep things secure.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 0a8ac0c1fa0b99a5b29002bc7f232ed7eafddef0 , < 825dec5120933e90c54e30e31ccfa6c3449043a8 (git)
Affected: 0a8ac0c1fa0b99a5b29002bc7f232ed7eafddef0 , < dc09bf79b76f9a7157e225f449655f3f62f96c9c (git)
guessed Create a notification for this product.
Linux Linux Affected: 7.1
Unaffected: 0 , < 7.1 (semver)
Unaffected: 7.2.6 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "fs/ntfs/index.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "825dec5120933e90c54e30e31ccfa6c3449043a8",
              "status": "affected",
              "version": "0a8ac0c1fa0b99a5b29002bc7f232ed7eafddef0",
              "versionType": "git"
            },
            {
              "lessThan": "dc09bf79b76f9a7157e225f449655f3f62f96c9c",
              "status": "affected",
              "version": "0a8ac0c1fa0b99a5b29002bc7f232ed7eafddef0",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/ntfs/index.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "7.1"
            },
            {
              "lessThan": "7.1",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.6",
                  "versionStartIncluding": "7.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "7.1",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nntfs: Fix index_root heap OOB write in ntfs_ir_to_ib()\n\nntfs_ir_to_ib copies all entries from index_root into a freshly allocated\nindex_block_size-byte buffer without verifying that the entries fit in the\navailable space. The entries in index_root may be larger than the usable\nentry space in the index block.\n\nThis can cause OOB writes past the end of the allocation.\n\nThe validator ntfs_index_root_inconsistent() checks that entries are\nself-consistent within the IR value, but never cross-checks them against\nindex_block_size. There is no bounds check in ntfs_ir_to_ib() before the\nmemcpy.\n\nFixing this at the sink in ntfs_ir_to_ib() since\nntfs_index_root_inconsistent() validates the logical consistency of\nindex_root as a structure and a root with large entries is a structurally\nvalid root. The bug is a size conflict of ntfs_ir_to_ib().\nAlso, the validator is called once per inode load in\nntfs_read_locked_inode() while ntfs_ir_to_ib() is only called during a\nreparent, a check there adds no overhead to the common path.\nMoreover, even a future call path that bypasses the validator would still\nbe protected.\n\nWith NULL as first parameter of ntfs_error(), the volume error flag is\nnever set by this call, so the device name will be absent from the error\nmessage. In any case, that the caller, ntfs_ir_reparent(), prints an error\nmessage that includes the device name on NULL returns.\nI think this is the best solution available without adding\n\u0027struct super_block *sb\u0027 as a parameter to ntfs_ir_to_ib().\n\nThis heap out-of-bounds write is triggered by a crafted filesystem image,\nwhich is not in the kernel threat model, anyway, fixing memory errors would\nbe nice to keep  things secure."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The overflow source is on-disk $INDEX_ROOT (ir-\u003eindex_block_size and the resident entries) that ntfs_ir_to_ib() memcpy()s; the trigger is vfs_create/mkdir/link/rename \u2192 ntfs_create/__ntfs_link \u2192 ntfs_index_add_filename \u2192 ntfs_ie_add \u2192 ntfs_ir_make_space \u2192 ntfs_ir_reparent. No protocol message carries those fields.\nAC:L - ntfs_read_locked_inode() accepts any power-of-two index_block_size in [512, PAGE_SIZE] and ntfs_index_root_inconsistent() never compares entry bytes to that size, so a 512-byte IB plus a packed resident INDEX_ROOT in a full MFT record makes ntfs_ir_truncate() return -ENOSPC and ntfs_ir_reparent() run on the next create, with no race.\nPR:N - mount_capable() needs init-namespace CAP_SYS_ADMIN because ntfs_fs_type lacks FS_USERNS_MOUNT; that mount is the victim or udisks2/vold action (UI:R), not attacker privilege. After mount, ntfs_create() is an ordinary VFS create on a directory whose mode the image controls, so the attacker needs no account.\nUI:R - ntfs_ir_to_ib() is called only from ntfs_ir_reparent(), not from ntfs_fill_super(), so attaching the volume is not enough. A victim or automounter must mount the attacker-supplied NTFS image, and then create/mkdir/link/rename must add a filename so ntfs_ie_add() takes the ENOSPC reparent path.\nS:U - The kvzalloc(index_block) overflow in ntfs_ir_to_ib() corrupts host-kernel heap in the same OS authority as fs/ntfs; it is in-kernel memory corruption, not a VM escape, IOMMU bypass, or sandbox breakout.\nC:H - memcpy() in ntfs_ir_to_ib() writes attacker-controlled INDEX_ROOT entry bytes (UTF-16 names, MFT refs) past the kvzalloc(ir-\u003eindex_block_size) object into adjacent slab, a heap OOB write that can be groomed to disclose neighboring kernel objects.\nI:H - The same memcpy is an unbounded heap out-of-bounds write of attacker-chosen index-entry contents past the allocated index_block, which can corrupt adjacent slab objects and hijack kernel control flow.\nA:H - Writing past the kvzalloc index_block into unmapped or poisoned adjacent heap oopses or panics on the ntfs_ir_reparent() create/mkdir path, fully denying availability even when the overflow is not turned into a write primitive."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-18T17:53:15.758Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/825dec5120933e90c54e30e31ccfa6c3449043a8"
        },
        {
          "url": "https://git.kernel.org/stable/c/dc09bf79b76f9a7157e225f449655f3f62f96c9c"
        }
      ],
      "title": "ntfs: Fix index_root heap OOB write in ntfs_ir_to_ib()",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90133",
    "datePublished": "2026-09-17T16:06:33.234Z",
    "dateReserved": "2026-09-11T19:38:34.788Z",
    "dateUpdated": "2026-09-18T17:53:15.758Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-90133",
      "date": "2026-09-26",
      "epss": "0.00205",
      "percentile": "0.09365"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "fs/ntfs/index.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "825dec5120933e90c54e30e31ccfa6c3449043a8",
                    "status": "affected",
                    "version": "0a8ac0c1fa0b99a5b29002bc7f232ed7eafddef0",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "dc09bf79b76f9a7157e225f449655f3f62f96c9c",
                    "status": "affected",
                    "version": "0a8ac0c1fa0b99a5b29002bc7f232ed7eafddef0",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "fs/ntfs/index.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "7.1"
                  },
                  {
                    "lessThan": "7.1",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.6",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nntfs: Fix index_root heap OOB write in ntfs_ir_to_ib()\n\nntfs_ir_to_ib copies all entries from index_root into a freshly allocated\nindex_block_size-byte buffer without verifying that the entries fit in the\navailable space. The entries in index_root may be larger than the usable\nentry space in the index block.\n\nThis can cause OOB writes past the end of the allocation.\n\nThe validator ntfs_index_root_inconsistent() checks that entries are\nself-consistent within the IR value, but never cross-checks them against\nindex_block_size. There is no bounds check in ntfs_ir_to_ib() before the\nmemcpy.\n\nFixing this at the sink in ntfs_ir_to_ib() since\nntfs_index_root_inconsistent() validates the logical consistency of\nindex_root as a structure and a root with large entries is a structurally\nvalid root. The bug is a size conflict of ntfs_ir_to_ib().\nAlso, the validator is called once per inode load in\nntfs_read_locked_inode() while ntfs_ir_to_ib() is only called during a\nreparent, a check there adds no overhead to the common path.\nMoreover, even a future call path that bypasses the validator would still\nbe protected.\n\nWith NULL as first parameter of ntfs_error(), the volume error flag is\nnever set by this call, so the device name will be absent from the error\nmessage. In any case, that the caller, ntfs_ir_reparent(), prints an error\nmessage that includes the device name on NULL returns.\nI think this is the best solution available without adding\n\u0027struct super_block *sb\u0027 as a parameter to ntfs_ir_to_ib().\n\nThis heap out-of-bounds write is triggered by a crafted filesystem image,\nwhich is not in the kernel threat model, anyway, fixing memory errors would\nbe nice to keep  things secure."
          }
        ],
        "id": "CVE-2026-90133",
        "lastModified": "2026-09-18T18:17:43.133",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "REQUIRED",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-17T17:17:05.837",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/825dec5120933e90c54e30e31ccfa6c3449043a8"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/dc09bf79b76f9a7157e225f449655f3f62f96c9c"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-21T16:32:38Z",
      "cve": "CVE-2026-90133",
      "id": "CVE-2026-90133",
      "initial_release_date": "2026-09-18T00:20:56Z",
      "product_status:known_not_affected": "347",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-90133",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-90133.json",
      "version": "4"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…