CVE-2026-90217 (GCVE-0-2026-90217)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:07 – Updated: 2026-09-18 17:53
VLAI
Title
bpf: Compare iterator types during state pruning
Summary
In the Linux kernel, the following vulnerability has been resolved: bpf: Compare iterator types during state pruning An iterator stack slot can be MEM_RCU or PTR_UNTRUSTED. These states must not be equal, or the verifier can prune an unsafe path. Compare the pointer type for STACK_ITER slots.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: dfab99df147b0d364f0c199f832ff2aedfb2265a , < 6424b9cde9edc7f2098115bbfd1ee3d84a958380 (git)
Affected: dfab99df147b0d364f0c199f832ff2aedfb2265a , < 83608e303b95d07afba1c15da0b5d9e513c2f15a (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.7
Unaffected: 0 , < 6.7 (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": [
            "kernel/bpf/states.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "6424b9cde9edc7f2098115bbfd1ee3d84a958380",
              "status": "affected",
              "version": "dfab99df147b0d364f0c199f832ff2aedfb2265a",
              "versionType": "git"
            },
            {
              "lessThan": "83608e303b95d07afba1c15da0b5d9e513c2f15a",
              "status": "affected",
              "version": "dfab99df147b0d364f0c199f832ff2aedfb2265a",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "kernel/bpf/states.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.7"
            },
            {
              "lessThan": "6.7",
              "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": "6.7",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "6.7",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Compare iterator types during state pruning\n\nAn iterator stack slot can be MEM_RCU or PTR_UNTRUSTED. These states\nmust not be equal, or the verifier can prune an unsafe path.\n\nCompare the pointer type for STACK_ITER slots."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The attacker-controlled input is the BPF instruction stream copied in bpf_prog_load() from bpf(2) BPF_PROG_LOAD (__sys_bpf). bpf_check() then stacksafe() treats STACK_ITER slots with MEM_RCU and PTR_UNTRUSTED as equal; that bytecode is local syscall input, not a remote protocol payload.\nAC:L - The attacker authors both verifier paths as in iter_tasks_rcu_state_pruning: bpf_iter_task_new under bpf_rcu_read_lock, then a bpf_get_prandom_u32 branch that nested-lock/unlock (MEM_RCU) or unlock/relock (PTR_UNTRUSTED) before bpf_iter_task_next. Both sides and the branch are attacker-controlled; no victim timing is required.\nPR:L - add_subprog_and_kfunc() rejects kfunc calls unless env-\u003ebpf_capable. bpf_iter_task_new and bpf_iter_css_new are kfuncs; BPF_PROG_TYPE_SYSCALL (always sleepable) needs only bpf_token_capable(CAP_BPF). bpf_token_capable() uses ns_capable() on a delegated token userns, so this is not init-namespace root.\nUI:N - The attacker loads the crafted sleepable program with BPF_PROG_LOAD and executes it via BPF_PROG_TEST_RUN (bpf_prog_test_run_syscall) or by attaching their own fentry.s; no other user must mount a filesystem, open a file, or cooperate.\nS:U - A pruned bpf_iter_task_next() walks host task_struct lists in the same kernel that loaded the program. That is in-kernel use-after-free and privilege escalation, not a KVM/Xen guest-to-host escape or IOMMU bypass.\nC:H - After the pruned unlock/relock gap, bpf_iter_task_next() returns kit-\u003epos from bpf_iter_task_kern, a task_struct * that may already have been RCU-freed. The program can read BTF fields of that dangling pointer, so the UAF is an arbitrary kernel disclosure.\nI:H - bpf_iter_task_next() then calls next_task()/__next_thread() (list_entry_rcu on tasks.next and thread_node) using the dangling kit-\u003epos. Walking attacker-reclaimed task_struct list nodes is a kernel write primitive; UAF and iterator type confusion are Integrity High.\nA:H - Using the untrusted STACK_ITER after the RCU gap makes next_task() or css_next_descendant_*() dereference a freed task_struct or cgroup_subsys_state, causing a kernel oops or panic even when the UAF is not fully exploited."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-18T17:53:48.672Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/6424b9cde9edc7f2098115bbfd1ee3d84a958380"
        },
        {
          "url": "https://git.kernel.org/stable/c/83608e303b95d07afba1c15da0b5d9e513c2f15a"
        }
      ],
      "title": "bpf: Compare iterator types during state pruning",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90217",
    "datePublished": "2026-09-17T16:07:29.409Z",
    "dateReserved": "2026-09-11T19:38:34.793Z",
    "dateUpdated": "2026-09-18T17:53:48.672Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-90217",
      "date": "2026-09-25",
      "epss": "0.00165",
      "percentile": "0.05085"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "kernel/bpf/states.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "6424b9cde9edc7f2098115bbfd1ee3d84a958380",
                    "status": "affected",
                    "version": "dfab99df147b0d364f0c199f832ff2aedfb2265a",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "83608e303b95d07afba1c15da0b5d9e513c2f15a",
                    "status": "affected",
                    "version": "dfab99df147b0d364f0c199f832ff2aedfb2265a",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "kernel/bpf/states.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.7"
                  },
                  {
                    "lessThan": "6.7",
                    "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\nbpf: Compare iterator types during state pruning\n\nAn iterator stack slot can be MEM_RCU or PTR_UNTRUSTED. These states\nmust not be equal, or the verifier can prune an unsafe path.\n\nCompare the pointer type for STACK_ITER slots."
          }
        ],
        "id": "CVE-2026-90217",
        "lastModified": "2026-09-18T18:17:46.850",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/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:17.033",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/6424b9cde9edc7f2098115bbfd1ee3d84a958380"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/83608e303b95d07afba1c15da0b5d9e513c2f15a"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    }
  }
}



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…