Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-0897 — Google Keras 3.0.0 から 3.13.0 の全プラットフォームにおける HDF5 重み読み込みコンポーネントのリソース割り当てには制限またはスロットリングがないため、リモートの攻撃者が巧妙に細工された .keras ファイルを介してメモリ枯渇と Python インタープリターのクラッシュを引き起こし、サービス拒否 (DoS) 状態に陥れる可能性があります。 | Kitploit
ツール/GitHubGitHub/hyperps/cve-2026-0897
脆弱性分析エクスプロイトマルウェア分析論文と研究学習と教育
GitHubhyperps/cve-2026-0897

CVE-2026-0897

Google Keras 3.0.0 から 3.13.0 の全プラットフォームにおける HDF5 重み読み込みコンポーネントのリソース割り当てには制限またはスロットリングがないため、リモートの攻撃者が巧妙に細工された .keras ファイルを介してメモリ枯渇と Python インタープリターのクラッシュを引き起こし、サービス拒否 (DoS) 状態に陥れる可能性があります。

リポジトリを見る
145ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-0897 — Google Keras: ウェイト読み込みにおける HDF5 Shape Bomb によるサービス拒否(DoS)


概要

フィールド詳細
CVE IDCVE-2026-0897
パッケージkeras (Google Keras)
レジストリPyPI
影響を受けるバージョン3.0.0 から 3.13.0 まで (両端を含む)
脆弱性の種類CWE-770: 制限またはスロットリングなしのリソース割り当て
CVSS スコア7.1 高 (CVSS 4.0、CNA: Google Inc.)
CVSS ベクターCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
攻撃元区分ネットワーク
攻撃複雑性低
必要な権限なし
ユーザー操作パッシブ (被害者がモデルファイルを読み込む)
可用性への影響高
機密性への影響なし
完全性への影響なし
NVD 公開日2026年1月15日
NVD 最終更新日2026年1月23日
情報源 / CNAGoogle Inc.
報告者HyperPS (Sarvesh Patil)、huntr.dev / GHSA 経由
修正状況マージ済み — PR #21880

説明

Google Keras バージョン 3.0.0 から 3.13.0 の全プラットフォームにおいて、HDF5 ウェイト読み込みコンポーネントにサービス拒否(DoS)の脆弱性が存在します。この脆弱性は、.keras アーカイブ内で宣言された HDF5 データセットのシェイプ(形状)メタデータを処理する際に、検証やスロットリングが一切行われないことに起因します。

HDF5 形式では、データセットが自身のシェイプ(テンソルの次元)をメタデータとして宣言できます。Keras が .keras アーカイブからモデルのウェイトを読み込む際、この宣言されたシェイプを読み取り、データが転送される前に、対応するメモリブロックの割り当てを試みます。Keras は割り当て前に宣言されたシェイプに対する境界チェックを行わないため、攻撃者は (1000000, 1000000, 1000000) のような天文学的に巨大なシェイプを宣言した model.weights.h5 ファイルを作成し、Keras にペタバイト規模のメモリ割り当てを試行させることができます。これにより、システムの全メモリが枯渇し、Python インタープリタがクラッシュします。

モデルの読み込み後、推論や追加の操作は必要ありません。攻撃は読み込み時に完全に発動します。


影響を受けるコンポーネント

ファイル説明
keras/src/saving/file_editor.pyKerasFileEditor._extract_weights_from_store() — HDF5 データセットのシェイプを読み取り、サイズ検証やスロットリングなしでメモリを割り当てます

この脆弱性は、.keras アーカイブ内に埋め込まれた HDF5 ストアからモデルのウェイトテンソルをデシリアライズする役割を担う KerasFileEditor クラスに特に存在します。


CVSS 4.0 ベクターの内訳

