为修复一个代码执行安全漏洞,TensorFlow决定不再支持YAML

341 篇文章 28 订阅
127 篇文章 15 订阅

TensorFlow是谷歌开发的基于Python的机器学习和人工智能项目。为修复一个代码执行安全漏洞,TensorFlow决定不再支持YAML。YAML(Yet Another Markup Language)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括C语言、Python、Perl,并从XML、电子邮件的数据格式。

CVE-2021-37678:TensorFlow不可信反序列化漏洞

安全研究人员Arjun Shibu在TensorFlow和Keras中发现了一个安全漏洞——CVE-2021-37678。该漏洞是由于不安全处理YAML引发的不可信反序列化漏洞,攻击者利用该漏洞可以在应用反序列化YAML格式中的Keras模型时执行任意代码。该YAML反序列化漏洞CVSS 评分为9.3分。反序列化漏洞主要发生于应用从不可信的源读取伪造的或恶意数据的情况。应用在读取和反序列化数据后,可能会引发DoS攻击条件甚至执行攻击者的任意代码。

漏洞来源于TensorFlow的yaml.unsafe_load()函数:
在这里插入图片描述
TensorFlow中有漏洞的yaml.unsafe_load()函数调用

unsafe_load函数的作用是反序列化YAML数据,该函数会解析所有的标签,包括来自不安全或不可信的输入。理想情况下,unsafe_load函数只有在输入来源于可信源时被调用。但攻击者利用通过在已经序列化的YAML数据中注入恶意payload来利用该机制执行代码。

该漏洞的PoC利用代码如下所示:

from tensorflow.keras import models
 
payload = '''
!!python/object/new:type
args: ['z', !!python/tuple [], {'extend': !!python/name:exec }]
listitems: "__import__('os').system('cat /etc/passwd')"
'''
 
models.model_from_yaml(payload)

TensorFlow不再支持YAML

该漏洞提交后,TensorFlow决定启用YAML支持,并使用JSON反序列化。

但TensorFlow并不是唯一使用YAML unsafe_load的项目,该函数被广泛应用于Python项目中。GitHub显示有上千个引用该函数的搜索结果,目前已经有开发者提出了解决方案:
![ GitHub上使用unsafe_load的检索结果

目前,TensorFlow也已发布了该漏洞的补丁,受影响的版本和修复版本如下所示:](https://img-blog.csdnimg.cn/4885222dbadf4a3784552f9702935d66.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBASEJvaGFu,size_20,color_FFFFFF,t_70,g_se,x_16)
在这里插入图片描述
在这里插入图片描述
网安学习资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值