当社のAIエンジンNeutronが、UCバークレーのCyberGymベンチマークで97.1%のスコアを記録しました。 詳細を見る

ディープダイブ

ディープダイブ

Linux KSMBDの認証前の欠陥:ZDIはCVSS 9.0のRCEと評価、リリース済み修正はなし(ZDI-CAN-33774)

Linuxカーネル組み込みSMBサーバーKSMBDの2つの欠陥を、ZDIがCVSS 9.0と評価しています。一つは認証前に到達可能です。リリース済みカーネルにはまだ修正がなく、CVE IDもありません。

要点

  • ZDI-CAN-33774:KSMBDのプロトコルハンドラー振り分けにある認証前の競合。大量のSMB1パケットの後にSMB2パケットをパイプライン送信する1回のTCP書き込みで発生
  • ZDI-CAN-33549:KSMBDのSMB Direct(RDMA)経路の整数アンダーフロー
  • KSMBDが動作し、信頼できない相手からTCPポート445に到達できる全ホストが危険にさらされます。ZDI-CAN-33774は認証不要です。ZDI-CAN-33549はさらに、SMB Direct通信のネゴシエーション、RDMA対応インターフェース、書き込み可能な共有が必要です。
  • 公開カーネルメーリングリストの報告に添付されたPoCコードが実証するのは、認証前の試行ごとに28バイトのカーネルヒープメモリが漏えいすることと、カーネルのクラッシュです。コード実行ではありません。ZDIは両方をリモートコード実行(RCE)と評価し、ZDI-CAN-33774の書き込み経路を説明していますが、公開情報ではコード実行への到達は示されていません。2026年10月24日時点で実環境の悪用は報告されていません(Sysdig)。
  • インストールできる修正はまだありません。ZDI-CAN-33774の修正は2026年10月20日にメインライン開発ツリーへマージされましたが、リリース済みカーネルには含まれません。ZDI-CAN-33549には提案パッチがありますが、リリース済み修正は未確認で、どちらにもCVE IDはありません。KSMBDの公開を止めてください。不要ならサービスを無効にし、信頼できないネットワークから445を遮断し、必要でなければSMB Directを無効にしてください。

Trend MicroのZero Day Initiativeは両欠陥をCVSS 9.0と評価し、両方の発見者をHyeontae Leeとしています。

影響を受けるか

最初の2条件を満たすと、ZDI-CAN-33774で実証された漏えいとクラッシュの影響を受けます。ZDI-CAN-33549には3つ目も必要です。

  • カーネルビルドにKSMBDが含まれ、サービスが動作している。systemctl status ksmbdでサービス状態、lsmod | grep ksmbdでモジュールの読み込みを確認できます。読み込みだけでは公開状態は判断できません。下記ssコマンドで445の待ち受けを確認し、KSMBDが提供していると確かめてください。
  • インターネット、テナントネットワーク、その他完全には信頼しない相手からTCP 445へ到達できる。
  • ZDI-CAN-33549だけ:ハードウェアまたはrxeソフトウェアドライバーのRDMA対応インターフェースでSMB Directをネゴシエーションでき、書き込み可能なKSMBD共有がある。

2つの欠陥は必要条件と対応状況が異なります。

欠陥 場所 必要条件 2026年10月26日時点の修正状況
ZDI-CAN-33774、CVSS 9.0 KSMBDプロトコル振り分け、fs/smb/server 認証不要。445でKSMBDを実行するサーバー 2026年10月20日に修正コミット68f410faedafがメインライン開発ツリーへマージ。リリース済みカーネルにはなし
ZDI-CAN-33549、CVSS 9.0 KSMBDのSMB Direct(RDMA)経路 SMB Directのネゴシエーション、RDMA対応インターフェース、書き込み可能な共有 Stefan Metzmacherがfor-7.5/smbdirect開発ブランチのテストを提案。10月23日にNamjae Jeonが小さなパッチを投稿。リリース済み修正は未確認

動作状況を確認します。

systemctl status ksmbd          # is the KSMBD service running?
lsmod | grep ksmbd              # is the module loaded?
ss -tlnp | grep :445            # is the SMB port listening, and on which address?

KSMBDが実際に動作する構成です。

