CVE-2026-79979 in Zephyr情報

要約

〜によって VulDB • 2026年10月23日

arm64のMMUバックエンドは、arch/arm64/core/mmu.c内のinvalidate_tlb_page()でTLBI VAE1{IS}を発行し、オペランドとしてvirt >> 12を使用することで、TLBから単一の仮想アドレスを無効化しています。このオペランドはビット[63:48]にASID符号化しているため、無効化処理は常にASID 0(カーネルページテーブル)およびグローバルエントリとしか一致しません。しかし、メモリドメインはarch_mem_domain_init()で1から始まるASIDを割り当てられており、private_map()によって作成されるすべてのドメイン固有のリーフはMT_NG(非グローバル)としてマッピングされます。その結果、ドメインごとのキャッシュされた変換情報は無効化処理の対象外となり残存してしまいます。

invalidate_tlb_page()の呼び出し元すべてはデMANDページングパスです。evictionアルゴリズムがフレームを回収する際、kernel/mmu.c内のpage_frame_prepare_locked()はarch_mem_page_out()を呼び出します。これによりカーネルリーフが無効とマークされ、sync_domains()を通じて無効な記述子がすべてのドメインに伝播されますが、その後ASID 0のみがフラッシュされます。do_page_fault()は直ちに同じページフレームを新しいマッピングのために再利用し(arch_mem_page_in()経由)、すでにevictedされたページに触れたユーザースレッド(arch_mem_domain_partition_add()で追加されたk_mem_partition、またはmap_thread_stack()によってマッピングされた自身のスタックなど)は、独自のASIDの下でその物理フレームに対する有効なEL0読み書き変換を保持したままになります。

特権のないコードがユーザースレッド内で実行され、メモリ圧力を引き起こしてevictionを強制し、その後 stale(古くなった/無効化されたはずの)アドレスへのアクセスを維持することで、カーネルがそのフレームに配置したもの(スーパーバイザデータ、他のメモリドメインのパティション、または別のスレッドのスタックなど)に対する読み書きアクセスを取得できます。これはCONFIG_USERSPACEによって強制されるべき分離機構を無力化し、情報漏洩やメモリの破損を引き起こし、最終的にはシステム全体の乗取に至る可能性があります。

修正では実装がTLBI VAAE1{IS}に切り替えられ、これによりすべてのASIDおよびグローバル・非グローバルの両方のエントリと一致するため、ページアウト時、dirty-bit更新時、またはアクセスフラグクリア時にドメインタグ付きの変換情報が残存することはなくなります。攻撃には、CONFIG_USERSPACEとCONFIG_DEMAND_PAGINGが有効化されたarm64ビルド、アクティブなバックストア、およびユーザーメモリドメインにプライベートマッピングされているデMANDページング対象のページが少なくとも1つ必要です。また、同コミットはさらにglobalize_table()が paging synchronization中にドメイン固有リーフからEL0権限と非グローバル属性を剥ぎ取らないようにし、これにより以前発生していたユーザースレッドによる自身のパティションやスタックへのアクセス喪失の問題も解消されます。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

責任者

Zephyr

予約する

2026年08月25日

モデレーション

承諾済み

エントリ

VDB-426019

EPSS

0.00144

アクティビティ

非常低い

ソース

Interested in the pricing of exploits?

See the underground prices here!