Files
vuln-cve/data/2026/97xxx/CVE-2026-97524.json
T

308 lines
16 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-97524",
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"state": "PUBLISHED",
"assignerShortName": "Linux",
"dateReserved": "2026-09-24T16:01:01.152Z",
"datePublished": "2026-09-25T10:21:27.668Z",
"dateUpdated": "2026-10-19T09:08:42.302Z"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-10-19T09:08:42.302Z"
},
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmptcp: avoid unneeded actions on subflow reset\n\nOnce in a blue moon, the mptcp receive path can recursively call\nmptcp_data_ready() via state change under unlucky error conditions, and\nthen try to hold the data lock again.\n\nBreak the recursion loop explicitly checking for the exceptional\ncondition.\n\nAdd a new flag instead of using an existing one like 'closing', to exit\nearly in subflow_state_change(), and explicitly flush the RX queue at\nreset time.\n\nThis avoids unneeded processing to check for available data -- calling\nget_mapping_status() and more on a dying subflow -- but also in error\nreporting and worker scheduling.\n\nNote that we must consume the currently peeked skb before invoking\nmptcp_dss_corruption to avoid consuming it again after the eventual\nreset has freed it."
}
],
"metrics": [
{
"cvssV3_1": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"baseScore": 7.5,
"baseSeverity": "HIGH"
},
"scenarios": [
{
"lang": "en",
"value": "AV:N - A crafted MPTCP DSS option on a received TCP segment is the attacker-controlled input; it is parsed on the established RX path tcp_rcv_established → tcp_data_queue → subflow_data_ready → mptcp_data_ready → __mptcp_move_skbs_from_subflow, which calls mptcp_dss_corruption() and then the patched mptcp_subflow_reset()/subflow_state_change(). MPTCP/TCP is a routable IP protocol.\nAC:L - The peer disables infinite fallback via MP_JOIN (mptcp_subflow_joined(); allow_join_initial_addr_port defaults to 1) or by filling msk->out_of_order_queue, then sends a DSS with data_len shorter than the skb plus another TCP-ofo segment so map_remaining < len in __mptcp_move_skbs_from_subflow() calls mptcp_subflow_reset() while ssk->sk_receive_queue is still occupied, making subflow_state_change() re-enter mptcp_data_ready().\nPR:N - The DSS is processed in TCP receive softirq after an unauthenticated MP_CAPABLE handshake with an IPPROTO_MPTCP listener (or an outbound MPTCP client); no local account, capability, or application credential is checked on the path to mptcp_dss_corruption().\nUI:N - The attacker’s DSS segments are handled entirely in RX softirq on an existing MPTCP connection; no local user mount, file open, or other victim action is required.\nS:U - The recursive mptcp_data_lock hang and subflow teardown stay inside the victim kernel’s network stack; no VM, IOMMU, or sandbox boundary is crossed.\nC:N - The defect is a nested spin_lock_bh on sk->sk_lock.slock from subflow_state_change() back into mptcp_data_ready(); it does not read attacker-chosen kernel memory or leak pointers.\nI:N - Pre-fix tcp_done() does not purge ssk->sk_receive_queue, and the nested mptcp_data_ready() never proceeds past the already-held slock, so there is no use-after-free, write primitive, or control-flow hijack.\nA:H - mptcp_data_ready() already holds mptcp_data_lock (spin_lock_bh on sk->sk_lock.slock) when mptcp_dss_corruption() → mptcp_subflow_reset() → tcp_done() invokes subflow_state_change(), which re-enters mptcp_data_ready() and deadlocks the CPU in softirq (soft lockup)."
}
]
}
],
"affected": [
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "unaffected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"net/mptcp/protocol.c",
"net/mptcp/protocol.h",
"net/mptcp/subflow.c"
],
"versions": [
{
"version": "fde99e972b8f88cebe619241d7aa43d288ef666a",
"lessThan": "6d669c740933124eae3df8cfc15995af9bcc6aba",
"status": "affected",
"versionType": "git"
},
{
"version": "12c1676d598e3b8dd92a033b623b792cc2ea1ec5",
"lessThan": "83a7dcdd2b1060484528da70a643125174d47e5a",
"status": "affected",
"versionType": "git"
},
{
"version": "35668f8ec84f6c944676e48ecc6bbc5fc8e6fe25",
"lessThan": "a370e56024df0b07e3120c45a9773ae123819fd6",
"status": "affected",
"versionType": "git"
},
{
"version": "b8be15d1ae7ea4eedd547c3b3141f592fbddcd30",
"lessThan": "1962841387087970d75ba8b8d4c2aa2d45705e50",
"status": "affected",
"versionType": "git"
},
{
"version": "e32d262c89e2b22cb0640223f953b548617ed8a6",
"lessThan": "4b7abdcb5ba832fafab679f0d998af39cbc99307",
"status": "affected",
"versionType": "git"
},
{
"version": "e32d262c89e2b22cb0640223f953b548617ed8a6",
"lessThan": "b2dbcc1ed48b5ac070a41db4a52aade6823c4df0",
"status": "affected",
"versionType": "git"
},
{
"version": "e32d262c89e2b22cb0640223f953b548617ed8a6",
"lessThan": "ce7e4ede01ed3e47a48c0f1ce1d87bf4864bee9f",
"status": "affected",
"versionType": "git"
},
{
"version": "e32d262c89e2b22cb0640223f953b548617ed8a6",
"lessThan": "2b0f561f21b27c40c91ea4975268a06092bd7e9c",
"status": "affected",
"versionType": "git"
},
{
"version": "8bfd391bde685df7289b928ce8876a3583be4bfb",
"status": "affected",
"versionType": "git"
},
{
"version": "5.10.228",
"lessThan": "5.10.271",
"status": "affected",
"versionType": "semver"
},
{
"version": "5.15.169",
"lessThan": "5.15.222",
"status": "affected",
"versionType": "semver"
},
{
"version": "6.1.113",
"lessThan": "6.1.189",
"status": "affected",
"versionType": "semver"
},
{
"version": "6.6.57",
"lessThan": "6.6.158",
"status": "affected",
"versionType": "semver"
},
{
"version": "6.11.4",
"lessThan": "6.12",
"status": "affected",
"versionType": "semver"
}
]
},
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "affected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"net/mptcp/protocol.c",
"net/mptcp/protocol.h",
"net/mptcp/subflow.c"
],
"versions": [
{
"version": "6.12",
"status": "affected"
},
{
"version": "0",
"lessThan": "6.12",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "5.10.271",
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "5.15.222",
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.1.189",
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.6.158",
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.12.111",
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.18.53",
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "7.2.7",
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "7.3",
"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": "5.10.228",
"versionEndExcluding": "5.10.271"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.15.169",
"versionEndExcluding": "5.15.222"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.1.113",
"versionEndExcluding": "6.1.189"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.6.57",
"versionEndExcluding": "6.6.158"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.12",
"versionEndExcluding": "6.12.111"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.12",
"versionEndExcluding": "6.18.53"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.12",
"versionEndExcluding": "7.2.7"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.12",
"versionEndExcluding": "7.3"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.11.4"
}
]
}
]
}
],
"references": [
{
"url": "https://git.kernel.org/stable/c/6d669c740933124eae3df8cfc15995af9bcc6aba"
},
{
"url": "https://git.kernel.org/stable/c/83a7dcdd2b1060484528da70a643125174d47e5a"
},
{
"url": "https://git.kernel.org/stable/c/a370e56024df0b07e3120c45a9773ae123819fd6"
},
{
"url": "https://git.kernel.org/stable/c/1962841387087970d75ba8b8d4c2aa2d45705e50"
},
{
"url": "https://git.kernel.org/stable/c/4b7abdcb5ba832fafab679f0d998af39cbc99307"
},
{
"url": "https://git.kernel.org/stable/c/b2dbcc1ed48b5ac070a41db4a52aade6823c4df0"
},
{
"url": "https://git.kernel.org/stable/c/ce7e4ede01ed3e47a48c0f1ce1d87bf4864bee9f"
},
{
"url": "https://git.kernel.org/stable/c/2b0f561f21b27c40c91ea4975268a06092bd7e9c"
}
],
"title": "mptcp: avoid unneeded actions on subflow reset",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
}
}