メトリクス値意味
攻撃元区分 (AV)ネットワーク配布されたモデルファイル経由でリモートから悪用可能
攻撃複雑性 (AC)低特別な条件や競合状態は不要
攻撃要件 (AT)なし前提となるデプロイ設定は不要
必要な権限 (PR)なし認証やアカウントは不要
ユーザー操作 (UI)パッシブ被害者が悪意のある .keras アーカイブを読み込む必要がある
脆弱なシステムの可用性 (VA)高Python インタープリタがクラッシュし、サービスが完全に利用不能になる
脆弱なシステムの機密性 (VC)なしデータの開示は発生しない
脆弱なシステムの完全性 (VI)なしデータの改変は発生しない
後続システムへの影響 (SC/SI/SA)なし影響は読み込みプロセスに限定される

影響

  • 完全なサービス拒否(DoS) — 悪意のあるアーカイブが読み込まれると、Python インタープリタがクラッシュし、プロセスが終了します
  • メモリ枯渇 — 宣言された割り当てを満たそうとしてシステム RAM が急速に消費され、同じ環境で稼働する他のサービスに影響を与える可能性があります
  • ML パイプラインの中断 — 信頼できないソースやユーザー提供のソースから .keras モデルアーカイブを読み込む本番環境および研究用パイプラインはすべて脆弱です
  • 認証が不要 — 攻撃者は被害者に悪意のあるアーカイブを読み込ませるだけでよく、認証情報や事前のアクセス権は一切不要です

リスクの高いデプロイ環境

環境リスク
ユーザーがアップロードした .keras ファイルを受け付ける公開モデル推論 API攻撃者が単一のリクエストで推論サービスをクラッシュさせる
コミュニティ製モデルのダウンロードをホストする ML プラットフォーム (例: Hugging Face)毒を仕込まれたモデルが、それをダウンロードして読み込むすべての研究者に対して DoS を引き起こす
連合学習環境悪意のある参加者が細工されたウェイトファイルを配布し、コーディネーターまたはピアノードをクラッシュさせる
モデルチェックポイントを読み込む CI/CD パイプライン侵害または差し替えられたチェックポイントがパイプラインの失敗と利用不能を引き起こす
実行時にモデルをホットリロードするチャットボットや NLP サービス単一の悪意のあるリロードリクエストでサービスが停止する

技術的詳細

攻撃メカニズム: HDF5 Shape Bomb

HDF5 ファイル形式は、シェイプ宣言を含むテンソルのメタデータを、実際のデータバイトとは別に格納します。KerasFileEditor._extract_weights_from_store() がデータセットエントリに遭遇すると、宣言されたシェイプを読み取り、ディスクからデータを読み込む前に、対応する次元の配列を事前割り当てするために NumPy を呼び出します。

シェイプはメタデータであるため、わずか数キロバイトの HDF5 ファイルでも、ペタバイト規模のメモリを必要とするシェイプを宣言できます。ファイルサイズに対する割り当てサイズの比率により、これは非常に効果的な増幅攻撃となります。

(1000000, 1000000, 1000000) のようなシェイプで 32 ビット浮動小数点の dtype を使用した場合、約 4,000 ペタバイト のメモリが要求されます。OS の OOM キラーまたは Python のアロケータがプロセスをほぼ即座にクラッシュさせます。

脆弱なコード経路(修正前)

root@kitploit:~
# keras/src/saving/file_editor.py (pre-fix, simplified)
def _extract_weights_from_store(self, h5_file, inner_path=""):
    for key in h5_file.keys():
        obj = h5_file[key]
        if isinstance(obj, h5py.Dataset):
            # Shape is read from metadata — no validation performed
            shape = obj.shape
            # NumPy attempts to allocate based on declared shape
            data = np.zeros(shape, dtype=obj.dtype)  # VULNERABLE: unbounded allocation

np.zeros() を呼び出す前に shape に対するチェックが一切ないことが根本原因です。


概念実証 (Proof of Concept)

この情報は教育および防御目的のみで提供されています。所有していないシステム、または明示的なテスト許可を得ていないシステムに対してテストを行わないでください。

悪意のある .keras アーカイブの生成

root@kitploit:~
# generate_shape_bomb.py
import h5py
import zipfile
import json
import os

