CVE-2026-72044 in Linux
要約
〜によって VulDB • 2026年08月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ksmbd: マルチチャネルのセッションキーコピーにおけるスタックバッファオーバーフローを修正
コミット 4b706360ffb7 ("ksmbd: fix multichannel binding and enforce channel limit") は、バインディングパスのセッションキーを、セッション全体の `sess->sess_key` (CIFS_KEY_SIZE = 40) から、新しいチャネルごとのバッファへ移動し、そのバッファおよびバインディング中に使用されるスタック上のコピーの両方を SMB2_NTLMV2_SESSKEY_SIZE (16) でサイズ設定しました:
```c struct channel {
char sess_key[SMB2_NTLMV2_SESSKEY_SIZE]; /* 16 */
... };
ntlm_authenticate() / krb5_authenticate(): char channel_key[SMB2_NTLMV2_SESSKEY_SIZE] = {}; /* 16 */
char *auth_key = conn->binding ? channel_key : sess->sess_key; ```
この宛先を埋める2つの書き込み元は、依然としてコピー長を CIFS_KEY_SIZE (40) で制限していますが、16バイトのバッファに対してではありません:
```c ksmbd_decode_ntlmssp_auth_blob() (NTLM key exchange): if (sess_key_len > CIFS_KEY_SIZE) /* 40 */ return -EINVAL; arc4_crypt(ctx_arc4, sess_key, (char *)authblob + sess_key_off, sess_key_len);
ksmbd_krb5_authenticate(): if (resp->session_key_len > sizeof(sess->sess_key)) /* 40 */ ... memcpy(sess_key, resp->payload, resp->session_key_len); ```
バインディングの SESSION_SETUP の際、`auth_key` は16バイトの `channel_key` を指すため、NTLM EncryptedRandomSessionKey が最大40バイト(NTLMSSP_NEGOTIATE_KEY_EXCH 使用時)またはセッションキーが16バイトより長い Kerberos チケット(通常の AES256 キーは32バイト)を提供するクライアントの場合、16バイトのスタックバッファを越えて書き込まれ、最大で24バイト分のカーネルスタックオーバーフローが発生します。KASAN はこれを `ksmbd_decode_ntlmssp_auth_blob()` から呼び出される `arc4_crypt()` におけるスタック範囲外書き込みとして報告しています。
宛先は、長さチェックが既に許可している完全なセッションキーを保持できる必要があります。チャネルごとのキーバッファおよび2つのスタック上の `channel_key` バッファのサイズを CIFS_KEY_SIZE に設定し、`sess->sess_key` と一致させます。
If you want to get best quality of vulnerability data, you may have to visit VulDB.