ディストリビューションまたは構成 確認事項
Red Hat Enterprise Linux Red Hatによると、KSMBDはデフォルトでは含まれない。
AlmaLinux / CloudLinux 9と10 CloudLinuxによると、そのカーネルはKSMBDをビルドしない。
Debian / Ubuntu CloudLinuxによると、ksmbd-toolsをインストールし、サービスを開始した場合だけ動作。
NAS / ストレージアプライアンス 優先的に監査。KSMBD有効のカーネルを同梱する機器で、サービスの稼働とネットワーク公開を確認。

修正方法

どちらにもインストール可能な修正版がないため、パッチではなく公開範囲をなくす対応になります。

  1. カーネル空間のSMB配信が不要なら、systemctl stop ksmbd && systemctl disable ksmbdで停止・無効化します。代償は、ファイルサービス自体がなくなることです。
  2. 配信を続ける必要がある場合、ホストと境界のファイアウォールで445を信頼するホストのネットワークだけに制限します。サービスを維持しつつ、到達する相手を限定できます。ただし、どこかの経路で信頼できない相手が届けば、認証不要のZDI-CAN-33774は開いたままです。
  3. 特に使わない限りSMB DirectとRDMAを無効にし、ZDI-CAN-33549を防ぎます。ただし、認証前の欠陥ZDI-CAN-33774には効果がありません。

日程を推測せず、修正版カーネルの提供を追ってください。メインラインの修正が安定版ブランチに届くまで通常数週間かかり、その後ディストリビューションのカーネルに届きます。カーネルプロジェクトは安定ツリーの修正が利用可能になってからCVE IDを割り当てます。ディストリビューションがコミット68f410faedaf(「ksmbd: wait for negotiation before receiving another PDU」)を含むカーネルを出せば、そのホストのZDI-CAN-33774は解消します。ZDI-CAN-33549では、10月23日の「smb: smbdirect: fix buffer length underflow in RDMA transfers」を含むか、ベンダーに確認してください。

根本原因

KSMBDの受信スレッドは、ネゴシエーションワーカーの完了前に次のプロトコルデータ単位を読めました。そのため、先行する短いSMB1リクエストをワーカーがまだ処理中に、パイプライン送信されたSMB2リクエストが接続のハンドラーテーブルを置き換えられました。

メンテナー自身の修正コミット68f410faedafは、仕組みを正確に説明しています。

受信スレッドはリクエストをキューへ入れ、ネゴシエーションワーカーが終わる前に次のPDUを読めます。need_negが設定されている間、次のPDUによりksmbd_init_smb_server()がconn->opsを置き換えます。その結果、パイプライン送信されたSMB2リクエストが、先行する短いSMB1リクエストをSMB2の処理で扱わせ、バッファ外を読み取らせる可能性があります。

SMB1の複数プロトコルネゴシエーションの後に、conn->opsを再度変更するSMB2 NEGOTIATEが続くことがあります。

順に説明します。

  • conn->opsは接続のハンドラーテーブルで、デコードしたSMBコマンドを動作へ変換する関数ポインターの集合です。SMB1とSMB2はコマンド配置が異なるため、need_negが立つネゴシエーション中に、どちらかを割り当てます。
  • ksmbd_init_smb_server()がその割り当てを行います。接続中に再実行すると、古いテーブルでキューに入れた処理がまだ動いている間にconn->opsを置き換えます。
  • 複数のプロトコルデータ単位を1回のTCP書き込みに詰めたパイプラインリクエストが、この重なりを生みます。先行する短いSMB1パケットのワーカーが終わる前に、受信スレッドがSMB2を読み、再ネゴシエーションします。
  • するとワーカーはSMB1サイズのバッファへSMB2のハンドラーロジックを適用し、末尾を超えて読みます。

ZDI-CAN-33549では、報告はSMB Direct経路の整数アンダーフローを説明しています。クライアントが、最初の記述子が宣言されたペイロードより長いRDMAバッファ記述子を送ると、サーバーのサイズカウンターが周回し、後続のメモリコピーが確保済みバッファ末尾を超えます。

悪用の仕組み

