深入剖析YOLOv7安全漏洞:11个高危隐患威胁关键应用

通过对YOLOv7计算机视觉框架的安全评估,发现11个安全漏洞包括远程代码执行、拒绝服务等风险,揭示开源机器学习系统在关键应用中的安全隐患与防御建议。

评估广泛使用的视觉模型安全状况:YOLOv7

摘要:我们在流行计算机视觉框架YOLOv7中发现11个安全漏洞,可导致远程代码执行(RCE)、拒绝服务和模型差异等攻击。开源ML框架快速发展但缺乏安全实践,这些风险影响模型机密性、完整性和可用性。

YOLOv7背景

YOLO(You Only Look Once)是最先进的实时目标检测系统,自2015年发布以来,其高精度和良好性能使其成为机器人、自动驾驶等关键应用的首选。YOLOv7由中科院开发,是YOLO的开源代码库实现,性能超越基于Transformer和卷积的目标检测器。

该代码库有超过3k分支,允许用户提供自定义预训练文件、模型架构和数据集。尽管是学术项目,YOLO已成为目标检测的事实标准,被Roboflow等商业和关键应用采用。

发现内容

评审发现5个高危和3个中危问题,源于以下不安全实践:

  • 代码库缺乏防御性编写,无单元测试框架,输入验证不足
  • 完全信任从外部获取的模型和配置文件
  • 危险使用权限函数引入RCE向量

高危发现包括:

  • 从PyTorch Hub等外部源下载数据集、模型pickle文件和YAML配置文件是常见做法。攻击者可通过污染这些文件危害目标机器。

威胁模型构建

采用Mozilla"快速风险评估"和NIST 800-154数据为中心威胁建模方法。评审YOLO学术论文、代码库和用户文档,识别数据类型、数据流、信任区域和威胁参与者。威胁模型考虑ML流水线独特架构,引入数据收集、模型训练和部署等新攻击面。

构建的数据流图显示三个主要威胁:数据集泄露、主机泄露和YOLO进程泄露(如向系统或依赖注入恶意代码)。

代码评审结果

通过手动和自动测试(包括自定义Semgrep规则、TorchScript跟踪检查工具和Python CodeQL查询),共发现12个安全问题(5个高危)和12个代码质量问题。所有发现表明系统缺乏防御性设计:

  1. 五个安全问题可单独导致RCE,主要源于不必要使用subprocess.check_outputevalos.system等权限函数
  2. 用户和外部数据输入验证不足,多个问题允许拒绝服务攻击(如TOB-YOLO-9,8,12)
  3. 代码库无单元测试框架(TOB-YOLO-11),缺乏防止问题复现和回归的机制

安全代码评审重点#1:YAML解析导致RCE

最显著发现是不安全YAML文件解析可能导致RCE。YOLO使用YAML文件指定模型架构,但parse_model函数通过调用eval解析未验证文件内容。攻击者操纵YAML文件可在解析时执行恶意代码,尤其危险的是这些文件常从第三方网站获取。

建议缓解措施:重写配置文件定义的架构为调用标准PyTorch模块的块类,消除eval漏洞,更好复制论文架构并提供可扩展基础。

安全代码评审重点#2:ML特定漏洞和改进

ML框架导致针对模型及相关资产机密性、完整性和可用性的新攻击途径增加:

  • YOLOv7使用pickle文件存储模型和数据集,这些文件未验证且可能来自第三方。pickle文件允许任意代码执行,建议使用safetensors等更安全格式
  • YOLOv7模型跟踪方式可能导致模型差异:部署的跟踪模型行为与原始模型不同。YOLO使用torch.jit.trace将模型转换为TorchScript格式,但包含许多跟踪器边缘案例(如输入相关控制流)。攻击者可发布仅在跟踪时表现恶意行为的模型,增加检测难度

增强YOLOv7安全性

除代码问题外,需要一系列设计和操作更改确保足够安全状况:

  • 实施包含全面单元测试和集成测试的测试框架
  • 移除高权限函数使用
  • 改进代码库开发流程
  • 强制使用安全协议(如HTTPS和RMTPS)
  • 持续更新依赖项应用上游安全修复
  • 提供用户文档说明使用不可信训练数据或网络摄像流时的潜在威胁

尽管已存在使用案例,不建议在关键应用或领域使用YOLOv7。受影响终端用户应在设计维护完成推荐更改前,禁止用户提供数据集、模型文件、配置文件等外部输入。

协调披露时间线

尽管多次尝试,未能与维护者建立联系协调修复。截至博客发布,问题仍未修复。披露时间线如下:

  • 2023年5月24日:通知维护者意图评审代码库
  • 2023年6月9日:通知已开始审计
  • 2023年7月10日:通知有多个安全发现请求讨论
  • 2023年7月26日:告知官方安全披露通知发布日期8月21日
  • 2023年11月15日:发布披露博客并向原始项目库提交问题
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计