本文へ移動
English version →
重大 9.2 急ぎ度: 早めに

Botanに脆弱性、FFI経由でメモリ破壊の恐れ、修正版あり

暗号ライブラリBotanのC APIに、メモリ破壊につながる脆弱性が見つかりました。ただし該当するのは、外部から受け取ったアルゴリズム名をそのままC APIに渡すアプリだけで、範囲は限られます。自社製品や社内ツールがBotanを組み込んでいるかを確認し、該当すれば修正版へ更新してください。

CVE-2026-118769 公開 生成 AI で作成
画像は生成 AI で作成したイメージです

急ぎ度: 早めに

CVSS v4は9.2のcriticalですが、影響を受けるのは限られた使い方のアプリだけで、修正版の3.13.0がすでに出ています。

関係があるか

Botanを組み込んで自社でアプリやサービスを開発している組織が対象です。なかでも、C API(FFI)経由でBotanを呼び出すものは確認が必要です。C++ APIだけを使っている場合と、CBCやCTRなど通常使われるモードだけを使っている場合は、影響を受けません。

製品影響を受ける版直った版
Botan(randombit/botan) 2.1.0から3.13.0より前の版 3.13.0

確かめ方

  1. 1利用中のBotanの版を確認し、2.1.0以上3.13.0未満に当たるかを見る。静的リンクや製品に同梱された版も対象にする。
  2. 2ソースコードでbotan_block_cipher_block_sizeと、ブロック暗号を初期化するC APIの呼び出しを検索し、C APIを使っているかを確認する。
  3. 3C APIを使っている場合は、アルゴリズム名やモードの文字列が外部(利用者やネットワーク)からの入力で決まる作りになっていないかを見る。
  4. 4FFI経由でECBモードを直接使っている箇所がないかを確認する。

何が起きたか

暗号ライブラリBotanのC API経由の処理で、呼び出し側が確保するメモリが必要量より小さくなり、メモリ破壊につながる脆弱性が見つかりました。2026年10月29日に公開され、ベンダーのアドバイザリで修正版が案内されています。

原因は、C APIの関数botan_block_cipher_block_sizeにあります。この関数は暗号のブロックサイズをsize_tからintに変換して返しますが、変換の前に範囲を確認していませんでした。ブロックサイズが大きい暗号では値が切り詰められ、実際より小さい数が呼び出し側に伝わります。

呼び出し側はその値をもとにバッファを確保します。確保した量が足りないまま後続のブロック処理が進むと、バッファの外を読み書きします。分類されているCWEは、範囲外の読み取り(CWE-125)、整数の変換エラー(CWE-681)、範囲外の書き込み(CWE-787)の3つです。

攻撃の流れ

  1. 1

    暗号名を指定

    外部から受け取るアルゴリズム指定の文字列で、ブロックサイズが可変の暗号が選ばれます。

  2. 2

    サイズが切り詰め

    C APIが返すブロックサイズがintへの変換で小さくなります。

  3. 3

    不足した確保

    呼び出し側が、実際に必要な量より小さいバッファを確保します。

  4. 4

    範囲外へ読み書き

    後続のブロック処理がバッファの外にアクセスし、メモリが破壊されます。

公開されている情報をもとにした流れの例です。

どう悪用されるか

ベクターでは、ネットワーク経由で、認証なし、利用者の操作なしで悪用できると評価されています。ただし攻撃の成立には前提があり、アプリがアルゴリズムのパラメーター文字列を外部から受け付けていること、FFIのraw ECBモードを使っていること、の両方が必要です。攻撃者は、この入力を通じてブロックサイズが可変のLionを選べる状態でなければなりません。

悪用された場合はメモリ破壊が起き、機密性・完全性・可用性のすべてに高い影響があると評価されています。実際の結果は、アプリの作りや実行環境によって、異常終了から情報の読み出しや書き換えまで幅があると考えられます。

今すぐやること

  1. 1

    利用しているBotanの版を洗い出す

    自社開発のアプリ、社内ツール、同梱している製品で、Botanの版とC APIの利用有無を一覧にします。OSのパッケージで入れている場合は、ディストリビューターの案内も見ます。

    botan version
  2. 2

    C APIの利用箇所と入力経路を確認する

    FFIでブロック暗号を扱う箇所を特定し、アルゴリズム名やモードが外部入力で決まるかを調べます。決まる箇所を優先して扱います。

  3. 3

    修正版に更新する

    該当する版を使っている場合は、修正版のBotanに更新し、アプリを再ビルドして配布します。静的リンクのアプリは、再ビルドしないと修正が反映されません。

  4. 4

    更新後に暗号処理の動作を確認する

    更新後は、既存の暗号化・復号の処理が従来どおり動くかをテスト環境で確認してから本番に反映します。

すぐ更新できないとき

すぐに更新できない場合は、外部から受け取ったアルゴリズム名やモードの文字列をそのままC APIに渡さないようにします。使ってよい暗号とモードを、AESとCBCやCTRの組み合わせなど、あらかじめ決めた一覧に限定する方法が有効です。FFIのraw ECBモードを使っている箇所は、通常のモードに置き換えられないかも検討してください。呼び出し側で、返されたブロックサイズが想定した範囲かを検査する方法もあります。

背景

Botanは、暗号処理を自社のソフトウェアに組み込むために使うC++のライブラリです。C APIは、C++以外の言語や既存のCのコードから暗号機能を呼ぶための入り口で、利用する側は、返されたブロックサイズを信じてバッファを確保します。今回の問題は暗号の計算そのものではなく、この入り口で数値を受け渡す部分にありました。

AESのようにブロックサイズが固定の暗号なら、値がintに収まらなくなることはありません。問題になるのは、ブロックサイズを可変にできるLionのような暗号を選べる場合だけです。つまり、脆弱性のあるコードを持っていることよりも、そこに到達する入力をアプリが外部に開いているかどうかで、影響が決まります。

よくある質問

Q.Botanを直接使った覚えがありません。確認は不要ですか。
A.不要とは言い切れません。ほかのソフトウェアや製品がBotanを内部で組み込んでいることがあります。ソフトウェア部品表(SBOM)や依存関係の一覧があれば、Botanが含まれていないかを検索してください。組み込んでいる製品が見つかったら、提供元に影響の有無を問い合わせます。

まだ分かっていないこと

  • 実際の攻撃で悪用された事例や、攻撃コードの公開状況は公表されていません。
  • 2.x系に対する修正版が出るかどうかは公表されていません。2.1.0以降の旧版を使っている場合は、ベンダーのアドバイザリで最新の案内を確認してください。

この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。

影響パッケージ

種類パッケージ影響を受ける版直った版
randombit botan — —
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

Botan is a C++ cryptography library. From 2.1.0 until 3.13.0, the Botan C API function botan_block_cipher_block_size converted a size_t block size to int without a bounds check. In an application that accepts external algorithm parameter strings and uses the FFI raw ECB mode, an attacker can select the variable-block-size Lion cipher so that the reported size is truncated, the caller allocates insufficient memory, and later block processing causes memory corruption. The C++ API and normally used C API modes such as CBC and CTR are unaffected. This issue is fixed in version 3.13.0.

出典: CVE.org (CVE Program・cvelistV5) NVD

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく