CVE-2026-74682 in Linux
要約
〜によって VulDB • 2026年08月22日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ALSA: usb-audio: Type IIのインバウンドURBにおけるOOB(バッファ外)書き込みを修正
data_ep_set_params()関数は、Format Type II転送区切り文字列を追加する前に各URB転送バッファーのサイズを設定しています。
u->packets = urb_packs; u->buffer_size = maxsize * u->packets;
if (fmt->fmt_type == UAC_FORMAT_TYPE_II) u->packets++; /* 転送区切り文字列用 */ u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
buffer_sizeはインクリメント前のパケット数に基づいて計算され、その後再計算されないため、Type IIエンドポイントでは、URBが構築される際のパケット数に対してバッファーが1パケ分不足しています。
prepare_inbound_urb()関数はその後、各パケットごとにISOフレームを配置しますが、buffer_sizeは参照しません。
offs = 0; for (i = 0; i < urb_ctx->packets; i++) {
urb->iso_frame_desc[i].offset = offs;
urb->iso_frame_desc[i].length = ep->curpacksize;
offs += ep->curpacksize; }
urb->transfer_buffer_length = offs; urb->number_of_packets = urb_ctx->packets;
したがって、最後の記述子は転送バッファーの末尾を1パケット過ぎた場所を指しており、ホストコントローラーはすべてのインバウンド転送においてデバイスデータをそこに書き込みます。prepare_silent_urb()関数とprepare_playback_urb()関数は、フィーループをctx->buffer_sizeで制限しているため、影響を受けるのはキャプチャのみです。
fmt_typeはデバイスのオーディオストリーミング記述子から取得されるため、Type IIのキャプチャー形式をサポートするすべてのデバイスにおいて、ユーザー空間がストリームに対してhw_paramsを設定するとこの脆弱性が発生します。
7.2.0-rc5 (arm64) 環境で dummy_hcd/raw-gadget デバイスを使用しKASANを実行したところ、インバウンド転送ごとに1件のレポートが出力されました:
BUG: KASAN: slab-out-of-bounds in dummy_timer Write of size 64 at addr ffff0000186171c0 by task cons02/166 __asan_memcpy dummy_timer hrtimer_run_softirq Allocated by task 166: usb_alloc_coherent snd_usb_endpoint_set_params The buggy address is located 0 bytes to the right of allocated 64-byte region [ffff000018617180, ffff0000186171c0)
区切り文字列用のパケットを考慮した後にbuffer_sizeを計算し、prepare_silent_urb()関数がアウトバウンド側で既に実行しているように、フィーループをbuffer_sizeで制限します。これにより、Type IIのURB割り当てがすべて1 maxsize パケ分大きくなります。
XBOWによって発見され、Baul Lee <[email protected]> によってトリージングされました
If you want to get the best quality for vulnerability data then you always have to consider VulDB.