製品・ソフトウェアに関する情報
LinaroのOP-TEE Trusted OSにおける解放済みメモリの使用に関する脆弱性
Title LinaroのOP-TEE Trusted OSにおける解放済みメモリの使用に関する脆弱性
Summary

OP-TEEは、Arm Cortex-AコアでTrustZone技術を使用する非セキュアなLinuxカーネルの補助として設計されたTrusted Execution Environment(TEE)です。バージョン3.16.0から4.11.0未満の間に、OP-TEEのSPMC/SPフロー内のFF-A共有メモリの終了処理ロジックにおいて、ユーザー解放後使用(UAF)レースコンディションが存在します。これはOP-TEEがS-EL0 SPのSPMCとして構成されている場合、すなわち`CFG_SECURE_PARTITION=y`の場合にのみ適用されます。`sp_mem_remove()`関数は、`smem-receivers`および`smem-regions`のエントリを解放する役割を担っていますが、`free()`操作を実行する前にグローバルな`sp_mem_lock`を取得していません。同時に、`sp_mem_get_receiver()`のような他のコードパスはこの同じリストをロックを保持せずに走査し、また`sp_mem_is_shared()`のようにロックを保持して走査しても、保護されていない`sp_mem_remove()`の`free()`操作に対して直列化されていません。これにより、スレッドがリストを走査してエントリ(例:`struct sp_mem_map_region`や`struct sp_mem_receiver`)へのポインタを取得した後、別のスレッドが`sp_mem_remove()`を呼び出してそのオブジェクトを解放するクロススレッドのレース状態が発生します。最初のスレッドが再開してポインタを逆参照すると、Use-After-Freeの脆弱性が生じます。この問題はバージョン4.11.0で修正されています。

Possible impacts ・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 ・当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 ・当該ソフトウェアが完全に停止する可能性があります。 
Solution

ベンダ情報を参照して適切な対策を実施してください。

Publication Date June 3, 2026, midnight
Registration Date June 8, 2026, 11:47 a.m.
Last Update June 8, 2026, 11:47 a.m.
CVSS3.0 : 重要
Score 7.8
Vector CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Affected System
Linaro
OP-TEE Trusted OS 3.16.0 から 4.10.0
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
ベンダー情報
Change Log
No Changed Details Date of change
1 [2026年06月08日]
  掲載
June 8, 2026, 11:47 a.m.

NVD Vulnerability Information
CVE-2026-40290
Summary

OP-TEE is a Trusted Execution Environment (TEE) designed as companion to a non-secure Linux kernel running on Arm; Cortex-A cores using the TrustZone technology. Starting in version 3.16.0 and prior to 4.11.0, a user-after-free (UAF) race condition exists in the shared memory teardown logic of FF-A within OP-TEE SPMC/SP flows. This only applies when OP-TEE is configured as an SPMC for S-EL0 SPs, that is, with `CFG_SECURE_PARTITION=y`. The function `sp_mem_remove()`, responsible for freeing entries in `smem->receivers` and `smem->regions`, fails to acquire the global `sp_mem_lock` before performing the `free()` operations. Concurrently, other code paths, such as `sp_mem_get_receiver()`, iterate over these same lists without holding a lock, or, like `sp_mem_is_shared()`, iterate while holding the lock but are not serialized against the unprotected `free()` in `sp_mem_remove()`. This creates a cross-thread race where a thread iterating the list can acquire a pointer to an entry (e.g., `struct sp_mem_map_region` or `struct sp_mem_receiver`), and then another thread calls `sp_mem_remove()`, freeing the object. When the first thread resumes and dereferences the pointer, it results in a Use-After-Free vulnerability. Version 4.11.0 fixes the issue.

Publication Date June 4, 2026, 3:16 a.m.
Registration Date June 4, 2026, 4:16 a.m.
Last Update June 6, 2026, 5:20 a.m.
Affected software configurations
Configuration1 or higher or less more than less than
cpe:2.3:o:trustedfirmware:op-tee:*:*:*:*:*:*:*:* 3.16.0 4.10.0
Related information, measures and tools
Common Vulnerabilities List