CVE-2026-89700 in Linux情報

要約

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

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

nfsd: リスナー設定における sockaddr の長さをアドレスファミリごとに検証する

`nfsd_sock_nl_policy` は `NFSD_A_SOCK_ADDR` を最小長の制約がない生(bare)の `NLA_BINARY` 属性として宣言しています。`CAP_NET_ADMIN` 権限を持つ呼び出し元は、`sa_family=AF_INET6` で指定された16バイトの `NFSD_A_SOCK_ADDR` を送信でき、これにより3つの消費者(`rpc_cmp_addr_port`, `svc_find_listener`, `kernel_bind`)にわたって12バイト分の OOB(配列外)読み取りが発生します。

また、`nfsd_nl_listener_set_doit()` は、実行中のリスナー設定を変更する処理と交じりながら、各リスナエントリを2つの別々のループ内でインラインで解析および検証していました。この検証は重複しており、「nla_len < sizeof(struct sockaddr)」というオープンコードされたチェックを使用していますが、これは AF_INET6 に対して短すぎます。さらに、不正な形式のエントリの処理が、どちらのループによって検出されたかによって一貫性がありませんでした。

`nfsd_nl_validate_listeners()` ヘルパー関数を追加し、リスト全体を1回だけ走査して、各エントリが正常に解析可能であり、アドレスとトランスポート名の両方を含み、かつそのアドレスファミリに必要な長さ(AF_INET の場合は `sizeof(struct sockaddr_in)`、AF_INET6 の場合は `sizeof(struct sockaddr_in6)`、それ以外の場合は `-EAFNOSUPPORT`)を持っていることを確認します。この関数は、`nfsd_mutex` を取得したりサービスを作成する前に呼び出されるため、不正なリクエストは副作用なくクリーンに失敗します。

すべてのエントリが2つの既存のループが実行される時点で有効であることが保証されたため、両方のループから冗長な存在チェックとファミリごとの長さチェックを削除し、データの抽出に必要な `nla_parse_nested()` 呼び出しのみを残しました。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

責任者

Linux

予約する

2026年09月11日

モデレーション

承諾済み

エントリ

VDB-402543

EPSS

0.00000

アクティビティ

非常低い

ソース

Do you want to use VulDB in your project?

Use the official API to access entries easily!