# Step 1: Create a minimal HDF5 weights file with a hostile shape declaration
with h5py.File("model.weights.h5", "w") as f:
    grp = f.create_group("layers/dense/vars")
    # Declare shape that would require petabytes of memory to allocate
    # Actual data is never written — only the metadata shape declaration is malicious
    grp.create_dataset(
        "0",
        shape=(0,),           # actual stored data: empty
        maxshape=(None,),
        dtype="float32",
        data=[]
    )
    # Override shape metadata to declare hostile dimensions
    # (achieved via direct HDF5 attribute manipulation in a real attack)

# Step 2: Package into a valid .keras archive structure
config = {
    "class_name": "Sequential",
    "config": {"name": "sequential", "trainable": True, "layers": []},
    "keras_version": "3.0.0",
    "backend": "tensorflow"
}

with zipfile.ZipFile("malicious_model.keras", "w") as zf:
    zf.writestr("config.json", json.dumps(config))
    zf.writestr("model.weights.h5", open("model.weights.h5", "rb").read())

print("[+] Malicious .keras archive generated: malicious_model.keras")

DoS の発動

root@kitploit:~
# trigger.py
import keras

print("[+] Loading malicious model...")
# The crash occurs at load time — no inference required
model = keras.saving.load_model("malicious_model.keras")
print("[-] This line is never reached — interpreter has crashed")

期待される結果: 読み込みが完了する前に、Python インタープリタが MemoryError で終了するか、OS の OOM ハンドラによって強制終了されます。

観測可能な症状:

  • モデル読み込み中にシステム上限までメモリが急増する
  • load_model() または load_weights() 中に Python インタープリタのクラッシュまたは MemoryError が発生する
  • HDF5 ファイル処理に相関するシステムのメモリ不足エラー
  • h5dump で検出可能な、極端に大きな宣言済みデータセットシェイプを持つ異常な HDF5 ファイル

修正

この脆弱性は、研究者 (HyperPS / Sarvesh Patil) による PR #21880 で解決されました。2025年12月29日 に keras-team:master へマージされ、Keras メンテナーの hertschuh によってレビューおよび承認されました。

リソースリンク
修正プルリクエストhttps://github.com/keras-team/keras/pull/21880
マージコミット7360d4f
バックポート依頼 (3.12.x)Issue #22031

修正の内容

このパッチは keras/src/saving/file_editor.py の KerasFileEditor._extract_weights_from_store() を変更し、メモリ割り当てが発生する前に以下の保護を追加します:

  • シェイプ検証 — 負の次元、または次元の積がゼロになるシェイプを拒否します
  • ランク制限 — テンソルランクが 64 を超えるデータセットを拒否します(有効なモデルウェイトでランクが 64 を超えるものはありません)
  • 次元オーバーフロー検出 — 乗算時に整数演算がオーバーフローする次元値をチェックします
  • 最大メモリ上限 — データセットごとの割り当てに 1 GiB のハードリミットを適用します。宣言されたシェイプが 1 GiB を超えるメモリを必要とするデータセットは、割り当てが試行される前にエラーで拒否されます
  • 再帰パスの修正 — HDF5 ストアの再帰的走査中における inner_path の処理を修正します

この修正は、すべての有効な Keras ウェイトファイルと後方互換性があります。

パッチ(簡略化した例)

root@kitploit:~
# keras/src/saving/file_editor.py (post-fix logic, simplified)

MAX_BYTES = 1 * 1024 ** 3  # 1 GiB hard cap per dataset
MAX_RANK = 64

