Gradio 5 发布安全审计结果,修复 Trail of Bits 发现的四类场景漏洞
A Security Review of Gradio 5
Gradio 团队公布由 Trail of Bits 对 Gradio 5 所做的独立安全审计,相关漏洞均在 Gradio 5.0 发布前修复并通过验证。
Gradio 5 与 Trail of Bits 的安全审计公开了四类场景下的漏洞清单与修复方式,可供自建 ML 应用时对照排查。
我们审计了 Gradio 5,确保您的机器学习应用安全无虞!
近年来,Gradio(每月 Pypi 安装量超过 600 万次)已成为用 Python 构建机器学习 Web 应用的默认方式。只需几行代码,您就可以为图像生成应用、聊天机器人或任何其他类型的机器学习应用创建用户界面,并且可以使用 Gradio 内置的分享链接或 HF Mirror 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 和主题
- 在大量浏览器和设备上可靠运行
……即使您不是扩展、无障碍或 UI/UX 方面的专家!
现在,我们将 Web 安全加入这个列表。我们请知名网络安全公司 Trail of Bits 对 Gradio 进行独立审计。他们发现的安全问题都在 Gradio 5 发布前修复了。
这意味着您用 Gradio 5 构建的机器学习应用在 Web 安全方面将遵循最佳实践,无需对代码做任何重大修改。
为什么要进行安全审计?
在过去几年中,Gradio 团队与社区合作,在发现安全漏洞时进行修补。但随着 Gradio 越来越受欢迎(目前 HF Mirror Spaces 上有超过 470,000 个 Gradio 应用),确保安全性变得更加重要。
因此,在 Gradio 5 中,我们决定采取不同的方法——对 Gradio 代码库进行先发制人的安全审计,以便您用 Gradio 5 构建的机器学习应用默认就是安全的。
我们请 Trail of Bits 对 Gradio 进行独立且全面的审计。他们的人工智能和应用安全专家团队在以下 4 种常见场景中发现了 Gradio 代码库中的安全风险:
- 本地运行的 Gradio 应用
- 部署在 HF Mirror 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 服务器环境下,会允许攻击者在受害者访问其恶意网站时窃取访问令牌并接管受害者的账户。
部署在 HF Mirror Spaces 或其他服务器上的 Gradio 应用
TOB-GRADIO-3:一种基于完整读取 GET 的 SSRF,会允许攻击者向任意端点(包括用户内部网络上的端点)发起请求并读取其响应。
TOB-GRADIO-10:任意文件类型上传,会允许攻击者在用户的 Gradio 服务器上托管 XSS 载荷。在已认证的 Gradio 服务器环境下,攻击者可利用此漏洞在受害者访问攻击者的恶意网站时接管用户账户。
TOB-GRADIO-13:一种竞态条件,允许攻击者将用户流量重路由到其服务器,并窃取上传的文件或聊天机器人对话。
TOB-GRADIO-16:若干组件的后处理函数在非常简单的 Gradio 服务器配置下可能允许攻击者泄露任意文件。
通过内置分享链接共享的 Gradio 应用
TOB-GRADIO-19:通过暴露了未认证 docker API 的 nginx 配置错误,在 Gradio API 服务器上以 root 用户身份实现远程代码执行(RCE)。这允许攻击者在示意图第 2 步中提供恶意主机和端口,并将所有 frp 隧道重定向到恶意服务器,从而记录包括上传文件和聊天框对话在内的所有用户流量。
TOB-GRADIO-11:frp-client 与 frp-server 之间的通信缺乏健壮的加密,使能够拦截请求(上图中第 6 步和第 7 步的请求)的攻击者可以读取和修改往返 frp-server 的数据。
源自 Gradio CI 流水线的供应链漏洞
TOB-GRADIO-25:Gradio 仓库中的若干 GitHub Actions 工作流使用了固定到标签或分支名称而非完整提交 SHA 的第三方 action。这可能允许恶意行为者静默修改 action,进而可能篡改应用发布或泄露机密。
另外,一位 GitHub 安全研究员报告称,如果攻击者触发某个工作流并巧妙地转储 GitHub runner 的内存,我们的 GitHub actions 可能允许执行不受信任的代码并窃取机密。
展望未来
我们非常感谢 Trail of Bits 对 Gradio 进行的全面安全审计,并验证了我们为 Gradio 5 所采取的缓解措施。
展望未来,我们计划继续与安全社区合作,以识别和缓解 Gradio 中的安全问题。我们还为测试套件添加了安全单元测试,专门设计了用于识别潜在漏洞的模糊测试,并在 CI 中使用 Semgrep 等静态分析工具来检测代码中的常见安全问题并防止安全回归。
我们承诺,在继续开发 Gradio 5(我们有很多计划!)的过程中,我们会以优先考虑安全的方式进行,从而尽我们的努力让机器学习应用更好、更安全。
立即安装 Gradio 5:
pip install --upgrade gradio
然后开始构建您的第一个 Gradio 5 应用。
来源:Hugging Face Blog · hf-mirror.com
