Gradio 5 的安全审查

发布于 2024 年 10 月 10 日
在 GitHub 上更新

我们对 Gradio 5 进行了审计,以确保您的机器学习应用程序安全!

在过去几年中,Gradio(每月 Pypi 安装量超过 600 万)已成为在 Python 中构建机器学习 Web 应用程序的默认方式。只需几行代码,您就可以为图像生成应用程序、聊天机器人或任何其他类型的机器学习应用程序创建用户界面,并使用 Gradio 的内置共享链接或 Hugging Face Spaces 与他人共享。

import gradio as gr
def generate(seed, prompt):  
    ...  
    return image
    
# gr.Interface creates a web-based UI
gr.Interface(
    generate,   
    inputs=[gr.Slider(), gr.Textbox()],  
    outputs=[gr.Image()]
).launch(share=True# share=True generates a public link instantly

我们对 Gradio 的目标是让开发者能够构建开箱即用且适用于机器学习用例的 Web 应用程序。这意味着您可以作为开发者轻松构建以下应用程序:

  • 轻松扩展到大量并发用户
  • 尽可能多的用户可以访问
  • 提供一致的用户界面、用户体验和主题
  • 在大量浏览器和设备上稳定运行

……即使您不是扩展、可访问性或 UI/UX 方面的专家!

现在,我们将 **Web 安全** 添加到此列表中。我们邀请了著名的网络安全公司 Trail of Bits 对 Gradio 进行独立审计。他们发现的所有安全问题在 Gradio 5 发布之前都已修复。

这意味着您使用 Gradio 5 **构建**的机器学习应用程序**将在 Web 安全方面遵循最佳实践**,而无需对您的代码进行任何重大更改。

为什么进行安全审计?

在过去几年中,Gradio 团队与社区合作,修补发现的安全漏洞。但随着 Gradio 越来越受欢迎(Hugging Face Spaces 上目前有超过 470,000 个 Gradio 应用程序),确保安全性变得更加重要。

因此,在 Gradio 5 中,我们决定采用不同的方法——对 Gradio 代码库进行**预防性**安全审计,以便您使用 Gradio 5 构建的机器学习应用程序默认是安全的。

我们邀请 Trail of Bits 对 Gradio 进行独立和全面的审计。他们的 AI 和应用程序安全专家团队在 4 种常见场景中识别了 Gradio 代码库中的安全风险:

  • 本地运行的 Gradio 应用程序
  • 部署在 Hugging Face Spaces 或其他服务器上的 Gradio 应用程序
  • 通过内置共享链接共享的 Gradio 应用程序
  • 源自 Gradio CI 流水线的供应链漏洞

然后,我们与 Trail of Bits 密切合作,为这些风险确定缓解策略。Gradio 的简单易用性虽然对开发者有益,但也带来了独特的安全挑战,因为我们不希望开发者需要设置 CORS 和 CSP 策略等复杂的安全措施。

在合作结束时,我们修复了 Trail of Bits 发现的所有安全风险。所有修复都经过 Trail of Bits 的验证,并已包含在 Gradio 5.0 版本中。虽然无法证明不存在安全漏洞,但这对于确保您的 Gradio 应用程序安全迈出了重要一步。

主要发现

我们将在下文概述 Trail of Bits 发现的与上述 4 种场景对应的主要安全漏洞。为了透明和开源精神,我们正在**公开完整的安全报告**,报告中提供了每个问题的更多详细信息。

本地运行的 Gradio 应用程序

  • **TOB-GRADIO-1** 和 **TOB-GRADIO-2**:服务器 CORS 策略配置错误,在已认证的 Gradio 服务器上下文中,攻击者可能在受害者访问恶意网站时窃取访问令牌并接管受害者账户。

部署在 Hugging Face Spaces 或其他服务器上的 Gradio 应用程序

  • **TOB-GRADIO-3**:一个基于 GET 的完整读取 SSRF,允许攻击者向任意端点(包括用户内部网络上的端点)发出请求并读取响应。

  • **TOB-GRADIO-10**:任意文件类型上传,允许攻击者在用户的 Gradio 服务器上托管 XSS 有效负载。在已认证的 Gradio 服务器上下文中,攻击者可能在受害者访问攻击者的恶意网站时利用此漏洞接管用户账户。

  • **TOB-GRADIO-13**:一个竞争条件,允许攻击者将用户流量重定向到其服务器并窃取上传的文件或聊天机器人对话。

  • **TOB-GRADIO-16**:在非常简单的 Gradio 服务器配置中,几个组件的后处理功能可能允许攻击者泄露任意文件。

通过内置共享链接共享的 Gradio 应用程序

  • **TOB-GRADIO-19**:通过 nginx 配置错误导致 Gradio API 服务器上以 root 用户身份执行远程代码 (RCE),该配置错误暴露了未经认证的 docker API。这允许攻击者在图中的第 2 步提供恶意主机和端口,并将所有 frp 隧道重定向到记录所有用户流量(包括上传文件和聊天框对话)的恶意服务器。

  • **TOB-GRADIO-11**:frp-client 和 frp-server 之间通信中缺乏健壮的加密,允许能够拦截请求(图上第 6 和第 7 步中的请求)的攻击者读取和修改进出 frp-server 的数据。

源自 Gradio CI 流水线的供应链漏洞

  • **TOB-GRADIO-25**:Gradio 仓库中的几个 GitHub Actions 工作流使用固定到标签或分支名称而不是完整提交 SHA 的第三方 Actions。这可能允许恶意行为者悄悄修改 Actions,从而可能导致应用程序发布被篡改或秘密泄露。

  • 此外,一位 GitHub 安全研究员报告称,如果攻击者触发工作流并巧妙地转储 GitHub 运行器的内存,我们的 GitHub actions 可能允许执行不受信任的代码和秘密泄露。

 

前景展望

我们非常感谢 Trail of Bits 对 Gradio 进行了全面的安全审计,并验证了我们为 Gradio 5 实施的缓解措施。

展望未来,我们计划继续与安全社区合作,以识别和缓解 Gradio 中的安全问题。我们还在测试套件中添加了安全单元测试、专门用于识别潜在漏洞的模糊测试,并在 CI 中使用 Semgrep 等静态分析工具来检测代码中的常见安全问题并防止安全回溯。

我们致力于确保在继续开发 Gradio 5(我们有很多计划!)的同时,以优先考虑安全的方式进行,从而为使机器学习应用程序更好、更安全贡献我们的一份力量。

立即安装 Gradio 5

pip install --upgrade gradio

并开始构建您的第一个 Gradio 5 应用程序

社区

注册登录以发表评论