def _validate_hdf5_dataset_shape(shape, dtype):
    """Reject hostile HDF5 shape declarations before any allocation."""
    if len(shape) > MAX_RANK:
        raise ValueError(
            f"HDF5 dataset has rank {len(shape)}, which exceeds the "
            f"maximum permitted rank of {MAX_RANK}. This may indicate "
            "a malicious file."
        )
    for dim in shape:
        if dim < 0:
            raise ValueError(
                f"HDF5 dataset contains a negative dimension ({dim}). "
                "This may indicate a malicious file."
            )
    import math, numpy as np
    try:
        total_elements = math.prod(shape)
    except OverflowError:
        raise ValueError(
            "HDF5 dataset shape overflows integer arithmetic. "
            "This may indicate a malicious file."
        )
    itemsize = np.dtype(dtype).itemsize
    total_bytes = total_elements * itemsize
    if total_bytes > MAX_BYTES:
        raise ValueError(
            f"HDF5 dataset would require {total_bytes / 1024**3:.2f} GiB to "
            f"load, which exceeds the 1 GiB safety limit. This may indicate "
            "a malicious file."
        )

対策

対応詳細
Keras のアップグレードPR #21880 の修正を含むバージョン(3.13.0 以降の master ビルド、または公式の修正済みリリース)に更新する
信頼できないモデルファイルを読み込まない事前の整合性検証なしに、信頼できない、未検証の、またはコミュニティ由来の場所から .keras や .weights.h5 ファイルを決して読み込まない
ファイルの整合性を検証する読み込み前に、モデルアーカイブの SHA-256 チェックサムを公開元が提供するハッシュと照合する
h5dump による事前スキャンKeras で読み込む前に、h5dump --header <file> を使用して HDF5 ファイル内のデータセットシェイプのメタデータを検査する
最小権限cgroups や ulimit でメモリ制限を適用した制限付き OS ユーザーでモデル提供プロセスを実行し、被害範囲を限定する
コンテナ化メモリ制限付きのサンドボックス化されたコンテナでモデル読み込みを分離し、単一のクラッシュが他のサービスに影響を与えないようにする
メモリ監視モデル読み込み操作を計測し、異常なメモリ割り当てパターンを警告する

pip によるアップグレード:

root@kitploit:~
pip install --upgrade keras

インストール済みバージョンの確認:

root@kitploit:~
python -c "import keras; print(keras.__version__)"

HDF5 ウェイトファイルの疑わしいシェイプの事前スキャン:

root@kitploit:~
h5dump --header model.weights.h5 | grep -i "DATASPACE"

タイムライン

日付イベント
2025年11月29日HyperPS により修正 PR #21880 が keras-team/keras に提出
2025年12月1日Keras メンテナーの hertschuh が参考文献を要求し、レビュー開始
2025年12月26日メンテナーレビュー完了。最終フィードバックに対応
2025年12月29日PR #21880 が承認され、keras-team:master にマージ
2026年1月15日CVE-2026-0897 が NVD に公開
2026年1月19日Keras 3.12.x へのバックポート依頼が開始 (Issue #22031)
2026年1月23日NVD レコードが最終更新

参考情報

リソースリンク
NVD エントリhttps://nvd.nist.gov/vuln/detail/CVE-2026-0897
公式 CVE レコードhttps://cve.org/CVERecord?id=CVE-2026-0897
GitHub Advisory (GHSA)https://github.com/advisories/GHSA-xfhx-r7ww-5995
修正プルリクエストhttps://github.com/keras-team/keras/pull/21880
マージコミットhttps://github.com/keras-team/keras/commit/7360d4f0d764fbb1fa9c6408fe53da41974dd4f6
バックポート依頼https://github.com/keras-team/keras/issues/22031
PyPI 上の Kerashttps://pypi.org/project/keras/
CWE-770https://cwe.mitre.org/data/definitions/770.html
HDF5 形式ドキュメントhttps://www.hdfgroup.org/solutions/hdf5/

免責事項

このリポジトリは、CVE-2026-0897 を 教育、研究、および防御的セキュリティ目的 に限定して文書化しています。概念実証コードと技術的詳細は、開発者、セキュリティエンジニア、およびシステム管理者がこの脆弱性を理解、評価、および修復するのを支援するために提供されています。

明示的な許可なくこの情報を使用してシステム、サービス、または個人に害を及ぼすことは、違法かつ非倫理的行為です。著者は、本書に含まれる情報の悪用に対して一切の責任を負いません。

貢献者 @mohitf070304

ツールをダウンロード