実環境の悪用は報告されていません。攻撃経路は、PoCソース付きで公開カーネルメーリングリストへ投稿された報告内に公開されています。

  1. 攻撃者がKSMBDホストの445へ接続します。ZDI-CAN-33774は認証不要なので、そのポートでKSMBDを動かすサーバーはすべて対象です。
  2. 短いSMB1パケットの連続に続くSMB2パケットを、1回のTCP書き込みで送ります。
  3. 受信スレッドはSMB1処理をキューへ入れ、SMB2を読みます。それがネゴシエーションを再実行し、conn->opsをSMB2のハンドラーテーブルへ変更します。
  4. キューのワーカーが先行する短いSMB1をSMB2の処理で扱い、短いバッファの末尾を超えて読みます。
  5. 公開PoCが実証するのは、認証前の試行ごとに28バイトのカーネルヒープメモリ漏えいと、カーネルのクラッシュです。ZDIの報告は、共有へのアクセス後にバッファ外へ書く経路も説明していますが、Sysdigによれば公開情報にはコード実行への到達を示すものはありません。

ZDI-CAN-33549では、攻撃者はSMB Directをネゴシエーションし、細工したRDMAバッファ記述子を送るクライアントです。サーバーのRDMA対応インターフェース、書き込み可能な共有、SMB Direct通信が必要で、ZDI-CAN-33774より多くの条件があります。

攻撃フロー

攻撃全体は、キューにいるワーカーの足元でハンドラーテーブルを交換させる、一度のパイプラインTCP書き込みです。

