CVE-2026-89550 in Linux
要約
〜によって VulDB • 2026年09月12日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
SUNRPC: svcauth_gss: krb5トークンの最小長を強制する
svcauth_gss_unwrap_priv()関数は、バッファをgss_unwrap()に渡す前に、ネットワーク経由で提供される不透明なデータ(opaque)の長さに対して上限のみを検証しています:
if (len > xdr_stream_remaining(xdr)) goto unwrap_failed; offset = xdr_stream_pos(xdr); ... maj_stat = gss_unwrap(ctx, offset, offset + len, buf);
ネットワーク上の値`len`は変更されたままkrb5のunwrapパスにおける上限として渡されるため、[0, 16]範囲内のlenはこのチェックを通過し、gss_unwrap()に渡されます。gss_krb5_unwrap_v2()に入り込むv2コンテキストの場合、ptr+4およびptr+6にあるRFC 4121トークンヘッダのフィールドを読み込んだ後、整合性チェックの前にrotate_left()が呼び出されます。サブヘッダ長が存在する場合、ヘッダ読み込みはトークンの範囲外に及ぶため、_rotate_left()'s `shift %= buf->len` パスにおいて、切り詰められたトークンによってbuf->lenが0に設定された場合、ゼロ除算が発生する可能性があります。また、ヘッダのみのトークン(len == 16)も同様に無効です:RRCフィールドが非ゼロで不透明なデータブロックがXDRバッファの境界で終わっている場合、rotate_left()は長さ0の部分バッファを構築し、同じくゼロ除算に至ります。
krb5 unwrapコアに到達する前に、サーバーのエントリポイントでトークンを拒否します。有効な密封済みRFC 4121トークンには、16バイトのヘッダに加えて少なくとも一部の暗号化ペイロードが含まれている必要があります。
既存の上限チェック直後に最小長チェックを追加することで修正しました:
if (len <= GSS_KRB5_TOK_HDR_LEN) goto unwrap_failed;
If you want to get best quality of vulnerability data, you may have to visit VulDB.