CVE-2026-99220
NoneCVSS
—
EPSS
0.1%
Published
Nov 2, 2026
CISA due date
—
Cloudanix analysis
A bug in the Linux kernel lets any local user crash the whole computer by performing certain key-management operations, forcing a reboot and interrupting everything running on the machine.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Unconditional dereference of a NULL asym_key_ids slot left empty by the PKCS#8 parser inside key_or_keyring_common, resulting in a kernel NULL pointer dereference and panic when an unprivileged process invokes KEYCTL_RESTRICT_KEYRING followed by add_key.
Why it matters to the business
Local denial-of-service that crashes the entire system; any unprivileged account can trigger a kernel panic, halting all workloads until reboot and potentially disrupting availability of services running on the host.
How an attack unfolds
An attacker with local unprivileged access supplies a PKCS#8 private key to a key_or_keyring restriction via the keyctl syscall, then calls add_key; both plain and :chain restriction forms reach the unconditional dereference in key_or_keyring_common, causing an immediate general protection fault and kernel panic.
How to fix it
Apply the upstream fix that rejects asymmetric restriction keys lacking key IDs before they reach key_or_keyring_common; rebuild and deploy the patched kernel across all affected distributions; until patches are available, restrict unprivileged use of KEYCTL_RESTRICT_KEYRING via LSM or seccomp filters where feasible.
How to confirm the fix worked
Confirm the patched kernel contains the check that returns an error for PKCS#8 keys without IDs in key_or_keyring_common; attempt the original KEYCTL_RESTRICT_KEYRING + add_key sequence from an unprivileged context and verify it now fails safely instead of dereferencing NULL.
Typical attack path
- Obtain local unprivileged shell or process on the target Linux system
- Craft or load a PKCS#8-formatted asymmetric key without key IDs
- Invoke KEYCTL_RESTRICT_KEYRING on the key (plain or :chain form)
- Call add_key to trigger the NULL dereference path
- Observe kernel oops and panic
How to detect it
Search kernel logs (dmesg, journalctl, /var/log/kern.log) for the signature strings from the oops: 'key_or_keyring_common', 'general protection fault', 'null-ptr-deref', and the call trace involving __key_create_or_update and __do_sys_add_key.
- key_or_keyring_common (crypto/asymmetric_keys/restrict.c
- KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
- RIP: 0010:key_or_keyring_common
- Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000
- __do_sys_add_key (security/keys/keyctl.c:134)
What your security team should do
- Immediately schedule kernel updates for all Linux hosts once fixed packages are released
- Audit systems for any custom key-restriction workflows that might rely on PKCS#8 trust anchors
- Consider temporary seccomp or LSM policies blocking KEYCTL_RESTRICT_KEYRING for untrusted users until patched
- Monitor for kernel oops reports containing key_or_keyring_common in the call stack
The record
In the Linux kernel, the following vulnerability has been resolved: asymmetric_keys: reject trust keys without IDs The PKCS#8 parser deliberately leaves the asym_key_ids payload slot empty. key_or_keyring_common() unconditionally dereferences that slot when a PKCS#8 key is supplied to a key_or_keyring restriction. Both the plain and :chain forms reach this branch, allowing an unprivileged caller to trigger a NULL pointer dereference through KEYCTL_RESTRICT_KEYRING followed by add_key(). Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000 KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007] RIP: 0010:key_or_keyring_common (crypto/asymmetric_keys/restrict.c:205 crypto/asymmetric_keys/restrict.c:279) Call Trace: <TASK> __key_create_or_update (security/keys/key.c:884) key_create_or_update (security/keys/key.c:1021) __do_sys_add_key (security/keys/keyctl.c:134) do_syscall_64 (arch/x86/entry/common.c:52 arch/x86/entry/common.c:83) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130) </TASK> Kernel panic - not syncing: Fatal exception Reject an asymmetric restriction key without key IDs. A PKCS#8 private key cannot identify the signer of a candidate certificate and is not a valid trust anchor.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|