Auditing Gradio 5, Hugging Face’s ML GUI framework
The Trail of Bits Blog
概述
这是一篇与Hugging Face Gradio团队的联合文章;请在此处阅读他们的公告!您可以在此处找到我们对Gradio 5安全审计的完整报告,包含所有详细发现。
Hugging Face聘请Trail of Bits审计Gradio 5,这是一个流行的开源库,提供Web界面,让机器学习(ML)开发者快速展示他们的模型。基于我们的审计发现和建议,Gradio在所有部署场景中增强了应用程序的安全默认设置。最终用户现在可以依赖增强的内置安全措施,无论他们是在本地运行应用程序、部署在Hugging Face Spaces或其他服务器上,还是使用内置共享链接。
Gradio团队对我们的工作质量和速度给予了高度评价:
Trail of Bits安全团队非常出色,审查在速度和深度上都超出了我们的预期。在两周内,他们不仅熟悉了我们相对较大的代码库(涵盖Python、JavaScript和Go),还发现了许多安全漏洞,这些漏洞需要深入理解Gradio和Hugging Face在实际构建机器学习应用程序中的使用方式。最重要的是,他们与我们合作迭代开发了缓解策略,解决了安全问题,同时不牺牲对许多Gradio开发者至关重要的易用性。
审计发现
我们的审查在Gradio 5发布前发现了八个高危问题,包括支持共享机器学习模型和界面的Gradio部署基础设施中的漏洞。我们还发现了特定Gradio服务器配置中的漏洞,如SSRF、XSS和任意文件泄露。我们不仅止于发现漏洞;还提供了预防未来漏洞的建议,例如将静态和动态分析集成到SDLC中,并为关键功能创建模糊测试。
经过审计后的修复审查,我们确信所有报告的问题都已得到充分解决,不会对2024年10月9日发布的最新版本Gradio 5构成风险。如果您运行的是旧版本的Gradio,请在命令行中运行pip install --upgrade gradio来更新您的应用程序。
本博客文章将涵盖Gradio的功能、我们的审计过程以及审计期间发现的一些问题。您也可以阅读完整报告。
Gradio简介
Gradio是一个框架,为构建基于Web的机器学习应用程序提供简单易用的界面。它使开发者能够用几行代码创建交互式和可共享的演示,无需任何先前的Web开发经验。Gradio在机器学习从业者中非常流行,在PyPi上每月下载量超过610万次,作为非常流行项目的引擎,如Stable-diffusion-webui(在GitHub上有141k星)和text-generation-webui(在GitHub上有40k星)。
让我们看看如何实现最简单的Gradio界面。
|
|
这段代码指定一个文本组件作为输入,一个名为greet的函数来转换该输入,以及另一个文本组件作为输出。运行它会创建以下网站。
Gradio界面基于输入组件、用户定义的Python函数(用于转换输入)和输出组件(用于渲染这些转换)构建。每个输入组件都有一个预处理函数,负责将用户输入转换为用户定义Python函数接收的类型(例如,将Image转换为numpy数组),每个输出组件都有一个后处理函数,执行相反的操作(例如,将numpy数组转换为Image组件)。下图直观地展示了这个过程。
Gradio包含许多预构建组件,如TextBox、Image、FileExplorer,甚至完整的Chatbot,这使得它开箱即用非常容易。
Gradio的另一个突出特点是您可以轻松地与同事或全世界共享您的演示。用户可以通过简单地调用launch函数并设置share=True来在线暴露他们的Gradio演示,这会创建一个到他们机器的隧道,并使用frp外部暴露Gradio服务器。我们将在下一节中看到更多关于如何工作的细节。
我们的审计和发现
保护Gradio需要深入思考用户体验(UX)。鉴于其简单性,不能期望Gradio用户设置CORS和CSP策略或cookie属性。此外,Gradio不是一个具有具体任务和明确定义威胁模型的“简单”后端服务器;Gradio是一个灵活的框架,支持许多用例(例如,认证与非认证服务器、本地与共享服务器、将演示嵌入其他网站的能力等)。这些原因使得实现适用于每个用例的安全默认设置更加困难。因此,我们与Gradio团队密切合作,找到了不影响开发者体验的解决方案和安全默认设置。
在审计开始时,我们将其分为两个主要任务:审查Gradio服务器实现和共享基础设施。
Gradio服务器
考虑到服务器可能外部暴露,从用户机器任意文件泄露等漏洞可能带来严重后果。
在审查Gradio服务器时,我们旨在回答以下非详尽问题列表:
- 攻击者能否从用户的Gradio服务器外泄任意文件?
- 攻击者能否将文件上传到用户Gradio服务器上的任意位置?
- 攻击者能否在用户的内部网络上发出任意请求?
- 任何Gradio API端点、组件的预处理和后处理函数或组件的@server函数是否容易受到注入攻击,可能导致远程代码执行或任意文件外泄?
- 攻击者能否绕过Gradio的服务器认证机制?
在我们的审查中,我们发现了六个高危发现,可能在特定场景下危害用户的Gradio服务器,包括:
- TOB-GRADIO-1和TOB-GRADIO-2:服务器CORS策略中的错误配置,在认证Gradio服务器的上下文中,允许攻击者窃取访问令牌并在受害者访问其恶意网站时接管受害者账户。
- TOB-GRADIO-3:基于GET的完整读取SSRF,允许攻击者发出请求并从任意端点读取响应,包括用户内部网络上的端点。
- TOB-GRADIO-10:任意文件类型上传,允许攻击者在用户的Gradio服务器上托管HTML和XSS负载。在认证Gradio服务器的上下文中,攻击者可以利用此漏洞在受害者访问攻击者的恶意网站时接管用户账户。
- TOB-GRADIO-13:竞争条件,允许攻击者将用户流量重定向到他们的服务器,并窃取上传的文件或聊天机器人对话。
- TOB-GRADIO-16:几个组件的后处理函数可能允许攻击者在非常简单的Gradio服务器配置中泄露任意文件。
共享功能
即使Gradio服务器完全安全,如果Gradio的共享架构存在缺陷,用户的数据仍可能被泄露。下图显示了共享功能是如何架构的:在步骤1中,Gradio从https://api.gradio.app/v3/tunnel-request获取frp服务器的主机和端口;然后,在步骤3中,它连接到Gradio拥有的frp服务器以建立隧道,使用户的演示可从互联网访问;最后,在步骤5中,其他用户可以连接到共享链接并访问演示。
在审查此共享功能时,我们旨在回答以下非详尽问题列表:
- Gradio API和frp服务器是否配置正确且安全?
- 共享链接是否足够随机,攻击者无法猜测?
- frp服务器通信是否加密?
在我们的审查中,我们发现了两个可能危害整个共享基础设施的高危发现,以及其他可能危害用户数据机密性和完整性的发现,包括:
- TOB-GRADIO-19:在Gradio API服务器上以root用户身份进行远程代码执行(RCE)。这允许攻击者在图的步骤2中提供恶意主机和端口,并将所有frp隧道重定向到记录所有用户流量(包括上传文件和聊天框对话)的恶意服务器。我们通过发现nginx错误配置获得了服务器root访问权限,该配置通过
2376.gradio.app域暴露了对Docker API(在端口2376上服务)的访问。获取Docker API访问权限允许攻击者运行特权容器(--privileged),挂载主机文件系统(-v /:/host/),并完全危害主机。 - TOB-GRADIO-11:frp客户端和frp服务器之间的通信缺乏强加密,允许能够拦截请求(上图中步骤6和7的请求)的攻击者读取和修改往返frp服务器的数据。
Gradio API服务器代码库包含大量来自先前版本(不依赖frp)的遗留代码和配置。审计后,Gradio团队移除了所有遗留代码, resulting in a much smaller and cleaner codebase,降低了被危害的风险。此外,frp客户端和frp服务器之间的连接(上图中连接6和7)现在已加密,防止攻击者嗅探和修改传输中的用户数据。
经验教训
Gradio团队通过全面实施我们的建议,包括防止整类漏洞复发的系统措施,展示了他们对安全的坚定承诺。
我们希望为Gradio提供一个坚实的基础来构建,而不是简单的漏洞修复列表。我们花了大量时间咨询SDLC问题,以增加对软件开发过程的信任。Gradio团队实施了我们许多建议,包括:
- 在CI中集成安全测试工具,如Semgrep和CodeQL
- 对关键功能实施模糊测试(我们在审计期间用此发现了真实问题)
- 自动部署基础设施而不是手动
- 从代码库中移除未使用的代码、不必要的配置文件和冗余脚本,以提高其可维护性和可读性
我们要感谢Gradio团队在整个审计过程中分享他们的广泛知识和专业知识。
我们对Gradio的审计强调了定期安全评估对于AI/ML领域快速发展的开源项目的重要性。这些系统通常面临与传统软件显著不同的独特漏洞,包括数据源和部署源问题。在开发过程早期识别和解决这些差异对于防止代价高昂的持久性缺陷和避免重蹈其他技术早期迭代的安全错误至关重要。
此次审查是我们与Hugging Face持续关系的一部分,此前我们审计了他们的AI SafeTensors库。在Trail of Bits,我们经常与客户合作,利用我们工程团队在多个项目中的专业知识。如果您有兴趣了解我们如何支持您的项目,请联系我们。
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News
页面内容 近期文章 使用Deptective调查您的依赖项 系好安全带,Buttercup,AIxCC的评分回合正在进行中! 使您的智能合约超越私钥风险 Go解析器中意外的安全陷阱 我们从审查Silence Laboratories的首批DKLs23库中学到了什么 © 2025 Trail of Bits. 使用Hugo和Mainroad主题生成。