抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

TensorFlow 出现任意代码执行漏洞,团队宣布撤销对 YAML 的支持

2021 年 9 月 02 日

TensorFlow出现任意代码执行漏洞,团队宣布撤销对YAML的支持

TensorFlow 的维护,任重而道远。


TensorFlow 是一个庞大而复杂的系统,它依赖于大量的第三方库,例如numpylibjpeg-turbo、PNG parsers、protobuf)。TensorFlow 或其依赖库可能包含一些漏洞,这些漏洞可能允许触发特殊输入造成的意外或危险行为。


日前,由于存在任意代码执行漏洞,谷歌 TensorFlow 团队宣布已撤销对 YAML 的支持。


YAML 是一个用于在进程和应用程序之间存储数据和传递对象的通用格式。许多Python应用程序使用 YAML 来序列化和反序列化对象。


根据GitHub 上的公告,TensorFlow 和 Keras(TensorFlow 的包装库)使用不安全的函数来反序列化 YAML 编码的机器学习模型。


一条概念验证显示该漏洞被利用来返回敏感系统文件的内容:



“鉴于支持 YAML 格式所牵扯的工作量很大,所以我们暂时将其删除,”该库的维护者这样说道。

反序列化不安全

“对于用 Python、PHP 和 Java 等语言编写的代码而言,反序列化漏洞是一个很大的攻击面”发现该问题的安全研究员 Arjun Shibu 在接受 Daily Swig 采访时说道。


“我在 TensorFlow 中搜索了 Pickle 和 PyYAML 反序列化模式,令人惊讶的是,我发现了对危险函数 yaml.unsafe_load()的调用 。”


该函数直接加载 YAML 输入而不对其进行清理,这就可能让恶意代码注入到数据中。


不幸的是,不安全的反序列化已蔚然成风。


“使用类似 Grep.app 这样的代码搜索应用程序进行进一步研究,我发现数以千计的项目/库在未经验证的情况下反序列化 Python 对象,”Shibu 说道。“其中大多数是特定于机器学习的,并将用户输入作为参数。”

对机器学习应用的影响

序列化的使用在机器学习应用中非常普遍。训练模型是一个昂贵且缓慢的过程。因此,开发人员经常使用预先训练好的模型进行训练,这些模型已经存储在 YAML 或其他由 TensorFlow 等机器学习库所支持的格式中。


“由于 ML 应用程序通常接受来自用户的模型配置,因此我感觉这个漏洞会很常见,这就使得很大一部分产品面临风险,”Shibu 说。


关于 YAML 漏洞,IBM Research 的 RPI-IBM AI 研究合作首席科学家 Pin-Yu Chen 告诉 The Daily Swig:


“在我看来,大多数基于的 AI/ML 服务都需要 YAML 文件来指定配置——所以我认为需要大量的安全指示。”


许多围绕机器学习安全性的研究都集中在对抗性攻击上 ——修改机器学习模型上的数据片段。但这一最新发现提醒我们,与所有其他应用程序一样,安全地编写代码是机器学习中非常重要的一方面。


“虽然这些攻击不是针对机器学习模型本身,但不可否认,它们对机器学习构成了严重的威胁,需要立即采取行动,”Pin-Yu Chen 这样说道。

机器学习安全

自年初以来,谷歌已经在 TensorFlow 上修复了 100 多个安全漏洞。并且还发布了关于运行不受信任的模型、清理不受信任的用户输入以及在网络上安全地运行模型的综合安全指南。


“这些漏洞很容易找到,使用漏洞扫描程序可以帮助我们找出它们,”Shibu 说道。


“通常,如果有安全性更好的替代方案,开发人员应尽可能使用更为安全的解决方案。例如,使用 unsafe_load()或 load()与默认的 YAML 加载器可以替换为安全的 safe_load()函数。如果没有更好的选择,就需要对用户输入进行净化处理。”


