{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-37750", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T04:51:23.937Z", "datePublished": "2025-05-01T12:55:55.988Z", "dateUpdated": "2026-08-05T11:57:14.838Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:57:14.838Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsmb: client: fix UAF in decryption with multichannel\n\nAfter commit f7025d861694 (\"smb: client: allocate crypto only for\nprimary server\") and commit b0abcd65ec54 (\"smb: client: fix UAF in\nasync decryption\"), the channels started reusing AEAD TFM from primary\nchannel to perform synchronous decryption, but that can't done as\nthere could be multiple cifsd threads (one per channel) simultaneously\naccessing it to perform decryption.\n\nThis fixes the following KASAN splat when running fstest generic/249\nwith 'vers=3.1.1,multichannel,max_channels=4,seal' against Windows\nServer 2022:\n\nBUG: KASAN: slab-use-after-free in gf128mul_4k_lle+0xba/0x110\nRead of size 8 at addr ffff8881046c18a0 by task cifsd/986\nCPU: 3 UID: 0 PID: 986 Comm: cifsd Not tainted 6.15.0-rc1 #1\nPREEMPT(voluntary)\nHardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-3.fc41\n04/01/2014\nCall Trace:\n \n dump_stack_lvl+0x5d/0x80\n print_report+0x156/0x528\n ? gf128mul_4k_lle+0xba/0x110\n ? __virt_addr_valid+0x145/0x300\n ? __phys_addr+0x46/0x90\n ? gf128mul_4k_lle+0xba/0x110\n kasan_report+0xdf/0x1a0\n ? gf128mul_4k_lle+0xba/0x110\n gf128mul_4k_lle+0xba/0x110\n ghash_update+0x189/0x210\n shash_ahash_update+0x295/0x370\n ? __pfx_shash_ahash_update+0x10/0x10\n ? __pfx_shash_ahash_update+0x10/0x10\n ? __pfx_extract_iter_to_sg+0x10/0x10\n ? ___kmalloc_large_node+0x10e/0x180\n ? __asan_memset+0x23/0x50\n crypto_ahash_update+0x3c/0xc0\n gcm_hash_assoc_remain_continue+0x93/0xc0\n crypt_message+0xe09/0xec0 [cifs]\n ? __pfx_crypt_message+0x10/0x10 [cifs]\n ? _raw_spin_unlock+0x23/0x40\n ? __pfx_cifs_readv_from_socket+0x10/0x10 [cifs]\n decrypt_raw_data+0x229/0x380 [cifs]\n ? __pfx_decrypt_raw_data+0x10/0x10 [cifs]\n ? __pfx_cifs_read_iter_from_socket+0x10/0x10 [cifs]\n smb3_receive_transform+0x837/0xc80 [cifs]\n ? __pfx_smb3_receive_transform+0x10/0x10 [cifs]\n ? __pfx___might_resched+0x10/0x10\n ? __pfx_smb3_is_transform_hdr+0x10/0x10 [cifs]\n cifs_demultiplex_thread+0x692/0x1570 [cifs]\n ? __pfx_cifs_demultiplex_thread+0x10/0x10 [cifs]\n ? rcu_is_watching+0x20/0x50\n ? rcu_lockdep_current_cpu_online+0x62/0xb0\n ? find_held_lock+0x32/0x90\n ? kvm_sched_clock_read+0x11/0x20\n ? local_clock_noinstr+0xd/0xd0\n ? trace_irq_enable.constprop.0+0xa8/0xe0\n ? __pfx_cifs_demultiplex_thread+0x10/0x10 [cifs]\n kthread+0x1fe/0x380\n ? kthread+0x10f/0x380\n ? __pfx_kthread+0x10/0x10\n ? local_clock_noinstr+0xd/0xd0\n ? ret_from_fork+0x1b/0x60\n ? local_clock+0x15/0x30\n ? lock_release+0x29b/0x390\n ? rcu_is_watching+0x20/0x50\n ? __pfx_kthread+0x10/0x10\n ret_from_fork+0x31/0x60\n ? __pfx_kthread+0x10/0x10\n ret_from_fork_asm+0x1a/0x30\n " } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL" }, "scenarios": [ { "lang": "en", "value": "AV:N - The vulnerable decryption path is driven entirely by SMB3 transform PDUs received over TCP from the remote server, processed in the per-channel `cifsd` demultiplex thread; a malicious or compromised file server can additionally force the encrypted path on via `SMB2_SESSION_FLAG_ENCRYPT_DATA`/`SHI1005_FLAGS_ENCRYPT_DATA` and control response timing across all channels.\nAC:L - The attacker controls both sides of the race — it chooses when to release encrypted responses on each of the N channels, and each response unconditionally calls `crypto_aead_setkey()` on the shared TFM; the race reproduced immediately under an ordinary fstest run against a stock Windows server, so no condition beyond the attacker's control is required.\nPR:N - The attacker is the remote SMB peer and holds no credentials or account on the victim client; nothing on the path from socket receive to `crypt_message()` performs any capability or privilege check. The same corruption is also reachable by a wholly unprivileged local user issuing parallel I/O on the mount.\nUI:N - The mount is pre-existing deployment configuration (typically fstab/automount at boot), and once established the server triggers the bug purely by responding on multiple channels — no victim action is needed at attack time.\nS:U - The corruption is confined to the kernel heap of the client host; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - The UAF reads a freed kmalloc-4k `gf128mul_4k` table whose contents feed GHASH output transmitted to the server, and the concurrent `setkey` causes cross-session key confusion so data can be processed under another session's encryption key; a double-free of a 4K slab object further yields overlapping-allocation read primitives.\nI:H - Two concurrent `ghash_setkey()` calls can double-free the same `ctx->gf128` object, corrupting the kmalloc-4k freelist and giving two owners of one allocation — a well-established route to arbitrary write and control-flow hijack; plaintext may also be encrypted under the wrong session key.\nA:H - The use-after-free and double-free corrupt slab metadata, producing oopses and panics (the reported KASAN slab-use-after-free); even absent full corruption, garbage GHASH state causes authentication-tag mismatches that tear down the connection into a reconnect loop." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/smb/client/cifsencrypt.c", "fs/smb/client/smb2ops.c", "fs/smb/client/smb2pdu.c" ], "versions": [ { "version": "b0abcd65ec545701b8793e12bc27dc98042b151a", "lessThan": "aa5a1e4b882964eb79d5b5d1d1e8a1a5efbb1d15", "status": "affected", "versionType": "git" }, { "version": "b0abcd65ec545701b8793e12bc27dc98042b151a", "lessThan": "e859b216d94668bc66330e61be201234f4413d1a", "status": "affected", "versionType": "git" }, { "version": "b0abcd65ec545701b8793e12bc27dc98042b151a", "lessThan": "950557922c1298464749c216d8763e97faf5d0a6", "status": "affected", "versionType": "git" }, { "version": "b0abcd65ec545701b8793e12bc27dc98042b151a", "lessThan": "9502dd5c7029902f4a425bf959917a5a9e7c0e50", "status": "affected", "versionType": "git" }, { "version": "8f14a476abba13144df5434871a7225fd29af633", "status": "affected", "versionType": "git" }, { "version": "ef51c0d544b1518b35364480317ab6d3468f205d", "status": "affected", "versionType": "git" }, { "version": "bce966530fd5542bbb422cb45ecb775f7a1a6bc3", "status": "affected", "versionType": "git" }, { "version": "0809fb86ad13b29e1d6d491364fc7ea4fb545995", "status": "affected", "versionType": "git" }, { "version": "538c26d9bf70c90edc460d18c81008a4e555925a", "status": "affected", "versionType": "git" }, { "version": "5.10.237", "lessThan": "5.11", "status": "affected", "versionType": "semver" }, { "version": "5.15.181", "lessThan": "5.16", "status": "affected", "versionType": "semver" }, { "version": "6.1.128", "lessThan": "6.2", "status": "affected", "versionType": "semver" }, { "version": "6.6.57", "lessThan": "6.7", "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": [ "fs/smb/client/cifsencrypt.c", "fs/smb/client/smb2ops.c", "fs/smb/client/smb2pdu.c" ], "versions": [ { "version": "6.12", "status": "affected" }, { "version": "0", "lessThan": "6.12", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.24", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.13.12", "lessThanOrEqual": "6.13.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.14.3", "lessThanOrEqual": "6.14.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.15", "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": "6.12", "versionEndExcluding": "6.12.24" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.12", "versionEndExcluding": "6.13.12" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.12", "versionEndExcluding": "6.14.3" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.12", "versionEndExcluding": "6.15" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.10.237" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.15.181" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.1.128" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.6.57" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.11.4" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/aa5a1e4b882964eb79d5b5d1d1e8a1a5efbb1d15" }, { "url": "https://git.kernel.org/stable/c/e859b216d94668bc66330e61be201234f4413d1a" }, { "url": "https://git.kernel.org/stable/c/950557922c1298464749c216d8763e97faf5d0a6" }, { "url": "https://git.kernel.org/stable/c/9502dd5c7029902f4a425bf959917a5a9e7c0e50" } ], "title": "smb: client: fix UAF in decryption with multichannel", "x_generator": { "engine": "bippy-1.2.0" } } } }