OpenBSDに約37年前のコードに由来する脆弱性、root権限の奪取を実証―修正済みのカーネル不具合を組み合わせる「Big Fish」

セキュリティニュース

投稿日時: 更新日時:

OpenBSDに約37年前のコードに由来する脆弱性、root権限の奪取を実証―修正済みのカーネル不具合を組み合わせる「Big Fish」

セキュリティ企業Califの研究者Andrew Griffiths氏は2026年10月16日、OpenBSDのカーネルに存在した複数の不具合を組み合わせ、一般ユーザーの権限から管理者権限(root)を取得する実証研究「Big Fish」を公開しました。起点となったのは、約37年前のBSDソースコードにさかのぼる共有メモリの参照数管理です。OpenBSD 7.9では9月14日と30日に修正が提供されており、研究者は修正前の環境で攻撃が成立することを示しています。

今回の攻撃は、標的のOpenBSD上でコードを実行できることを前提とするローカル権限昇格です。インターネット越しに未認証でroot権限を取得できる脆弱性ではありません。

OpenBSDの権限昇格脆弱性「Big Fish」のサマリー

  • 2026年10月16日、CalifのAndrew Griffiths氏が調査結果と実証コード(PoC)を公開しました。
  • 約37年前という年数は、OpenBSD自体の存続年数ではなく、元となったBSDの共有メモリ管理コードの系譜を指しています。
  • 共有メモリの接続数を管理する符号付き16ビット整数のオーバーフローが、参照数の不整合を引き起こします。
  • 競合状態による解放済みメモリの使用(Use-after-Free)と別の範囲外書き込みを組み合わせ、カーネル内のコード実行からroot権限取得へ至る攻撃を実証しました。
  • OpenBSDの保護機構であるKARL、SMAP、SMEPが有効な状態でも成功したと研究者は報告しています。
  • OpenBSD 7.9の修正は「018: shmat」(9月14日)と「026: sysvipc」(9月30日)で、いずれも全アーキテクチャ向けのソースパッチが公開されています。
  • OpenBSD 7.8でも対応する修正「054」(9月14日)と「062」(9月30日)が公開されています。
  • 10月18日時点で参照したOpenBSDの公式errataには、今回の2件を指すCVE番号とCVSSスコアの記載はありません。実際のサイバー攻撃での悪用を確認したとの発表もありません。
項目 内容
対象 OpenBSDカーネルのSystem V共有メモリ管理など
公表日 2026年10月16日(Califの研究公表)
影響 ローカルの一般ユーザー権限からroot権限への昇格を実証
攻撃の前提 対象システム内でコードを実行できること
脆弱性の組み合わせ 整数オーバーフロー、競合状態によるUse-after-Free、範囲外書き込み
OpenBSD 7.9の修正 errata 018(9月14日)、026(9月30日)
OpenBSD 7.8の修正 errata 054(9月14日)、062(9月30日)
PoC 2026年10月16日に研究者が公開

約37年前のBSDコードにさかのぼる共有メモリの整数オーバーフロー

問題の起点は、System V共有メモリに接続しているプロセス数を管理するshm_nattchです。元の実装ではこの値が符号付き16ビット整数で管理されており、正の値として表現できる上限は32,767です。

Califによると、多数のプロセスが共有メモリへ接続すると、接続数の計数が上限を超えて負の値へ変化する場合があります。この状態で共有メモリの削除と新たな接続が競合すると、実際には使われているメモリを解放してしまう事態が生じ得ます。

研究者は、このUse-after-Freeの状態と、別の範囲外書き込みを組み合わせる攻撃を検証しました。IPマルチキャスト関連のカーネルデータなどを経由してメモリ管理構造へ影響を与え、最終的にカーネル内の制御フローを乗っ取ることでroot権限を取得したと説明しています。

「37年間放置されていたOpenBSDの脆弱性」と表現すると誤解を招きます。OpenBSDが誕生する以前のBSDソースに由来する実装が引き継がれていた、というのが研究者の説明です。

KARL・SMAP・SMEPが有効でもroot権限の奪取を実証

研究では、カーネルの配置をランダム化するKARLと、ユーザー空間のメモリに対するカーネルからの不正なアクセス・実行を制限するSMAP、SMEPが有効な状態で権限昇格に成功したと報告しています。情報漏えい脆弱性を追加で利用する必要もなかったとしています。

Califは、KARLがカーネル内の関数やデータの配置を再構成する一方で、カーネルのメモリ割り当てには予測可能な部分が残っていると指摘しました。研究者は修正パッチの適用に加え、双方向リンクリストの整合性検査、ページテーブル関連アドレスのランダム化、メモリ割り当てのランダム化などを追加の防御策として提案しています。これらは研究者による提案であり、すべての対策がOpenBSDへ導入済みという意味ではありません。

なお、PoCの公開は攻撃可能性の技術的実証を意味しますが、実際の侵害事例の発生を示すものではありません。

修正は9月に公開済み―OpenBSD 7.9・7.8のerrataを確認

OpenBSD公式の修正履歴によると、7.9向けの「018」は2026年9月14日付でshmat(4)の整数オーバーフローを防ぐ修正として公開されました。公式分類は「RELIABILITY FIX」です。

続く9月30日付の「026」は、参照数の管理ミスによってカーネルにUse-after-Freeが起こり得る問題の修正で、「SECURITY FIX」とされています。同様の修正はOpenBSD 7.8に対しても、それぞれ「054」「062」として公開されています。

系統 整数オーバーフローの修正 Use-after-Freeの修正
OpenBSD 7.9 errata 018/9月14日 errata 026/9月30日
OpenBSD 7.8 errata 054/9月14日 errata 062/9月30日

OpenBSDのerrataページでは、これらのソースコード修正はいずれも全アーキテクチャ向けとされています。一方、syspatch(8)によるバイナリ更新の提供範囲にはアーキテクチャの違いがあります。運用担当者は対象システムのリリースとCPUアーキテクチャを確認し、公式の更新手段に従って適用する必要があります。

OpenBSDを運用する企業が確認したい対応

まず対象機器・サーバーがOpenBSD 7.9または7.8を利用しているか、該当するerrataが適用済みかを確認します。バイナリパッチの対象環境ではsyspatch -lで適用済み一覧、syspatch -cで利用可能なパッチを確認でき、必要に応じてsyspatchで不足分を適用できます。カーネル修正のため、適用後は再起動計画と稼働確認も行います。ソースから管理している環境では、公式の署名付きパッチと運用手順に従ってカーネルを更新します。

今回の欠陥はローカル権限昇格のため、シェル利用者が存在する共有サーバー、複数ユーザーがコードを実行できる環境、別の脆弱性で一般ユーザー権限を奪われた後の被害拡大などが主な検討対象です。ネットワークから直接root権限を奪えると解釈して緊急対応の対象を広げるのではなく、実行権限を持つ利用者・サービスとパッチ適用状況を照合します。

脆弱性管理の進め方とパッチ適用の優先順位では、脆弱性の悪用条件や資産の重要度を踏まえた対応判断を整理しています。