CVE-2026-68398
ppp: チャネル解放をRCUグレース期間まで延期し、pppol2tp RX UAFを修正
- 公開済み
- 2026/08/10
- 更新済み
- 2026/08/19
- CNA の割り当て
- Linux
- 観察された証拠
- 2026/08/20
プライマリ CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H低 · 今後 30 日間
- パーセンタイル
- 9.5%
- モデルの日付
- 2026/09/21
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
概要
Linuxカーネルにおいて、以下の脆弱性が解決されました:ppp: pppol2tp RXのUAFを修正するため、チャネルの解放をRCUグレース期間まで延期する pppol2tp_recv()はL2TP UDPカプセル化ソフトIRQ RXパスで実行されます: l2tp_udp_encap_recv() -> l2tp_recv_common() -> pppol2tp_recv() -> ppp_input(&po->chan) これはrcu_read_lock()の下でl2tp_session参照のみを保持して実行され、ppp_input()が逆参照する内部PPPチャネル(struct channel、chan->ppp)への参照は取得しません。pppoxソケットはSOCK_RCU_FREEであるため、'po'と埋め込まれたppp_channelはRCUセーフです。しかし、内部のstruct channelは別個の割り当てであり、ppp_release_channel()が通常のkfree()で解放します: close(data socket) -> pppol2tp_release() -> pppox_unbind_sock() -> ppp_unregister_channel() -> ppp_release_channel() -> kfree(pch) バインドされている(PPPIOCGCHAN)がpppユニットに接続されておらず(PPPIOCCONNECTなし、pch->ppp == NULL)、ブリッジもされていないチャネルの場合、ティアダウンはppp_disconnect_channel()のsynchronize_net()とppp_unbridge_channels()のsynchronize_rcu()の両方をスキップするため、kfree()にはグレース期間がありません。pppol2tp_recv()内のrcu_read_lock()は通常のkfree()から保護しないため、あるCPU上で実行中のppp_input()が、別のCPU上でclose()によって解放された直後のチャネルを逆参照する可能性があります。このバグは非特権ユーザーによって到達可能です。 call_rcu()を介してRCUコールバックにチャネルの解放を延期することで、グレース期間が実行中のppp_input()をフェンスします。切断およびブリッジ解除のティアダウンパスはすでにsynchronize_net()/synchronize_rcu()でフェンスされています。call_rcu()はclose()パスを停止させることなく、ここでも同様の処理を行います。
ソース
1- CVE-2026-68398エクスプロイト
CVE-2026-68398 Ubuntu PPPoL2TP use-after-free ローカル権限昇格
責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。