审计Gradio 5:Hugging Face的ML GUI框架 - Trail of Bits博客
Gradio简介
Gradio是一个为构建基于Web的机器学习应用提供简单易用界面的框架。开发者只需几行代码即可创建可交互、可分享的演示程序,无需任何前端开发经验。该框架在机器学习从业者中极受欢迎,在PyPi上每月下载量超过610万次,是Stable-diffusion-webui(GitHub 14.1万星)和text-generation-webui(GitHub 4万星)等热门项目的核心引擎。
以下是最简单的Gradio接口实现示例:
|
|
Gradio架构基于输入组件、用户定义的Python转换函数和输出组件。每个输入组件都有预处理函数,负责将用户输入转换为Python函数接收的类型(如图像转为numpy数组),输出组件则通过后处理函数执行反向转换。
审计发现
Gradio服务器安全
审计团队针对服务器实现提出了关键安全问题:
- 攻击者能否从用户Gradio服务器窃取任意文件?
- 能否向服务器任意位置上传文件?
- 能否在用户内部网络发起任意请求?
- API端点、组件处理函数是否存在注入漏洞?
发现的高危漏洞包括:
- TOB-GRADIO-1/2:服务器CORS策略配置错误,在认证服务器场景中允许攻击者窃取访问令牌
- TOB-GRADIO-3:基于GET的全读SSRF漏洞,可访问用户内部网络端点
- TOB-GRADIO-10:任意文件类型上传漏洞,可托管XSS载荷
- TOB-GRADIO-13:竞争条件漏洞,可重定向用户流量至恶意服务器
- TOB-GRADIO-16:多个组件后处理函数存在任意文件泄露风险
分享功能安全
分享架构审计发现:
- TOB-GRADIO-19:Gradio API服务器root权限RCE漏洞。通过nginx配置错误暴露Docker API(端口2376),攻击者可运行特权容器完全控制主机
- TOB-GRADIO-11:frp客户端与服务器间通信缺乏强加密,可拦截修改传输数据
加固措施
审计后Gradio团队实施了全面改进:
- 移除遗留代码,精简代码库
- frp客户端与服务器通信实现加密传输
- 在CI中集成Semgrep和CodeQL安全测试工具
- 对关键函数实施模糊测试
- 自动化基础设施部署替代手动操作
总结
本次审计凸显了AI/ML领域快速演进的开源项目定期安全评估的重要性。Gradio团队通过全面实施建议措施展示了对安全的高度承诺,包括系统性地预防整类漏洞的复发机制。
此为Trail of Bits与Hugging Face持续合作的一部分,此前已完成对其AI SafeTensors库的审计工作。