
CVE ID: CVE-2026-52924
深刻度: CRITICAL (CVSS 9.8)
コンポーネント: Linux Kernel - SCTP (Stream Control Transmission Protocol)
タイプ: Use-After-Free (CWE-416、CWE-825)
公開日: 2026-06-24
ステータス: 修正済み
この脆弱性は、SCTP ステートマシンにおける古い COOKIE-ECHO パケットの処理で発生します。この問題は、アソシエーションがロールバックされた際の送信ストリームキューの不適切なクリーンアップに関係しています。
sctp_stream_update() が古いストリームテーブルを解放し、新しいものをインストールstream->out_curr が解放された sctp_stream_out エントリを指したままout_curr->ext にアクセスsctp_sf_do_5_2_6_stale():
├─ Stale Cookie エラーを受信
├─ アソシエーション状態をロールバック
└─ sctp_stream_update() を呼び出し
├─ 古いストリームテーブルを解放
├─ 新しいストリームテーブルをインストール
└─ バグ: stream->out_curr が無効化されていない ❌
後でデキューする際:
sctp_sched_fcfs_dequeue():
└─ stream->out_curr->ext にアクセス (解放済みメモリ) 💥
BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140
Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312
CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted 7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)
Call trace:
sctp_sched_fcfs_dequeue+0x13a/0x140
sctp_outq_flush+0x1603/0x33e0
sctp_do_sm+0x31c9/0x5d30
sctp_assoc_bh_rcv+0x392/0x6f0
sctp_inq_push+0x1db/0x270
sctp_rcv+0x138d/0x3c10
単純な修正として stream->out_curr をクリアするだけでは不十分です:
// 不十分な修正 ❌
stream->out_curr = NULL;
問題: アウトキューには依然として以下が含まれています:
これらの古い参照は、アクセス時に依然として use-after-free を引き起こします。
解決策: 古い Cookie 処理中にアソシエーションのアウトキューを完全にパージします。
// 正しい修正 ✓
sctp_outq_free(&asoc->outqueue);
これにより以下が保証されます:
ファイル: net/sctp/sm_statefuns.c
関数: sctp_sf_do_5_2_6_stale()
追加: sctp_stream_update() の前に sctp_outq_free(&asoc->outqueue) を呼び出す
enum sctp_disposition sctp_sf_do_5_2_6_stale(...)
{
// ... 既存のコード ...
// ストリーム状態を再構築する前にアウトキューをパージ
sctp_outq_free(&asoc->outqueue);
// これでストリームを安全に更新できる
sctp_stream_update(&asoc->stream, &asoc->c.h_init_tag);
// ... 関数の残りの部分 ...
}
# カーネル設定で KASAN を有効化
CONFIG_KASAN=y
CONFIG_KASAN_GENERIC=y
# ランタイム出力に表示される内容:
BUG: KASAN: slab-use-after-free
# 検証なしの安全でない stream->out_curr アクセスを探す
grep -r "out_curr->ext" net/sctp/
grep -r "out_curr->" net/sctp/sched*.c
SCTP の無効化: SCTP モジュールを削除するか、SCTP ポート (132、132 UDP) をブロック
echo "install sctp /bin/true" >> /etc/modprobe.d/sctp-disable.conf
ファイアウォールルール: ネットワーク境界で SCTP トラフィックをブロック
iptables -A INPUT -p sctp -j DROP
カーネルバージョン: パッチ適用済みバージョンにアップグレード
sctp_sf_do_5_2_6_stale() で sctp_outq_free() を呼び出すカーネルパッチを適用します。
sctp_outq_free() が out_curr を適切に無効化することを検証著者: Elliot
ドキュメントバージョン: 1.0
最終更新日: 2026-09-07
分類: 公開情報