{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-46690", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-09-11T15:12:18.249Z", "datePublished": "2024-09-13T05:29:20.368Z", "dateUpdated": "2026-08-05T11:37:58.898Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:37:58.898Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: fix nfsd4_deleg_getattr_conflict in presence of third party lease\n\nIt is not safe to dereference fl->c.flc_owner without first confirming\nfl->fl_lmops is the expected manager. nfsd4_deleg_getattr_conflict()\ntests fl_lmops but largely ignores the result and assumes that flc_owner\nis an nfs4_delegation anyway. This is wrong.\n\nWith this patch we restore the \"!= &nfsd_lease_mng_ops\" case to behave\nas it did before the change mentioned below. This is the same as the\ncurrent code, but without any reference to a possible delegation." } ], "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 function is in the in-kernel NFS server and is reached purely by an NFSv4 COMPOUND GETATTR requesting the change or size attribute over TCP port 2049. No local access to the server is required to drive the confused dereference.\nAC:L - The trigger (GETATTR for size/change on a chosen file) is issued at will and repeatably, and the required non-nfsd F_WRLCK lease is attacker-creatable in the standard multiprotocol NAS deployment the commit describes — the same tree exported via Samba, which takes fcntl(F_SETLEASE, F_WRLCK) kernel oplocks on behalf of an SMB client. The attacker therefore controls both the precondition and the trigger; no timing window or unknowable memory state must be guessed.\nPR:N - NFS AUTH_SYS verifies no credentials — any host permitted by the export list simply asserts a uid, and CVSS does not treat network-level export ACLs as a privilege. Issuing a GETATTR for size/change requires nothing beyond a mount of an ordinary export.\nUI:N - The attacker drives both the lease-establishing open and the GETATTR itself; no action by any legitimate user or administrator is needed.\nS:U - The type confusion corrupts kernel slab memory within the same security authority as the nfsd server; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - `*size = ncf->ncf_cur_fsize` reads 8 bytes roughly 400 bytes past the end of the 232-byte struct file and encodes them into the FATTR4_SIZE field of the GETATTR reply, directly disclosing adjacent kernel heap contents to the remote client, on top of the OOB pointer reads of `cb_clp`/`cb_ops`.\nI:H - The path performs multiple out-of-bounds writes into the neighbouring slab object (`test_and_set_bit` on ncf_cb_flags, the u32 ncf_cb_status store, the u64 ncf_cur_fsize store, the ncf_file_modified byte) plus a refcount_inc over struct file's first word, and reaches an indirect call through `s->sc_free` and `cb->cb_ops` read from confused/OOB memory — a groomable control-flow hijack primitive.\nA:H - `nfsd4_run_cb()` dereferences `clp` read from out-of-bounds memory and calls queue_work() on an uninitialized work_struct, and nfs4_put_stid() spin_locks a garbage pointer, so a single GETATTR reliably oopses or panics the NFS file server and can be repeated at will." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/nfsd/nfs4state.c" ], "versions": [ { "version": "c5967721e1063648b0506481585ba7e2e49a075e", "lessThan": "1b46a871e980e3daa16fd5e77539966492e8910a", "status": "affected", "versionType": "git" }, { "version": "c5967721e1063648b0506481585ba7e2e49a075e", "lessThan": "40927f3d0972bf86357a32a5749be71a551241b6", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/nfsd/nfs4state.c" ], "versions": [ { "version": "6.9", "status": "affected" }, { "version": "0", "lessThan": "6.9", "status": "unaffected", "versionType": "semver" }, { "version": "6.10.8", "lessThanOrEqual": "6.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.11", "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.9", "versionEndExcluding": "6.10.8" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.9", "versionEndExcluding": "6.11" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/1b46a871e980e3daa16fd5e77539966492e8910a" }, { "url": "https://git.kernel.org/stable/c/40927f3d0972bf86357a32a5749be71a551241b6" } ], "title": "nfsd: fix nfsd4_deleg_getattr_conflict in presence of third party lease", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "metrics": [ { "other": { "type": "ssvc", "content": { "timestamp": "2024-09-29T15:07:08.535058Z", "id": "CVE-2024-46690", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "role": "CISA Coordinator", "version": "2.0.3" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-09-29T15:07:22.328Z" } } ] } }