| タイトル | LinaroのOP-TEE Trusted OSにおける解放済みメモリの使用に関する脆弱性 |
|---|---|
| 概要 | 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で修正されています。 |
| 想定される影響 | ・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 ・当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 ・当該ソフトウェアが完全に停止する可能性があります。 |
| 対策 | ベンダ情報を参照して適切な対策を実施してください。 |
| 公表日 | 2026年6月3日0:00 |
| 登録日 | 2026年6月8日11:47 |
| 最終更新日 | 2026年6月8日11:47 |
| CVSS3.0 : 重要 | |
| スコア | 7.8 |
|---|---|
| ベクター | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Linaro |
| OP-TEE Trusted OS 3.16.0 から 4.10.0 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年06月08日] 掲載 |
2026年6月8日11:47 |
| 概要 | 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. |
|---|---|
| 公表日 | 2026年6月4日3:16 |
| 登録日 | 2026年6月4日4:16 |
| 最終更新日 | 2026年6月6日5:20 |
| 構成1 | 以上 | 以下 | より上 | 未満 | |
| cpe:2.3:o:trustedfirmware:op-tee:*:*:*:*:*:*:*:* | 3.16.0 | 4.10.0 | |||