ZeroHour

CVE-2026-89763

moderate

Use-after-free in Linux kernel TPM trusted-keys teardown (KEYS: trusted)

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's trusted keys TPM backend contains a race-condition use-after-free in which trusted_tpm_exit() frees the digest array and drops the TPM chip reference before unregistering the 'trusted' key type, so key operations that are still in flight can use freed memory. A local attacker triggers it by racing an add_key() syscall (e.g., sealing a trusted key, which calls tpm_pcr_extend on the digest array) against unloading of the trusted keys module, as confirmed by a KASAN slab-use-after-free report in tpm_pcr_extend. Successful exploitation of the UAF can corrupt kernel memory, with the CVSS 3.1 score (7.8) reflecting high impact to confidentiality, integrity, and availability, though practical exploitation requires a narrow timing window and privileged module-unload activity on the same system. Affected systems are Linux machines whose kernels build the trusted keys TPM backend (CONFIG_TRUSTED_KEYS as a loadable module), particularly those actively using TPM-sealed trusted keys. No public proof of concept is known and the flaw is not in the CISA KEV catalog.

What to do: Apply the updated kernel from your distribution once the fix (reordering unregister_key_type() before releasing the TPM chip and digest array) is included, then reboot. As a mitigation, avoid unloading the trusted-keys module on live systems or set kernel.modules_disabled=1 on hardened hosts, and restrict local untrusted shell access. Watch logs/panic traces for KASAN use-after-free reports in tpm_pcr_extend or crashes in trusted_tpm_seal/pcrlock as indicators of attempted triggering.

Affected
Linux kernel (KEYS: trusted / TPM trusted-keys backend)
Estimated exposure
moderatetens of thousands to low hundreds of thousands of systems actively using TPM-backed trusted keys (the module itself ships in far more distro kernels) — The trusted-keys TPM module is compiled into most major distro kernels, but active use of TPM-sealed trusted keys (EVM/IMA, pcrlock, TPM-bound secrets) is limited mainly to hardened enterprise and infrastructure deployments, and…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: KEYS: trusted: Fix TPM teardown ordering trusted_tpm_exit() drops the TPM chip reference and frees the digest array before unregistering the trusted key type. key_type_lookup() holds key_types_sem for reading until the key operation finishes, while unregister_key_type() takes it for writing. It therefore provides the synchronization point that must precede backend teardown. The current order permits this interleaving: CPU 0 CPU 1 trusted_tpm_exit() key_type_lookup("trusted") put_device(&chip->dev) trusted_tpm_seal() kfree(digests) pcrlock() unregister_key_type() tpm_pcr_extend(..., digests) CPU 1 can consequently dereference the freed digest array. The chip can also be released before callbacks stop using it. KASAN reported: BUG: KASAN: slab-use-after-free in tpm_pcr_extend+0x1f0/0x200 Read of size 2 at addr ffff88810872d000 by task poc/89 Call Trace: tpm_pcr_extend+0x1f0/0x200 pcrlock+0x42/0x70 [trusted] trusted_tpm_seal+0x1b6/0x570 [trusted] trusted_instantiate+0x293/0x340 [trusted] __key_instantiate_and_link+0xb2/0x2b0 __key_create_or_update+0x61e/0xb50 __do_sys_add_key+0x1b8/0x310 Allocated by task 88: __kmalloc_noprof+0x1a7/0x490 do_one_initcall+0xa1/0x390 do_init_module+0x2df/0x840 Freed by task 90: kfree+0x131/0x3c0 trusted_tpm_exit+0x59/0xa0 [trusted] __do_sys_delete_module+0x346/0x510 Move unregister_key_type() before releasing either resource. This stops new lookups and waits for in-flight key operations to finish before the backend state is destroyed.

Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

In the news

No ingested article mentions this CVE yet.