CVE-2026-99131 (GCVE-0-2026-99131)

Vulnerability from cvelistv5 – Published: 2026-10-28 10:34 – Updated: 2026-10-31 12:43
VLAI
Title
xfs: fix capability check in xfs
Summary
In the Linux kernel, the following vulnerability has been resolved: xfs: fix capability check in xfs An user reported a bug where he managed to evade group's quota by changing a file's gid to a different group id the same user belonged to, even though quotas were enforced on both gids and the file's size was big enough to exceed the quota's hardlimit. Commit eba0549bc7d1 replaced a capable() call by a has_capability_noaudit() to prevent unnecessary selinux audit messages. Turns out that both calls have slightly different semantics even though their documentation seems similar. Where in a nutshell: capable() - Tests the task's effective credentials has_ns_capability_noaudit() - Tests the task's real credentials This most of the time has no practical difference but in some cases like changing attrs (specifically group id in this case) through a NFS client this will allow the quota code to use XFS_QMOPT_FORCE_RES, effectively bypassing quota accounting checks. Using instead ns_capable_noaudit() should fix this issue and prevent selinux audit messages. This also fix the remaining calls to has_capability_noaudit()
Assigner
Linux CNA under the mitre root
CNA scorecard D 53/100 over 6637 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: eba0549bc7d100691c13384b774346b8aa9cf9a9 , < 29f994db0447104a7a52fb6495193c80007cb66a (git)
Affected: eba0549bc7d100691c13384b774346b8aa9cf9a9 , < e84bfb08016496ec5ce09a5ef9c813f23c060781 (git)
Affected: eba0549bc7d100691c13384b774346b8aa9cf9a9 , < 87881f816ab721d8a727cba20c36b9c71b489c8e (git)
Affected: eba0549bc7d100691c13384b774346b8aa9cf9a9 , < 19a1a22029ad3ae3604c763af6bd1195cb73648f (git)
Affected: eba0549bc7d100691c13384b774346b8aa9cf9a9 , < 7809ac0161c7c5f52ed348fb1ec683b2b454a83e (git)
Affected: eba0549bc7d100691c13384b774346b8aa9cf9a9 , < e2f62a9744ebad3bcb6347a648e615026e9efeff (git)
guessed Create a notification for this product.
Linux Linux Affected: 5.18
Unaffected: 0 , < 5.18 (semver)
Unaffected: 6.1.191 , ≤ 6.1.* (semver)
Unaffected: 6.6.161 , ≤ 6.6.* (semver)
Unaffected: 6.12.115 , ≤ 6.12.* (semver)
Unaffected: 6.18.59 , ≤ 6.18.* (semver)
Unaffected: 7.2.13 , ≤ 7.2.* (semver)
Unaffected: 7.3 , ≤ * (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/xfs/xfs_fsmap.c",
            "fs/xfs/xfs_ioctl.c",
            "fs/xfs/xfs_iops.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "29f994db0447104a7a52fb6495193c80007cb66a",
              "status": "affected",
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "versionType": "git"
            },
            {
              "lessThan": "e84bfb08016496ec5ce09a5ef9c813f23c060781",
              "status": "affected",
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "versionType": "git"
            },
            {
              "lessThan": "87881f816ab721d8a727cba20c36b9c71b489c8e",
              "status": "affected",
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "versionType": "git"
            },
            {
              "lessThan": "19a1a22029ad3ae3604c763af6bd1195cb73648f",
              "status": "affected",
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "versionType": "git"
            },
            {
              "lessThan": "7809ac0161c7c5f52ed348fb1ec683b2b454a83e",
              "status": "affected",
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "versionType": "git"
            },
            {
              "lessThan": "e2f62a9744ebad3bcb6347a648e615026e9efeff",
              "status": "affected",
              "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "fs/xfs/xfs_fsmap.c",
            "fs/xfs/xfs_ioctl.c",
            "fs/xfs/xfs_iops.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.18"
            },
            {
              "lessThan": "5.18",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.191",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.161",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.115",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.59",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.13",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.191",
                  "versionStartIncluding": "5.18",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.161",
                  "versionStartIncluding": "5.18",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.115",
                  "versionStartIncluding": "5.18",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.59",
                  "versionStartIncluding": "5.18",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.13",
                  "versionStartIncluding": "5.18",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "5.18",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfs: fix capability check in xfs\n\nAn user reported a bug where he managed to evade group\u0027s quota\nby changing a file\u0027s gid to a different group id the same user\nbelonged to, even though quotas were enforced on both gids and the\nfile\u0027s size was big enough to exceed the quota\u0027s hardlimit.\n\nCommit eba0549bc7d1 replaced a capable() call by a\nhas_capability_noaudit() to prevent unnecessary selinux audit messages.\nTurns out that both calls have slightly different semantics even though\ntheir documentation seems similar. Where in a nutshell:\n\ncapable() - Tests the task\u0027s effective credentials\nhas_ns_capability_noaudit() - Tests the task\u0027s real credentials\n\nThis most of the time has no practical difference but in some cases like\nchanging attrs (specifically group id in this case) through a NFS client\nthis will allow the quota code to use XFS_QMOPT_FORCE_RES, effectively\nbypassing quota accounting checks.\n\nUsing instead ns_capable_noaudit() should fix this issue and prevent\nselinux audit messages.\n\nThis also fix the remaining calls to has_capability_noaudit()"
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.2,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - An NFSv4 COMPOUND/SETATTR request carries FATTR4_OWNER_GROUP; nfsd4_decode_setattr() sets ATTR_GID, and nfsd4_setattr()-\u003enfsd_setattr()-\u003enotify_change()-\u003exfs_vn_setattr() reaches the patched xfs_setattr_nonsize(). NFS is routable, so the vector is Network.\nAC:L - The attacker controls the deterministic sequence: AUTH_SYS credentials assert both groups, NFS WRITE fills the source group\u0027s quota, and SETATTR moves each file to the over-limit destination group. No race or external state transition is required.\nPR:N - svcauth_unix_accept() accepts the uid, gid, and supplementary groups asserted in an AUTH_SYS RPC without account verification, and nfsd_setuser() installs them as subjective credentials. chgrp_ok() then requires only the asserted owner identity and destination-group membership.\nUI:N - The remote client creates and fills the file and sends the SETATTR group change itself; neither nfsd_setattr() nor xfs_setattr_nonsize() requires a separate victim action.\nS:U - xfs_trans_dqresv() skips a quota check and xfs_qm_vop_chown() updates dquots within the same host XFS security authority; no VM, sandbox, or other security boundary is crossed.\nC:N - XFS_QMOPT_FORCE_RES only bypasses the limit branch in xfs_trans_dqresv(), after which quota counters and inode ownership are updated; the path performs no out-of-bounds read or disclosure of kernel or other-file data.\nI:L - With XFS_QMOPT_FORCE_RES set, xfs_trans_dqresv() omits the hard-limit test and xfs_qm_vop_chown() charges blocks and inodes to an already over-limit group. This defeats quota policy and modifies resource accounting, but provides no arbitrary write or control over other users\u0027 file contents.\nA:H - xfs_qm_vop_chown() debits the source dquot and, after forced reservation, credits the already over-limit destination; repeating NFS writes and group changes can consume the entire XFS volume. Full-volume exhaustion denies allocations to all users and services on that filesystem."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-31T12:43:34.118Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/29f994db0447104a7a52fb6495193c80007cb66a"
        },
        {
          "url": "https://git.kernel.org/stable/c/e84bfb08016496ec5ce09a5ef9c813f23c060781"
        },
        {
          "url": "https://git.kernel.org/stable/c/87881f816ab721d8a727cba20c36b9c71b489c8e"
        },
        {
          "url": "https://git.kernel.org/stable/c/19a1a22029ad3ae3604c763af6bd1195cb73648f"
        },
        {
          "url": "https://git.kernel.org/stable/c/7809ac0161c7c5f52ed348fb1ec683b2b454a83e"
        },
        {
          "url": "https://git.kernel.org/stable/c/e2f62a9744ebad3bcb6347a648e615026e9efeff"
        }
      ],
      "title": "xfs: fix capability check in xfs",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-99131",
    "datePublished": "2026-10-28T10:34:45.102Z",
    "dateReserved": "2026-09-25T10:25:14.394Z",
    "dateUpdated": "2026-10-31T12:43:34.118Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-99131",
      "date": "2026-11-05",
      "epss": "0.0045",
      "percentile": "0.3926"
    },
    "microsoft_vex": {
      "current_release_date": "2026-11-01T14:49:24.000Z",
      "cve": "CVE-2026-99131",
      "id": "msrc_CVE-2026-99131",
      "initial_release_date": "2026-10-29T01:04:52.000Z",
      "product_status:known_affected": "2",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "xfs: fix capability check in xfs",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-99131.json",
      "version": "2"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "fs/xfs/xfs_fsmap.c",
                  "fs/xfs/xfs_ioctl.c",
                  "fs/xfs/xfs_iops.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "29f994db0447104a7a52fb6495193c80007cb66a",
                    "status": "affected",
                    "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "e84bfb08016496ec5ce09a5ef9c813f23c060781",
                    "status": "affected",
                    "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "87881f816ab721d8a727cba20c36b9c71b489c8e",
                    "status": "affected",
                    "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "19a1a22029ad3ae3604c763af6bd1195cb73648f",
                    "status": "affected",
                    "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "7809ac0161c7c5f52ed348fb1ec683b2b454a83e",
                    "status": "affected",
                    "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "e2f62a9744ebad3bcb6347a648e615026e9efeff",
                    "status": "affected",
                    "version": "eba0549bc7d100691c13384b774346b8aa9cf9a9",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "fs/xfs/xfs_fsmap.c",
                  "fs/xfs/xfs_ioctl.c",
                  "fs/xfs/xfs_iops.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "5.18"
                  },
                  {
                    "lessThan": "5.18",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.1.*",
                    "status": "unaffected",
                    "version": "6.1.191",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.6.*",
                    "status": "unaffected",
                    "version": "6.6.161",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.115",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.59",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.13",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3",
                    "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\nxfs: fix capability check in xfs\n\nAn user reported a bug where he managed to evade group\u0027s quota\nby changing a file\u0027s gid to a different group id the same user\nbelonged to, even though quotas were enforced on both gids and the\nfile\u0027s size was big enough to exceed the quota\u0027s hardlimit.\n\nCommit eba0549bc7d1 replaced a capable() call by a\nhas_capability_noaudit() to prevent unnecessary selinux audit messages.\nTurns out that both calls have slightly different semantics even though\ntheir documentation seems similar. Where in a nutshell:\n\ncapable() - Tests the task\u0027s effective credentials\nhas_ns_capability_noaudit() - Tests the task\u0027s real credentials\n\nThis most of the time has no practical difference but in some cases like\nchanging attrs (specifically group id in this case) through a NFS client\nthis will allow the quota code to use XFS_QMOPT_FORCE_RES, effectively\nbypassing quota accounting checks.\n\nUsing instead ns_capable_noaudit() should fix this issue and prevent\nselinux audit messages.\n\nThis also fix the remaining calls to has_capability_noaudit()"
          }
        ],
        "id": "CVE-2026-99131",
        "lastModified": "2026-10-31T13:17:56.757",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "HIGH",
                "baseScore": 8.2,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "NONE",
                "integrityImpact": "LOW",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 3.9,
              "impactScore": 4.2,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-10-28T11:17:32.917",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/19a1a22029ad3ae3604c763af6bd1195cb73648f"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/29f994db0447104a7a52fb6495193c80007cb66a"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/7809ac0161c7c5f52ed348fb1ec683b2b454a83e"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/87881f816ab721d8a727cba20c36b9c71b489c8e"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/e2f62a9744ebad3bcb6347a648e615026e9efeff"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/e84bfb08016496ec5ce09a5ef9c813f23c060781"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-11-06T03:26:14+00:00",
      "cve": "CVE-2026-99131",
      "id": "CVE-2026-99131",
      "initial_release_date": "2026-10-28T10:34:45.102000+00:00",
      "product_status:known_affected": "112",
      "product_status:known_not_affected": "91",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: kernel: xfs: Disk quota bypass via improper capability check",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-99131.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-11-04T00:38:36Z",
      "cve": "CVE-2026-99131",
      "id": "CVE-2026-99131",
      "initial_release_date": "2026-10-28T17:34:06Z",
      "product_status:known_affected": "50",
      "product_status:known_not_affected": "286",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-99131",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/2026/cve-2026-99131.json",
      "version": "4"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

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.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
How durations are calculated

Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.

Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.

Events included in the timeline

Loading timeline…


    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.