【活用ガイド】

JVNDB-2026-028071

LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性

概要

Linuxカーネルにおいて、次の脆弱性が修正されました。af_unix:unix_stream_data_wait()内のtail->lenのUse-After-Free(UAF)読み取りの修正です。unix_stream_data_wait()は、スケジューリングロックを持たずにskb_peek_tail(&sk->sk_receive_queue)を実行します。このため、そのキュー上のSKBがデキューされて解放されるのを防ぐことができません。この状態はコミット79f632c71bea("unix/stream: fix peeking with an offset larger than data in queue")以降ずっと続いています。その結果、ポインタ比較の`tail != last`が、`last`が既に解放されたSKBを指しているにもかかわらず、`tail`が同じアドレスに割り当てられた新しいSKBであった場合に偽となることがあります。これにより、unix_stream_data_wait()が新しいデータ到着後も不適切にブロックし続ける可能性がありますが、これは同じソケットに対してpeekしながらのrecv()と通常のrecv()が競合するという稀なシナリオでのみ発生し、おそらく実質的な問題にはなりません。とはいえ、コミット2b514574f7e8("net: af_unix: implement splice for stream af_unix sockets")以降では`tail`が実際に参照されるようになり、以下の競合シナリオにてUAFが発生する可能性があります。(test_setup()がシングルスレッドで実行され、その後test_thread1()とtest_thread2()が2つのスレッドで並行して実行される):```cstatic int socks[2];void test_setup(void) { socketpair(AF_UNIX, SOCK_STREAM, 0, socks); send(socks[1], "A", 1, 0); int peekoff = 1; setsockopt(socks[0], SOL_SOCKET, SO_PEEK_OFF, &peekoff, sizeof(peekoff));}void test_thread1(void) { char dummy; recv(socks[0], &dummy, 1, MSG_PEEK);}void test_thread2(void) { char dummy; recv(socks[0], &dummy, 1, 0); shutdown(socks[1], SHUT_WR);}```競合時の動作例:``` thread1 thread2unix_stream_read_generic mutex_lock(&u->iolock) skb_peek(&sk->sk_receive_queue) skb_peek_next(skb, &sk->sk_receive_queue) mutex_unlock(&u->iolock) unix_stream_read_generic unix_state_lock(sk) skb_peek(&sk->sk_receive_queue) unix_state_unlock(sk) unix_stream_data_wait unix_state_lock(sk) tail = skb_peek_tail(&sk->sk_receive_queue) spin_lock(&sk->sk_receive_queue.lock) __skb_unlink(skb, &sk->sk_receive_queue) spin_unlock(&sk->sk_receive_queue.lock) consume_skb(skb) [SKBの解放] `tail != last`: false `tail`: true `tail->len != last_len`***UAF発生***```このUAFは、tail->lenの読み取りを削除することで修正されました。UNIXソケットの受信キュー内のSKBが拡大する可能性はもはやないため、tail->lenをチェックする必要がなくなったからです。Kuniyuki氏は以下のように説明しています。> コミット869e7c62486e("net: af_unix: implement stream sendpage support")でsendpage()サポートが追加された際、受信側キューの最後のskbにデータが追加される可能性がありました。> そのため、unix_stream_data_wait()で新しいデータを待つ間に、最後のskbの長さが変わったかをチェックする必要がありました。> しかし、コミットa0dbf5f818f9("af_unix: Support MSG_SPLICE_PAGES")とコミット57d44a354a43("unix: Convert unix_stream_sendpage() to use MSG_SPLICE_PAGES")でsendmsg()のリファクタリングが行われ、現在はデータは常に新しいskbに追加されることになりました。> したがって、この修正はカーネル6.5以前には適用されません。
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 8.8 (重要) [その他]
  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 低
  • 攻撃に必要な特権レベル: 低
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更あり
  • 機密性への影響(C): 高
  • 完全性への影響(I): 高
  • 可用性への影響(A): 高
影響を受けるシステム


Linux
  • Linux Kernel 4.2 以上 6.6.143 未満
  • Linux Kernel 6.13 以上 6.18.34 未満
  • Linux Kernel 6.19 以上 7.0.11 未満
  • Linux Kernel 6.7 以上 6.12.92 未満
  • Linux Kernel 7.1

想定される影響

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

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。
ベンダ情報

CWEによる脆弱性タイプ一覧  CWEとは?

  1. 解放済みメモリの使用(CWE-416) [NVD評価]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-64109
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-64109
  2. 関連文書 : af_unix: Fix UAF read of tail->len in unix_stream_data_wait() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/38bccb927d83d7d52e5b20015a172a0b6101d11e)
  3. 関連文書 : af_unix: Fix UAF read of tail->len in unix_stream_data_wait() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/be309f8eae8b474a4a617eaae01324da996fc719)
  4. 関連文書 : af_unix: Fix UAF read of tail->len in unix_stream_data_wait() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/5f162f95a95834f06a8ec6140889272ad12e842f)
  5. 関連文書 : af_unix: Fix UAF read of tail->len in unix_stream_data_wait() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/acdff9907478e82208475b1151700d0b71dcdc63)
  6. 関連文書 : af_unix: Fix UAF read of tail->len in unix_stream_data_wait() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/26342087fac93b3932e6af61dc91ec029cb8a623)
更新履歴

  • [2026年08月13日]
      掲載