世界を動かす技術を、日本語で。

o3を使用してLinuxのSMB実装におけるリモートゼロデイを発見しました

2025年5月24日原文(sean.heelan.io)

概要

  • OpenAIの o3モデル を使い、Linuxカーネルの ゼロデイ脆弱性 を発見した事例の解説。
  • ksmbd (SMB3プロトコルカーネルサーバ)の脆弱性調査の流れを紹介。
  • o3による既知脆弱性(CVE-2025-37778)発見のベンチマーク結果を詳細に分析。
  • o3が新たなゼロデイ(CVE-2025-37899)を自動的に指摘した過程を説明。
  • LLMの現状と今後の脆弱性研究へのインパクトについて考察。

OpenAI o3モデルによるLinuxカーネル脆弱性発見事例

ksmbdと脆弱性調査の背景

  • ksmbd はLinuxカーネル内で動作する SMB3プロトコルサーバ
  • SMB3はネットワーク越しにファイル共有を実現するプロトコル。
  • 調査目的は、 LLM関連ツール開発 からの一時的な休息を兼ねた脆弱性監査。
  • o3リリース後、既知バグを使い o3の能力ベンチマーク を実施。

CVE-2025-37778(Kerberos認証脆弱性)の概要

  • Kerberos認証処理中 の“session setup”リクエスト処理における use-after-free 脆弱性。
  • sess->stateが SMB2_SESSION_VALID の場合、 sess->user が解放される。
  • ksmbd_krb5_authenticateによる再初期化が行われない場合、解放済みポインタ利用が発生。
  • 発見・再現には 3.3k LoC 程度のコード理解が必要。
    • a. sess->state == SMB2_SESSION_VALID を成立させる条件の特定
    • b. sess->userが再初期化されないパスの特定と誘導
    • c. 解放後にsess->userへアクセスする箇所の特定

LLM評価環境とプロンプト設計

  • LLMには “session setup”コマンドハンドラ と、その呼び出し関数群(深さ3まで)を入力。
  • パケット受信からハンドラ実行、接続終了まで の一連のコードを含める。
  • システムプロンプトでは「use-after-free脆弱性の検出」「ksmbdの概要・脅威モデル」を明示。
  • 誤検知抑制 を強く指示する設計。

o3による検出結果と他モデル比較

  • 100回実行 でo3は8回脆弱性を検出(8%)、66回は未検出、28回は誤検知。
  • True Positive:False Positive比 は1:4.5(最大5誤検知で1本物発見)。
  • Claude Sonnet 3.7は3回、Claude Sonnet 3.5は0回と比較し、 o3は2〜3倍高精度
  • o3の出力は 簡潔かつバグレポート風、Sonnetは思考過程型。

o3によるゼロデイ(CVE-2025-37899)発見

  • “session setup”以外も含む smb2pdu.c全体(約9k LoC) を対象にo3へ入力。
  • 入力トークン増加で検出精度は低下(1/100回)するが、 新規脆弱性を自動指摘
  • 新規脆弱性は“session logoff”ハンドラでの sess->user解放 に関するuse-after-free。
  • 複数スレッド が同時に同じセッションを扱う場合、解放済みポインタ参照が発生。
    • o3は 同期処理の欠如競合条件 を正確に推論し、脆弱性を報告。

LLMの脆弱性研究へのインパクトと今後

  • o3のコード理解・推論能力 は大幅に進化。
  • 10k LoC未満の問題なら o3が解決や支援できる可能性 が現実的。
  • LLMは専門家を 置き換えるものではなく、効率化・高度化を支援 する存在。
  • 脆弱性研究者やエクスプロイト開発者は LLM活用による生産性向上 に注目すべき段階。
  • 今後も LLMの進化と脆弱性検出自動化 の動向に継続的な注視が必要。

Hackerたちの意見

ちなみに、私はこの投稿の作者じゃないよ。「How I」で始まるタイトルなだけだから。

記事では、信号対雑音比が約1:50と引用されてるね。著者はこのコードベースにかなり詳しいみたいだから、信号と雑音をうまく分けられる立場にいるんだろうね。この部分を自動化するのが本当の勝利になると思うから、注目してるよ。

そういえば、最近考えてたんだけど、Linuxカーネルが今までにハードしたすべてのgit変更やメールリストにファインチューニングみたいなものを入れるのって、現実的じゃないかな?そんなLLMは、何年もコードベースに関わってきた人の近い-合成-バージョンになるんじゃないかな。高いコンテキストに収められることがたくさんあるし、いくつかのコードベースはそのままで20万トークンもあるから、どうだろうね。

1:50は、針を見つけるには素晴らしい検出比率だね。

その通りだね。多くのAIユーザーは効果的にトリアージできないから、オープンソースプロジェクトにはスパムが多くなってるんだよね。

バグを見つけるための信号対雑音比を劇的に向上させるシステムに取り組んでるんだ。それと同時に、人気のソフトウェアエージェント全体のベンチマークも徹底的にやってる。いろんな結果が出てきたし、もうすぐカンファレンスで全てを公開する予定だから、楽しみにしてて。かなり面白い内容になると思うよ。編集:言葉が分かりにくかったね。

LLMがハーネスとリードのための概念実証テストを書いたら、信号対雑音比が劇的に上がるかも。ただ、今はそれを全部やるのはかなり高くつくんだよね。

私の理解では、ksmbdは「軽量で高性能な代替品」として開発されたカーネル空間のSMBサーバーなんだよね。Q1: 誰がプロダクションでksmbdを使ってるの? Q2: なんで?

軽量で高性能だから、って理由だと思うけど?

  1. SolarisやWindowsのカーネル内SMBサーバーを使ってた人たち。2. Sambaのパフォーマンスは(比較すると)ひどいから、2025年でもファイル共有にはWindowsが定期的に使われてる。これって、ファイルの権限に対してネイティブのWindowsスタイルのACLをサポートしてるのかな?それがSolarisを使い続ける最後の理由なんだけど、ZFSに依存してると思う。SambaはUnixのUID/GIDに依存してて、そのセキュリティモデルの一部として同期を行ってるけど、残念ながら1970年代に取り残されてる。注意点として、カーネル内SMBサーバーはWindowsで少なくとも一つの「これはヤバい」なゼロデイリモートルートホールの原因になったことがある(Solarisについては不明)から、トレードオフがあるよ。

ライセンスについて。SambaはGPLv3だけど、LinuxはGPLv2だけなんだよね。

kmod-trelayを使う理由は、relaydの代わりに使うってことだと思う。

Hacker Newsで議論の続きを見る