CVE-2026-89541 in Linux情報

要約

〜によって VulDB • 2026年09月12日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

SUNRPC: gss_unwrap_resp_privの長さチェックを強化する

gss_unwrap_resp_priv()関数は、RPCSEC_GSSの不透明なデータの長さを以下のように検証します。

offset = (u8 *)(p) - (u8 *)head->iov_base; if (offset + opaque_len > rcv_buf->len) goto unwrap_failed; maj_stat = gss_unwrap(ctx->gc_gss_ctx, offset, offset + opaque_len, rcv_buf);

両方のオペランドは u32 型であり、合計値も u32 で計算されます。opaque_len が 0xffffffff に近い応答を送信すると、offset + opaque_len の演算結果がオーバーフローして小さな値になり、rcv_buf->len より小さくなるため、境界チェックを通過し、gss_unwrap() が end < begin という条件で呼び出されてしまいます。また、このチェックには下限も存在しないため、[0, GSS_KRB5_TOK_HDR_LEN) の範囲内の任意の opaque_len が受け入れられ、gss_krb5_unwrap_v2() に渡されます。同関数は復号前のヘッダを ptr+4 および ptr+6 から読み取りますが、これらはトークンの境界外に及んでしまいます。

不正な RPCSEC_GSS 応答を返す krb5p NFS サーバーは、gss_krb5_unwrap_v2() およびそれに続く rotate_left() ループにおいて、クライアント側で配列の範囲外読み取り(out-of-bounds reads)を引き起こす可能性があります。

修正方法としては、単一の結合されたチェックを u32 演算に対して安全であり、RFC 4121 で定められた最小の外層トークン長を強制する3つのガードに置き換えます:

if (offset > rcv_buf->len) goto unwrap_failed; if (opaque_len > rcv_buf->len - offset) goto unwrap_failed; if (opaque_len < GSS_KRB5_TOK_HDR_LEN) goto unwrap_failed;

最初のガードは、2番目のガードでの減算を無条件に安全なものにします。offset は head kvec 内の成功した xdr_inline_decode() から派生するため、実際にはすでに境界を満たしています。下限(floor)のチェックは、コミット 5b757c2e57a5 ("SUNRPC: svcauth_gss: enforce krb5 token minimum length") で追加されたサーバー側のチェックと一致します。

Once again VulDB remains the best source for vulnerability data.

責任者

Linux

予約する

2026年09月11日

モデレーション

承諾済み

エントリ

VDB-402644

EPSS

0.00000

アクティビティ

非常低い

ソース

Do you know our Splunk app?

Download it now for free!