flowchart LR A["攻撃者が認証なしで
445へ接続"] --> B["1回のTCP書き込みで
短いSMB1の連続とSMB2を送信"] B --> C["SMB1ワーカーが終わる前に
受信スレッドがSMB2を読む"] C --> D["ネゴシエーションがconn->opsを
SMB2ハンドラーへ変更"] D --> E["ワーカーがSMB1データをSMB2で処理し
バッファ外を読む"] E --> F["試行ごとにカーネルヒープが漏えい
カーネルのクラッシュも可能"] style C fill:#f8d7da

欠けている同期はCです。次のプロトコルデータ単位を読む前に、受信スレッドをネゴシエーションワーカーの完了まで待たせる処理がありません。

攻撃者に可能なこと

公開ホストに対して実証された影響は、認証前の試行ごとに28バイトのヒープが漏れるカーネルメモリ開示と、ファイルサーバーのサービス拒否となるカーネルクラッシュです。ZDIは両欠陥をCVSS 9.0のRCEと評価し、ZDI-CAN-33774では共有アクセス後のバッファ外書き込みも説明するため、実証された漏えいを超えるメモリ破壊は考えられます。ただしコード実行の公開実証はなく、実環境の利用も報告されていません。

各欠陥に必要な条件です。

  • ZDI-CAN-33774:漏えいとクラッシュにはKSMBDを含むカーネル、稼働中のサービス、到達可能な445が必要。アカウントや共有は不要。ZDIが説明する書き込み経路には、さらに共有アクセスが必要
  • ZDI-CAN-33549:上記に加え、SMB Directのネゴシエーション、RDMA対応インターフェース(ハードウェアまたはrxeソフトウェアドライバー)、書き込み可能な共有が必要
  • ユーザー空間のSamba(smbd)は、KSMBDのカーネル内振り分け経路を共有しない別コードベースで、どちらの影響も受けない

修正が機能する理由

KSMBDメンテナーNamjae JeonによるZDI-CAN-33774の修正コミット68f410faedafは、fs/smb/server/server.cの受信経路に待機処理を追加します。

--- a/fs/smb/server/server.c
+++ b/fs/smb/server/server.c
@@ static int queue_ksmbd_work(struct ksmbd_conn *conn)
    struct ksmbd_work *work;
+   bool wait_for_neg = ksmbd_conn_new(conn) || ksmbd_conn_need_negotiate(conn);
    int err;
@@
    INIT_WORK(&work->work, handle_ksmbd_work);
    ksmbd_queue_work(work);
+   /* Negotiation can change conn->ops, finish it before reading another PDU. */
+   if (wait_for_neg)
+       wait_event(conn->req_running_q,
+              atomic_read(&conn->req_running) == 0);
    return 0;

新規またはネゴシエーション中の接続で処理をキューへ入れた後、受信スレッドはconn->req_running_qで、キュー済みの全リクエストが終わるまで待ちます。先行リクエストをワーカーが処理中にハンドラーテーブルを置き換えられず、SMB1データがSMB2処理で扱われることはなくなります。need_negの意味は変えません。コミットメッセージは、ネゴシエーションの両段階で処理を安定させる変更と説明しています。

この競合への修正は完全で、関連する先行報告に基づき、ihopenre-engへ謝辞を記しています。制約は2つあります。2026年10月20日にメインライン開発ツリーへマージされたもので、リリース済みカーネルにはまだありません。また、SMB Direct経路には触れず、ZDI-CAN-33549には別のパッチが必要です。

侵害されたかを確認する方法

どちらも悪用の報告や公開侵害指標はありません。信頼できないネットワークへKSMBDを公開していて監査したい場合は、次を行います。

  • 445の接続ログとファイアウォールログで予期しない送信元を確認。パケットキャプチャがあれば、大量のリクエストの後の突然の切断を探す。ただしこのパターンだけで悪用とは判断できない
  • 公開PoCはカーネルをクラッシュさせられるため、ksmbdやfs/smb/serverを参照するoopsやpanicをカーネルログで確認
  • 1試行28バイトのヒープ漏えいを実際の情報露出として扱う。繰り返し試行されるとクラッシュがなくてもメモリ内容が収集された可能性があります。侵害が疑われれば、カーネルレベルのインシデントに対する標準対応として、隔離、全認証情報のローテーション、正常なイメージからの再構築を行ってください。

経緯

  • 2026-09-30:Namjae Jeonが先行報告に対応し、ihopenre-engへ謝辞を記した修正コミット68f410faedaf「ksmbd: wait for negotiation before receiving another PDU」を作成。
  • 2026-10-20:修正をLinuxメインライン開発ツリーへマージ(コミッター時刻は10月20日23:55 UTC)。
  • 2026-10-21:ZDIがZDI-CAN-33774とZDI-CAN-33549を、各CVSS 9.0、発見者Hyeontae Leeとして、パッチなしで公開カーネルメーリングリストに開示(UTC時刻)。
  • 2026-10-21:SMB DirectメンテナーStefan Metzmacherが、ZDI-CAN-33549の修正候補としてfor-7.5/smbdirect開発ブランチのテストを依頼。
  • 2026-10-22:Namjae Jeonが、コミット68f410faedafですでに競合を修正済みと回答。
  • 2026-10-22:安定版カーネルのメンテナーGreg Kroah-Hartmanが、公開開示ではなくパッチを求めると回答。
  • 2026-10-22:The Hacker Newsが開示を報道。
  • 2026-10-23:Stefan Metzmacherが最小限の修正を勧めた後、Namjae Jeonが小規模なSMB Directアンダーフローパッチを投稿。
  • 2026-10-23~25:AlmaLinux、CloudLinux、Sysdigが分析を公開。公開PoCはコード実行ではなく、認証前の1試行28バイトのカーネルヒープ漏えいとクラッシュであると記録。
  • 2026-10-26:本記事を公開。実環境の悪用は報告されておらず、両欠陥ともCISA KEVカタログに未登録。

よくある質問

CVE IDがない理由は?

Linuxカーネルプロジェクトは公開CVE方針に従い、リリース済み安定版カーネルで修正が利用可能になってからCVE番号を割り当てます。両欠陥は修正版のリリース前に公開リストへ開示されたため、ZDI-CAN識別子で追跡されています。安定版カーネルに修正が入ればCVE IDが付くと見込まれます。

公開PoCでリモートコード実行が可能か?

いいえ。実証しているのは、認証前の試行ごとに28バイトのカーネルヒープメモリが漏れることとクラッシュです。ZDIの9.0評価はRCEとして扱い、ZDI-CAN-33774の報告も共有アクセス後のバッファ外書き込み経路を説明していますが、Sysdigによればコード実行の公開実証はありません。

自社ディストリビューションのカーネルは影響を受けるか?

KSMBDをビルドし、サービスを開始した場合だけです。Red Hat Enterprise Linuxはデフォルトで含めず、AlmaLinuxとCloudLinux 9、10はビルドせず、DebianとUbuntuはksmbd-toolsのインストールとサービス開始後だけ動きます。優先監査対象は、ファイル配信用にKSMBDを有効にしたカーネルを同梱するNASやストレージサーバーです。

Sambaサーバーも影響を受けるか?

いいえ。Sambaのユーザー空間smbdは別実装で、KSMBDのカーネル振り分けコードを共有しません。対象はカーネル内SMBサーバーKSMBDで、systemctl status ksmbdやlsmod | grep ksmbdで確認できます。

修正が自社カーネルに届くのはいつか?

ZDI-CAN-33774の修正は2026年10月20日にメインライン開発ツリーへ入りました。通常は安定ブランチまで数週間かかり、その後ディストリビューションのカーネルに届きます。ZDI-CAN-33549では、最初にStefan Metzmacherがfor-7.5/smbdirectのテストを依頼し、10月23日にNamjae Jeonが小さなパッチを投稿しました。しかしそれだけで自社のリリース済みカーネルにあるとは言えません。ディストリビューションのアドバイザリでコミット68f410faedaf(ZDI-CAN-33774)と10月23日のSMB Directパッチ(ZDI-CAN-33549)を追い、個別に適用範囲を確認してください。

両方の欠陥を心配すべきなのはSMB Direct使用時だけか?

いいえ。ZDI-CAN-33549にはSMB Direct、RDMA対応インターフェース、書き込み可能な共有が必要です。ZDI-CAN-33774はどれも不要で、KSMBDホストの445へ届く未認証の相手なら到達できます。そのため、まず公開を取り除くべきなのはこちらです。

攻撃者より先に公開SMBサーバーを発見

Ostorlabのネットワークスキャンガイドに従い、New Scan → Networkを選び、IPアドレスまたは範囲を入力し、Full Network Scanを選んで開始してください。445の検出結果を確認し、ローカルでKSMBDかユーザー空間Sambaかを確かめます。ディストリビューションの修正版を待つ間、公開KSMBDへのアクセスを制限してください。

参考資料

  • OpenwallにミラーされたZDI-CAN-33774の一次報告。10月21日のUTC開示時刻と書き込み経路を含む:https://lists.openwall.net/linux-kernel/2026/10/21/2694
  • 10月23日のStefan MetzmacherによるSMB Directブランチと最小修正の議論:https://lists.openwall.net/linux-kernel/2026/10/23/739
  • 10月23日のNamjae JeonによるSMB Directアンダーフロー修正添付:https://lists.openwall.net/linux-kernel/2026/10/23/971
  • The Hacker News、「Two CVSS 9.0 Linux KSMBD RCE Flaws Disclosed on Public Mailing Lists Before Kernel Fixes」、2026年10月22日、10月26日更新。仕組み、メンテナーの回答、PoCの範囲、ディストリビューションの状況:https://thehackernews.com/2026/10/two-cvss-90-linux-ksmbd-rce-flaws.html (2026年10月26日確認)
  • ZDIの今後のアドバイザリ一覧。ZDI-CAN-33774とZDI-CAN-33549をCVSS 9.0、ベンダーLinux、発見者Hyeontae Leeと記載:https://www.zerodayinitiative.com/advisories/upcoming/ (2026年10月26日確認)
  • 公開カーネルリストのZDI-CAN-33774報告:https://lore.kernel.org/lkml/BYAPR01MB383076AC412E19C48CFBEAE980662@BYAPR01MB3830.prod.exchangelabs.com/ (一次報告)
  • 公開カーネルリストのZDI-CAN-33549報告:https://lore.kernel.org/lkml/BYAPR01MB3830472B5702C089B0BBB77D80662@BYAPR01MB3830.prod.exchangelabs.com/ (一次報告)
  • Linuxメインラインの修正コミット68f410faedaf「ksmbd: wait for negotiation before receiving another PDU」。2026年9月30日作成、コミッター時刻2026年10月20日:https://github.com/torvalds/linux/commit/68f410faedaf6ee74d81e574733c50ebcc1bd8ed (2026年10月26日確認)
  • 10月の6件のカーネル報告、PoCの範囲、未マージ修正状況に関するSysdig:https://www.sysdig.com/blog/detecting-and-mitigating-zdi-can-33367-and-five-other-linux-flaws (The Hacker News経由の参照、2026年10月26日)
  • 公開カーネルリストの報告に関するAlmaLinux:https://almalinux.org/blog/2026-10-23-zdi-can-33367/ (The Hacker News経由の参照、2026年10月26日)
  • KSMBD PoCとディストリビューションのビルド状況に関するCloudLinux:https://blog.cloudlinux.com/zdi-can-33367 (The Hacker News経由の参照、2026年10月26日)
  • KSMBDはRHELにデフォルトで含まれないとするRed Hat文書6991749:https://access.redhat.com/solutions/6991749 (The Hacker News経由の参照、2026年10月26日)
  • 安定ツリーでの修正後にだけCVEを発行するLinuxカーネルの割り当て方針:https://docs.kernel.org/process/cve.html (The Hacker News経由の参照、2026年10月26日)