JVNDB-2026-025916 | |
LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性 | |
| 概要 | |
Linuxカーネルにおいて、以下の脆弱性が修正されました。tipc: tipc_aead_decrypt_done関数におけるスラブの解放後使用(use-after-free)の問題を修正しました。tipc_aead_decrypt()は暗号化パスとは異なり、netnsの参照を取得せずにtipc_bearer_hold(b)から直接crypto_aead_decrypt(req)へ進みます。crypto_aead_decrypt()が非同期にオフロードされる場合(例:SIMDのaeadラッパーがcryptdへキューイングされるとき)、cryptdワーカーが後でtipc_aead_decrypt_done()を実行します。その間にbearerのnetnsが破棄されると、cleanup_net() -> tipc_exit_net() -> tipc_crypto_stop()の流れでper-netnsのtipc_cryptoが解放され、完了処理はそれにアクセスしてしまいます。tipc_aead_decrypt_done()ではaead->crypto->statsおよびaead->crypto->netを参照し、tipc_crypto_rcv_complete()はaead->crypto->aead[]およびノードテーブルを参照するため、解放済みメモリを読み取ってしまいます。KASAN splatの解析結果(v7.1-rc7, CONFIG_KASAN_INLINE + TIPC + TIPC_CRYPTO)は以下の通りです。BUG: KASAN: slab-use-after-free in tipc_aead_decrypt_done (net/tipc/crypto.c:999) サイズ8の読み取りがアドレスffff8881056258a8で発生、タスクkworker/u16:2/51による。ワークキュー: events_unbound。コールトレース: tipc_aead_decrypt_done (net/tipc/crypto.c:999)、process_one_work (kernel/workqueue.c:3314)、worker_thread (kernel/workqueue.c:3397 net/workqueue.c:3478)、kthread (kernel/kthread.c:436)、ret_from_fork (arch/x86/kernel/process.c:158)、ret_from_fork_asm (arch/x86/entry/entry_64.S:245)。割り当て元タスク169: __kasan_kmalloc (mm/kasan/common.c:398 415)、tipc_crypto_start (net/tipc/crypto.c:1502)、tipc_init_net (net/tipc/core.c:72)、ops_init (net/core/net_namespace.c:137)、setup_net (net/core/net_namespace.c:446)、copy_net_ns (net/core/net_namespace.c:579)、create_new_namespaces (kernel/nsproxy.c:132)、__x64_sys_unshare (kernel/fork.c:3316)、do_syscall_64 (arch/x86/entry/syscall_64.c:63)、entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)。解放タスク8: kfree (mm/slub.c:6566)、tipc_exit_net (net/tipc/core.c:119)、cleanup_net (net/core/net_namespace.c:704)、process_one_work (kernel/workqueue.c:3314)、kthread (kernel/kthread.c:436)。このバグは、コミットe279024617134("net/tipc: tipc_aead_encrypt_doneにおけるスラブの解放後読み取りの修正")で修正された暗号化側と同クラスの問題です。暗号化パスではcrypto_aead_encrypt()の前にmaybe_get_net(aead->crypto->net)を取得し、同期の戻り値およびtipc_aead_encrypt_done()でput_net()により解放します。-EINPROGRESSや-EBUSYの戻り値は非同期コールバックのために参照を維持しています。復号化パスには同等の保護がありませんでした。今回の修正では復号化パスに暗号化側の保護を適用しました。crypto_aead_decrypt()の前にnet参照を取得し(取得不可時は-ENODEVを返却し、対応するbearerのputを行います)、-EINPROGRESS/-EBUSYの非同期戻り値では参照を保持し、同期成功またはエラー戻り値およびtipc_aead_decrypt_done()の最後でput_net()により解放します。v7.1-rc7でKASANを有効にした環境で再現しました。UDP bearerにクラスタキーを持つbearerが、不明なピアから細工された暗号化フレームで氾濫し(クラスタキー復号化パスを起動し)、bearerのnetnsが繰り返し破棄されます。完了処理はtipc_crypto_stop()の呼び出しより長く非同期に実行される必要があります。x86環境では標準のaesni gcm(aes)が現在同期的に復号するため、非同期パスはcryptdオフロードで実行されました。tipc_aead_decrypt_done()の保護されていないaead->cryptoの参照は未修正のupstreamパスであり、tipc_aead_decrypt()はまだmaybe_get_net(aead->crypto->net)を保持していません。そのため、crypto_aead_decrypt()が非同期になるすべての構成で、完了処理が解放より長く存続する可能性があります。この脆弱性は0secの自動化セキュリティリサーチツール(https://0sec.ai)によって発見されました。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 8.8 (重要) [その他]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/07/19 |
| 登録日 | 2026/07/30 |
| 最終更新日 | 2026/07/30 |



