CVE-2026-98775
NoneCVSS
—
EPSS
0.2%
Published
Oct 18, 2026
CISA due date
—
Cloudanix analysis
A bug in the code that manages secure enclaves on Linux could let a local user crash the whole system or potentially run code they should not be allowed to run.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Low
What it actually does
Use-after-free in nitro_enclaves when ne_create_vm_ioctl fails after anon_inode_getfile succeeds; fput defers release via task_work so ne_enclave_release dereferences the already-freed ne_enclave->slot_uid (or private_data) before the error path can clean up.
Why it matters to the business
Local kernel memory corruption or crash on systems that create Nitro enclaves; can cause denial of service and, in theory, local privilege escalation on unpatched kernels.
How an attack unfolds
An attacker with the ability to invoke ne_create_vm_ioctl repeatedly forces a SLOT_ALLOC failure after the anonymous inode file has been allocated; the buggy error path performs fput then frees the enclave object while task_work still holds a reference, triggering the use-after-free on release.
How to fix it
Update to a Linux kernel containing the fix that clears enclave_file->private_data before fput on the error path; rebuild and reboot with the corrected kernel. No downstream package versions are listed.
How to confirm the fix worked
Confirm the patch is present by inspecting the ne_create_vm_ioctl error path for the private_data = NULL assignment; re-run the provided KASAN reproducer and verify absence of slab-use-after-free reports.
Typical attack path
- Obtain local access on a system with nitro_enclaves enabled
- Invoke ne_create_vm_ioctl in a loop to trigger SLOT_ALLOC failures after anon_inode_getfile
- Trigger the error path that calls fput then kfree on ne_enclave
- Cause ne_enclave_release to run via task_work and dereference the freed object
How to detect it
Search kernel logs and KASAN reports for "slab-use-after-free" together with "ne_enclave_release"; monitor for repeated ne_create_vm_ioctl failures followed by crashes in the enclave teardown path.
- KASAN: slab-use-after-free in ne_enclave_release
- ne_enclave->slot_uid
- ne_create_vm_ioctl.*SLOT_ALLOC
What your security team should do
- Apply the upstream kernel fix as soon as a distribution package is available
- Restrict untrusted local users from loading or exercising the nitro_enclaves driver until patched
- Enable KASAN or similar debug kernels on test systems that exercise enclave creation
The record
In the Linux kernel, the following vulnerability has been resolved: nitro_enclaves: fix use-after-free on SLOT_ALLOC failure When ne_create_vm_ioctl() fails the SLOT_ALLOC request after anon_inode_getfile() has succeeded, the error path calls fput(enclave_file) and then frees ne_enclave. In normal userspace context, fput() defers the final __fput() via task_work. ne_enclave_release() therefore runs after ne_enclave has already been freed and dereferences ne_enclave->slot_uid, causing a use-after-free: KASAN: slab-use-after-free in ne_enclave_release. The enclave has no slot allocated and is not yet linked into the enclaves list on this error path, so ne_enclave_release() is expected to return early when slot_uid is zero. However, reading slot_uid already accesses the freed object. Clear enclave_file->private_data before fput() on the error path. ne_enclave_release() then returns immediately when private_data is NULL, leaving the ioctl error path as the sole owner of ne_enclave. This is safe because the file has not been fd_install()'d yet. Tested on an AWS EC2 m5.2xlarge with CONFIG_KASAN=y. Without the patch, the reproducer triggers a KASAN slab-use-after-free on every SLOT_ALLOC failure. With the patch, no KASAN report is produced and the SLOT_ALLOC error is still returned. Normal enclave creation and teardown are unaffected.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|