CVE-2025-54381 – ⚠️ Critical SSRF Vulnerability in BentoML Allows Unauthorized Internal Cloud Metadata Access本指南旨在深入分析 BentoML 项目中的一个严重安全漏洞 (CVE-2025-54381)。我们将探讨其技术原理、潜在影响以及如何防范此类风险。 漏洞信息CVE ID:CVE-2025-54381公开日期:2025年7月30日发现者:Wiz Research Team报告对象:GitHub Advisory Database NVD严重性:严重 (Critical)CVSS v3.1 评分:9.9 / 10 受影响软件产品:BentoML (一个用于打包、分发和部署机器学习模型的Python框架)受影响版本:从1.4.0到1.4.19(包含) 的所有版本 漏洞类型类型:SSRF (服务端请求伪造Server-Side Request Forgery)CWE 类别:CWE-918 – Server-Side Request Forgery⚠️ 详细漏洞描述该漏洞存在于 BentoML 模型服务API的基于URL的文件上传功能中。具体来说BentoML 支持通过以下两种方式接收URL形式的文件输入Multipart 表单请求JSON POST 请求框架在处理这些请求时会代表服务器端发起一个HTTP GET请求来下载用户提供的URL所指向的文件但未能对用户提供的URL进行充分的验证。为何危险攻击者可以诱骗服务器向以下目标发起请求从而导致严重的安全问题访问仅限内部的服务例如指向本地的http://localhost:...或http://127.0.0.1:...。访问云服务元数据端点例如http://169.254.169.254/latest/meta-data/(AWS)http://metadata.google.internal/(GCP)访问内部IP地址段的服务例如10.0.0.0/8172.16.0.0/12192.168.0.0/16通过这些内部和云元数据端点攻击者可能窃取到IAM 凭据访问令牌服务密钥内部API信息管理后台面板 影响范围影响区域描述机密性高 — 攻击者可能窃取内部秘密和凭据完整性低 — 该漏洞目前表现为只读攻击可用性中 — 可能通过请求大文件或慢服务造成DoS️ 核心代码分析以下是对漏洞相关代码逻辑的分析展示了问题产生的根本原因。1. URL 文件处理逻辑 (示例代码)# 假设这是处理文件上传的简化代码importrequestsfromflaskimportrequestapp.route(/upload,methods[POST])defupload_file():# 从请求中获取文件来源可能是直接上传的文件也可能是一个URLfile_inputrequest.json.get(file)# 漏洞点如果输入看起来像一个URL则直接发起请求获取内容iffile_input.startswith(http://)orfile_input.startswith(https://):# 没有对URL的目标地址进行任何校验responserequests.get(file_input)# SSRF漏洞发生在这里file_contentresponse.content# ... 后续处理文件内容else:# ... 处理直接上传的文件pass代码注释分析:file_input request.json.get(file): 从用户控制的JSON请求体中获取file字段的值。if file_input.startswith(...): 简单地检查该值是否以http://或https://开头以此判断是否为远程文件。requests.get(file_input):关键风险点。直接使用用户提供的、未经验证的URL发起服务器端请求。攻击者可以将file_input设置为http://169.254.169.254/latest/meta-data/iam/security-credentials/等敏感内部地址使服务器获取并返回这些敏感信息。2. 更隐蔽的攻击载荷示例# 攻击者可能使用重定向或编码技巧来绕过简单的检查malicious_urls[http://localtest.me/,# 解析到 127.0.0.1http://169.254.169.254/,http://metadata.google.internal/,http://[::1]/,# IPv6 本地回环地址http://0.0.0.0/,# 在某些系统上可能指向本地http://10.0.0.1/,# 内部私有IP]forurlinmalicious_urls:# 如果服务器能访问这些地址则存在漏洞print(f尝试访问:{url})# 假设服务器会像上面upload_file函数一样发起请求# response requests.get(url)# print(response.text)代码注释分析:这个示例展示了攻击者可能尝试的各种URL目标是探测和访问服务器内部网络资源。localtest.me是一个通配符DNS域名总是解析到127.0.0.1常用于绕过基于域名黑名单的简单防护。IPv6地址[::1]和0.0.0.0也可能被利用来访问本地服务。直接使用云服务商元数据IP和域名是获取云实例凭据的常见手法。 安装与版本检查指南如果您正在使用BentoML请立即检查您的版本。系统要求Python 环境BentoML 包检查BentoML版本您可以通过以下命令检查当前环境中BentoML的版本pip show bentoml或在Python脚本中检查importbentomlprint(bentoml.__version__)受影响版本如果您的版本在1.4.0 到 1.4.19 (包含)之间则您的项目受到此漏洞影响。解决方案升级BentoML:立即将BentoML升级到已修复此漏洞的最新版本例如1.4.20 或更高版本。pipinstall--upgrade bentoml临时缓解措施:如果无法立即升级应考虑在网络层面如防火墙、Web应用防火墙WAF阻断从BentoML服务实例发起的、指向内部网络和云元数据端点的出站请求。 使用说明与安全建议为了安全地使用BentoML并防范SSRF漏洞开发者应遵循以下最佳实践严格验证用户输入:对于任何用户提供的URL都应进行严格的验证包括协议白名单:只允许http和https但也要谨慎对待。域名/IP黑名单/白名单:禁止访问内网IP段如127.0.0.0/810.0.0.0/8172.16.0.0/12192.168.0.0/16和云元数据端点。DNS解析检查:在发起请求前先解析URL中的域名检查其解析后的IP地址是否属于内网或黑名单范围。使用安全的HTTP客户端库:配置HTTP客户端如requests库以禁用重定向或对重定向目标进行同样的验证。最小权限原则:运行BentoML服务的进程应使用最小必要的操作系统用户和权限以限制攻击者通过SSRF漏洞所能造成的影响。网络隔离:将运行BentoML应用的服务器部署在严格隔离的网络环境中通过防火墙策略限制其对外部和内部非必要服务的访问。FINISHED6HFtX5dABrKlqXeO5PUv/84SoIoTE3firf/5vX8AZ7hgh6Wp/6BeaOjelm1hXeB更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享