CVE-2026-99277 (GCVE-0-2026-99277)
Vulnerability from cvelistv5 – Published: 2026-11-07 14:08 – Updated: 2026-11-10 16:57
VLAI
EPSS
VEX
Title
ksmbd: hold a connection reference for each session channel
Summary
In the Linux kernel, the following vulnerability has been resolved:
ksmbd: hold a connection reference for each session channel
ksmbd_session_unregister() removes a session from the global and per-
connection tables before dropping the table reference. A concurrent
reference holder can keep the session and its channel list alive after
those removals.
Connection cleanup can no longer find the unpublished session to remove its
channels. Since a channel only stores a raw conn pointer, the connection
can be freed while another session reference holder is still accessing it,
for example during SMB3.1.1 binding or a procfs read.
Take a connection reference when registering a channel and release it on
insertion failure, channel removal, or final session destruction. Keep the
channels and signing keys until the session is destroyed so a response can
still be signed after the session has been unregistered.
Severity
7.5 (High)
Assigner
Linux
CNA
References
Impacted products
2 products
| Vendor | Product | Version | |
|---|---|---|---|
| Linux | Linux |
Affected:
d7fd1f98607f2cd358e583f9548bdf0173090a86 , < 4b333aed69cfc2c8687b86b6a4364a0dffc16dd8
(git)
Affected: d7fd1f98607f2cd358e583f9548bdf0173090a86 , < add8d7fb04efe564193df73581889c62fc0016f1 (git) Affected: c99ea7855124ca1428a1e59c2b4590aaef34eacf (git) Affected: 7.2.8 , < 7.3 (semver) |
|
| Linux | Linux |
Affected:
7.3
Unaffected: 0 , < 7.3 (semver) Unaffected: 7.3.2 , ≤ 7.3.* (semver) Unaffected: 7.4-rc1 , ≤ * (original_commit_for_fix) |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"fs/smb/server/mgmt/user_session.c",
"fs/smb/server/smb2pdu.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "4b333aed69cfc2c8687b86b6a4364a0dffc16dd8",
"status": "affected",
"version": "d7fd1f98607f2cd358e583f9548bdf0173090a86",
"versionType": "git"
},
{
"lessThan": "add8d7fb04efe564193df73581889c62fc0016f1",
"status": "affected",
"version": "d7fd1f98607f2cd358e583f9548bdf0173090a86",
"versionType": "git"
},
{
"status": "affected",
"version": "c99ea7855124ca1428a1e59c2b4590aaef34eacf",
"versionType": "git"
},
{
"lessThan": "7.3",
"status": "affected",
"version": "7.2.8",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"fs/smb/server/mgmt/user_session.c",
"fs/smb/server/smb2pdu.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "7.3"
},
{
"lessThan": "7.3",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.3.*",
"status": "unaffected",
"version": "7.3.2",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.4-rc1",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3.2",
"versionStartIncluding": "7.3",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.4-rc1",
"versionStartIncluding": "7.3",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "7.2.8",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nksmbd: hold a connection reference for each session channel\n\nksmbd_session_unregister() removes a session from the global and per-\nconnection tables before dropping the table reference. A concurrent\nreference holder can keep the session and its channel list alive after\nthose removals.\n\nConnection cleanup can no longer find the unpublished session to remove its\nchannels. Since a channel only stores a raw conn pointer, the connection\ncan be freed while another session reference holder is still accessing it,\nfor example during SMB3.1.1 binding or a procfs read.\n\nTake a connection reference when registering a channel and release it on\ninsertion failure, channel removal, or final session destruction. Keep the\nchannels and signing keys until the session is destroyed so a response can\nstill be signed after the session has been unregistered."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.5,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:N - register_session_channel() runs from smb2_sess_setup() after ksmbd_conn_handler_loop() queues an SMB2 SESSION_SETUP read from the TCP socket. That command stores the connection in chann-\u003econn without a reference; a later failing SESSION_SETUP calls ksmbd_session_unregister(), and ksmbd_conn_free() can free it while the channel still points at it.\nAC:H - ksmbd_session_unregister() drops an established session only after session_setup_reauth sets SMB2_SESSION_IN_PROGRESS because sess-\u003ekerberos_expiry has passed. The attacker\u0027s chann-\u003econn-\u003ecipher_type read is smb2_sess_setup()\u0027s SMB 3.1.1 binding arm, entered only when KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL is already set, immediately after ksmbd_session_lookup_slowpath(), with no delay the attacker can hold across __ksmbd_conn_release_work().\nPR:L - register_session_channel() writes chann-\u003econn only after ntlm_authenticate() or krb5_authenticate() succeeds, and the reauth path that unregisters a session which already has channels depends on kerberos_expiry set by ksmbd_krb5_authenticate(). A SESSION_SETUP rejected before authentication stores no channel.\nUI:N - The client sends the SESSION_SETUP that registers the channel, the failing reauth SESSION_SETUP that calls ksmbd_session_unregister(), and the TCP close that reaches ksmbd_server_terminate_conn() and ksmbd_conn_free().\nS:U - The freed object is a ksmbd_conn in the host kernel that serves this SMB session, so the corruption stays in that kernel security authority.\nC:H - __ksmbd_conn_release_work() kfree_sensitive()s the conn while the channel keeps the pointer. smb2_sess_setup() then reads chann-\u003econn-\u003ecipher_type, and show_proc_session() follows chan-\u003econn-\u003evals and inet_addr; reclaiming the slab lets those uses disclose the replacement object.\nI:H - show_proc_session() down_read()s chan-\u003econn-\u003esession_lock through the channel\u0027s raw pointer after the connection can already have been freed, writing the rwsem of whatever reused that slot. The use-after-free of ksmbd_conn is a heap write against that allocation.\nA:H - smb2_sess_setup()\u0027s read of chann-\u003econn-\u003ecipher_type and show_proc_session()\u0027s lock of chan-\u003econn-\u003esession_lock both use the ksmbd_conn after __ksmbd_conn_release_work() freed it, which oopses the kernel."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-10T16:57:40.367Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/4b333aed69cfc2c8687b86b6a4364a0dffc16dd8"
},
{
"url": "https://git.kernel.org/stable/c/add8d7fb04efe564193df73581889c62fc0016f1"
}
],
"title": "ksmbd: hold a connection reference for each session channel",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-99277",
"datePublished": "2026-11-07T14:08:46.710Z",
"dateReserved": "2026-09-25T10:25:14.405Z",
"dateUpdated": "2026-11-10T16:57:40.367Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
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.
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
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
Loading timeline…
Loading…
Loading…
The MITRE ATT&CK techniques below are AI-generated suggestions, inferred from the description of the
vulnerability by the CIRCL/vulnerability-attack-technique-classification-roberta-base
model, served locally by ML-Gateway.
They have not been verified by an analyst and are provided for guidance only.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
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.