目前谷歌已修复该漏洞,官方已发布最新版本,链接如下:


https://github.com/tensorflow/tensorflow/releases


参考链接:


https://portswigger.net/daily-swig/deserialization-bug-in-tensorflow-machine-learning-framework-allowed-arbitrary-code-execution

https://github.com/tensorflow/tensorflow/security/advisories/GHSA-r6jx-9g48-2r5r


2021 年 9 月 02 日 08:002091
用户头像

发布了 281 篇内容, 共 81.4 次阅读, 收获喜欢 381 次。

关注

评论 1 条评论

发布
用户头像
调用unsafe_load还有理了?! 啥大量的安全工作?就是懒而已。。。https://github.com/rails/rails/pull/42257
2021 年 09 月 03 日 08:22
回复
没有更多了
发现更多内容

给打工人熬一锅「毒」鸡汤

Java_若依框架教程

程序员 打工人 毒鸡汤

丑陋的程序员

陆陆通通

程序员 职场 认知

队列实现栈的3种方法,全都击败了100%的用户!

王磊

Java 算法和数据结构

面试官:讲一下缓存穿透、缓存雪崩和缓存击穿?

bigsai

redis 缓存穿透 缓存击穿 缓存雪崩

为什么 React Hooks 优于 HOCs(译)

西贝

Java 翻译 React Hooks HOC

Go 与异步 IO - io_uring 的思考

IceberGu

golang Linux 异步IO io_uring

5G应用的实时决策

VoltDB

5G 物联网 工业互联网 技术分享

酷睿i5-10600KF对标锐龙7 3700X,游戏表现领先且售价更香

新闻科技资讯

Scrapy源码剖析(一)架构概览

Kaito

Python 爬虫 Scrapy 源码剖析

Scrapy 源码剖析(三)Scrapy有哪些核心组件?

Kaito

Python 爬虫 Scrapy 源码剖析

Scrapy 源码剖析(四)Scrapy如何完成抓取任务?

Kaito

Python 爬虫 Scrapy 源码剖析

元模型驱动(一)构建元模型ーGME入门

KaYa

DDD Kaya MDA GME MDD

训练营第二周作业

爱码士

TCP/IP 基础知识总结

cxuan

后端 计算机网络 计算机

进“大厂”的故事

北风

职业规划 职业成长 大厂

【架构师训练营 1 期】第六周学习总结

诺乐

从零实现一个动态表单设计(编辑)器

徐小夕

Java 编辑器 H5 Node React

网络直播打赏背后的套路:刺激用户不理智消费

石头IT视角

老板下了死命令,要把日志系统切换到Logback

沉默王二

Java logback 日志系统

Redis还可以做哪些事?

Java旅途

redis

接口测试(apipost、jmeter和python脚本)

测试人生路

Python 接口测试 测试工具

如何构建一个通用的垂直爬虫平台?

Kaito

Python 爬虫 代理

Scrapy 源码剖析(二)Scrapy是如何运行起来的?

Kaito

Python 爬虫 Scrapy 源码剖析

【架构师训练营 1 期】第六周作业

诺乐

java安全编码指南之:文件和共享目录的安全性

程序那些事

代码规范 java安全 java安全编码指南 java编码 程序那些事

1分钟教你如何整理 React 知识体系

Leo

学习 前端 React 前端进阶训练营

基于服务设计的线上展览

京东科技开发者

云安全

元模型驱动(二)构建元模型ーGME构建分层模型

KaYa

DDD Kaya MDA GME MDD

训练营第二周课程总结

爱码士

训练营

轻量型GPU应用首选 京东智联云推出NVIDIA vGPU实例

京东科技开发者

人工智能 gpu

Flink State 误用之痛,你中招了吗?

Apache Flink

flink

Study Go: From Zero to Hero

Study Go: From Zero to Hero

TensorFlow出现任意代码执行漏洞,团队宣布撤销对YAML的支持-InfoQ