CVE-2026-98952 (GCVE-0-2026-98952)

Vulnerability from cvelistv5 – Published: 2026-10-23 12:19 – Updated: 2026-10-24 14:09
VLAI
Title
pfcp: make sure the SEID is linear before reading it
Summary
In the Linux kernel, the following vulnerability has been resolved: pfcp: make sure the SEID is linear before reading it pfcp_encap_recv() only makes sure that the UDP header and the 4 byte PFCP header are in the linear area. When the S flag is set, pfcp_session_recv() then reads the 8 byte SEID that follows, which is not covered by the pskb_may_pull() check. A short PFCP packet with the S flag set, or one whose session header lies in a fragment, therefore makes pfcp_session_recv() read beyond the end of the packet data, and whatever it finds there is stored in the tunnel metadata that flower later classifies on. Pull up to the end of the SEID before reading it, and drop packets that are too short to contain it. Reload the header pointer afterwards since pskb_may_pull() may reallocate the skb head. Use offsetofend() rather than sizeof(struct pfcphdr_session): the structure is not packed, so its size is 16 bytes because of the alignment of the __be64 member, while the header on the wire is only 12 bytes, and valid session messages would be dropped.
Assigner
Linux CNA under the mitre root
CNA scorecard D 53/100 over 6971 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 6dd514f48110ebb4bf36875b9e7e02d07b589caa , < 3192a5e398c64d48aad64a09e29643e327369bc4 (git)
Affected: 6dd514f48110ebb4bf36875b9e7e02d07b589caa , < b18a6496495495e2dc27e525aa3315a0c59b9513 (git)
Affected: 6dd514f48110ebb4bf36875b9e7e02d07b589caa , < 2fb6d05f706d79bbdc88835be2f4f45ab56dd819 (git)
Affected: 6dd514f48110ebb4bf36875b9e7e02d07b589caa , < 23609bce9e1de525d1d0e73fc68c6e7971d0b49e (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.10
Unaffected: 0 , < 6.10 (semver)
Unaffected: 6.12.113 , ≤ 6.12.* (semver)
Unaffected: 6.18.57 , ≤ 6.18.* (semver)
Unaffected: 7.2.11 , ≤ 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": [
            "drivers/net/pfcp.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "3192a5e398c64d48aad64a09e29643e327369bc4",
              "status": "affected",
              "version": "6dd514f48110ebb4bf36875b9e7e02d07b589caa",
              "versionType": "git"
            },
            {
              "lessThan": "b18a6496495495e2dc27e525aa3315a0c59b9513",
              "status": "affected",
              "version": "6dd514f48110ebb4bf36875b9e7e02d07b589caa",
              "versionType": "git"
            },
            {
              "lessThan": "2fb6d05f706d79bbdc88835be2f4f45ab56dd819",
              "status": "affected",
              "version": "6dd514f48110ebb4bf36875b9e7e02d07b589caa",
              "versionType": "git"
            },
            {
              "lessThan": "23609bce9e1de525d1d0e73fc68c6e7971d0b49e",
              "status": "affected",
              "version": "6dd514f48110ebb4bf36875b9e7e02d07b589caa",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/net/pfcp.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.10"
            },
            {
              "lessThan": "6.10",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.113",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.57",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.11",
              "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.12.113",
                  "versionStartIncluding": "6.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.57",
                  "versionStartIncluding": "6.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.11",
                  "versionStartIncluding": "6.10",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "6.10",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\npfcp: make sure the SEID is linear before reading it\n\npfcp_encap_recv() only makes sure that the UDP header and the 4 byte\nPFCP header are in the linear area. When the S flag is set,\npfcp_session_recv() then reads the 8 byte SEID that follows, which is\nnot covered by the pskb_may_pull() check.\n\nA short PFCP packet with the S flag set, or one whose session header\nlies in a fragment, therefore makes pfcp_session_recv() read beyond the\nend of the packet data, and whatever it finds there is stored in the\ntunnel metadata that flower later classifies on.\n\nPull up to the end of the SEID before reading it, and drop packets\nthat are too short to contain it. Reload the header pointer afterwards\nsince pskb_may_pull() may reallocate the skb head.\n\nUse offsetofend() rather than sizeof(struct pfcphdr_session): the\nstructure is not packed, so its size is 16 bytes because of the\nalignment of the __be64 member, while the header on the wire is only 12\nbytes, and valid session messages would be dropped."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.3,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:N - pfcp_create_sock() binds an unconnected AF_INET socket to INADDR_ANY:8805; an IPv4 PFCP request setting PFCP_SEID_FLAG follows udp_rcv() \u2192 udp_queue_rcv_one_skb() \u2192 pfcp_encap_recv() \u2192 pfcp_session_recv(), so the bytes causing the over-read arrive in a routable UDP message.\nAC:L - A sender needs only a 12\u201319-byte UDP/PFCP packet with PFCP_SEID_FLAG set, or a fragmented packet leaving the SEID non-linear; the original pskb_may_pull() covers only PFCP_HLEN, so pfcp_session_recv() deterministically reads the unpulled field without a race.\nPR:N - udp_sock_create4() binds PFCP_PORT without restricting a peer, and udp_queue_rcv_one_skb() invokes pfcp_encap_recv() after only packet-policy and checksum checks; neither it nor pfcp_session_recv() authenticates the sender. CAP_NET_ADMIN is needed only to configure the listening device.\nUI:N - pfcp_encap_recv() executes automatically in the UDP receive path when the crafted PFCP request reaches port 8805; no victim action is required after the PFCP interface is configured.\nS:U - The over-read, resulting per-skb tunnel metadata, and flower classification remain within the host kernel\u0027s networking security authority; no VM, IOMMU, or other authority boundary is crossed.\nC:L - pfcp_session_recv() copies exactly eight stale bytes beyond the short or non-linear packet data into pfcp_metadata.seid; fl_classify() then uses that value as an SEID key, permitting a bounded classification oracle rather than arbitrary-memory disclosure.\nI:L - The stale md-\u003eseid is copied by skb_flow_dissect_tunnel_info() into the flower key used by fl_classify(), so a session packet can take the wrong drop, redirect, or other action. There is no out-of-bounds write or control-flow primitive.\nA:L - The eight-byte read remains in allocated skb tailroom or skb_shared_info rather than furnishing a production-kernel fault; however, the false SEID can make fl_classify() drop or misdirect valid fragmented PFCP requests, limiting availability impact to packet or service degradation."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-24T14:09:37.815Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/3192a5e398c64d48aad64a09e29643e327369bc4"
        },
        {
          "url": "https://git.kernel.org/stable/c/b18a6496495495e2dc27e525aa3315a0c59b9513"
        },
        {
          "url": "https://git.kernel.org/stable/c/2fb6d05f706d79bbdc88835be2f4f45ab56dd819"
        },
        {
          "url": "https://git.kernel.org/stable/c/23609bce9e1de525d1d0e73fc68c6e7971d0b49e"
        }
      ],
      "title": "pfcp: make sure the SEID is linear before reading it",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-98952",
    "datePublished": "2026-10-23T12:19:12.127Z",
    "dateReserved": "2026-09-25T10:25:14.382Z",
    "dateUpdated": "2026-10-24T14:09:37.815Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-98952",
      "date": "2026-11-02",
      "epss": "0.00377",
      "percentile": "0.31658"
    },
    "microsoft_vex": {
      "current_release_date": "2026-10-24T01:09:31.000Z",
      "cve": "CVE-2026-98952",
      "id": "msrc_CVE-2026-98952",
      "initial_release_date": "2026-10-24T01:09:31.000Z",
      "product_status:under_investigation": "1",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "pfcp: make sure the SEID is linear before reading it",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-98952.json",
      "version": "1"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/net/pfcp.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "3192a5e398c64d48aad64a09e29643e327369bc4",
                    "status": "affected",
                    "version": "6dd514f48110ebb4bf36875b9e7e02d07b589caa",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "b18a6496495495e2dc27e525aa3315a0c59b9513",
                    "status": "affected",
                    "version": "6dd514f48110ebb4bf36875b9e7e02d07b589caa",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "2fb6d05f706d79bbdc88835be2f4f45ab56dd819",
                    "status": "affected",
                    "version": "6dd514f48110ebb4bf36875b9e7e02d07b589caa",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "23609bce9e1de525d1d0e73fc68c6e7971d0b49e",
                    "status": "affected",
                    "version": "6dd514f48110ebb4bf36875b9e7e02d07b589caa",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/net/pfcp.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.10"
                  },
                  {
                    "lessThan": "6.10",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.113",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.57",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.11",
                    "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\npfcp: make sure the SEID is linear before reading it\n\npfcp_encap_recv() only makes sure that the UDP header and the 4 byte\nPFCP header are in the linear area. When the S flag is set,\npfcp_session_recv() then reads the 8 byte SEID that follows, which is\nnot covered by the pskb_may_pull() check.\n\nA short PFCP packet with the S flag set, or one whose session header\nlies in a fragment, therefore makes pfcp_session_recv() read beyond the\nend of the packet data, and whatever it finds there is stored in the\ntunnel metadata that flower later classifies on.\n\nPull up to the end of the SEID before reading it, and drop packets\nthat are too short to contain it. Reload the header pointer afterwards\nsince pskb_may_pull() may reallocate the skb head.\n\nUse offsetofend() rather than sizeof(struct pfcphdr_session): the\nstructure is not packed, so its size is 16 bytes because of the\nalignment of the __be64 member, while the header on the wire is only 12\nbytes, and valid session messages would be dropped."
          }
        ],
        "id": "CVE-2026-98952",
        "lastModified": "2026-10-24T14:16:49.163",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "NETWORK",
                "availabilityImpact": "LOW",
                "baseScore": 7.3,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "LOW",
                "integrityImpact": "LOW",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L",
                "version": "3.1"
              },
              "exploitabilityScore": 3.9,
              "impactScore": 3.4,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-10-23T13:17:16.370",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/23609bce9e1de525d1d0e73fc68c6e7971d0b49e"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/2fb6d05f706d79bbdc88835be2f4f45ab56dd819"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/3192a5e398c64d48aad64a09e29643e327369bc4"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/b18a6496495495e2dc27e525aa3315a0c59b9513"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Important",
      "current_release_date": "2026-11-02T15:07:53+00:00",
      "cve": "CVE-2026-98952",
      "id": "CVE-2026-98952",
      "initial_release_date": "2026-10-23T00:00:00+00:00",
      "product_status:known_not_affected": "279",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: pfcp: make sure the SEID is linear before reading it",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-98952.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-10-27T17:59:22Z",
      "cve": "CVE-2026-98952",
      "id": "CVE-2026-98952",
      "initial_release_date": "2026-10-27T17:59:22Z",
      "product_status:known_affected": "0",
      "product_status:known_not_affected": "348",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-98952",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/2026/cve-2026-98952.json",
      "version": "2"
    }
  }
}



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.