TensorFlow 删除 YAML 支持,建议 JSON 作为替补方案!

news/2024/11/17 3:00:29/

TensorFlow,作为一个主流的开源 Python 库,最初由 Google 开发用于机器学习领域,逐渐成为 GitHub 顶级开源 TOP 10 项目之一。

近日,Google TensorFlow 项目团队宣布了一项重大的改变,由于存在一个关键代码执行漏洞,其取消对另一种标记语言 YAML 的支持。TensorFlow 团队表示,鉴于 YAML 支持需要大量工作,因此暂时删除了 YAML。

YAML 是一种可读性高,用来表达资料序列化的格式。开发者常用 YAML 作为通用格式来存储数据并在进程和应用程序之间传递对象。据 GitHub 公告称,TensorFlow 和 Keras(TensorFlow 的包装库)使用了不安全的函数来反序列化 YAML 编码的机器学习模型。

臭名昭著的 “yaml.unsafe_load()”函数

上文所提及的不安全函数指的是 “yaml.unsafe_load()”函数(https://github.com/tensorflow/tensorflow/blob/460e000de3a83278fb00b61a16d161b1964f15f4/tensorflow/python/keras/saving/model_config.py#L100),其中“unsafe_load”函数可以相当自由地反序列化 YAML 数据,它能够解析所有标签,“即使是那些在不受信任的输入上不安全的标签”。

图片

而这样的漏洞会带来怎样的后果?

事实上,在理想情况下,“unsafe_load”应该只在没有任何恶意内容的可信源输入上调用。反之,攻击者可以利用反序列化机制,通过在尚未序列化的 YAML 数据中注入恶意负载来执行他们选择的代码。

对此,安全研究人员追踪发现,这个关键漏洞可使攻击者能够在应用程序反序列化以 YAML 格式提供的 Keras 模型时执行任意代码,其将该漏洞称之为 CVE-2021-37678。

简单来看,序列化将对象转换为字节流。反序列化则可以视为与序列化相反的过程,其中使用字节流在内存中重新创建实际的 Java 对象。因此,当不受信任的数据被用来滥用应用程序的逻辑时,就会发生不安全的反序列化。

当应用程序读取反序列化数据后,或造成应用程序崩溃,导致拒绝服务 (DoS) 条件,甚至带来更为糟糕的结果,即执行攻击者的任意代码。

最初该漏洞由安全研究员 Arjun Shibu 发现,并上报给了 TensorFlow 项目的维护者。

图片

来自 Coalfire 的管理负责人 Andrew Barratt 解释称,只要大多数高级语言支持基于对象的数据格式,反序列化错误就一直存在,甚至出现在解析数据流以获取常见结构之前。Barratt 说,使用常见结构化格式的处理对象往往需要访问大块内存,因此解析过程中的错误总是会导致数据泄漏到内存区域,攻击者可能会操纵这些区域以进行远程代码执行。

解决方案

此次,这个 YAML 反序列化漏洞的严重性被标记为 9.3 等级,影响范围较为广泛。据悉,本次漏洞影响 TensorFlow 2.3.2、2.4.2 与 2.5.0 版本,Keras 的 0.1.0 到 2.6.0 版本均受影响。

作为解决方案,在宣布弃用 YAML 之后,TensorFlow 团队建议开发者以 JSON 替代 YAML 序列化,或使用 H5 序列化作为替代。与此同时,TensorFlow 官方有望在 2.6.0 版本中修复该漏洞,届时,也早期版本如 2.5.1、2.4.3 和 2.3.4 也会进行修复。

最后值得注意的是,TensorFlow 并不是第一个或唯一一个使用 YAML 的unsafe_load 的项目,该函数在 GitHub 的 Python 项目中相当普遍,对此,一些开发者建议道,这些项目应及时解决这个问题,使用这些项目的开发人员也应注意安全。

图片

参考:https://www.bleepingcomputer.com/news/security/googles-tensorflow-drops-yaml-support-due-to-code-execution-flaw/


http://www.ppmy.cn/news/146737.html

相关文章

svg画半圆详解(L指令、M指令、A指令)

svg画半圆 了解画半圆的各个指令L指令M指令A指令画整半圆 推荐:svg画整圆详解推荐:svg的text标签字体、颜色、样式、大小、居中详解 接到需求,要求做出一个这样的活动转盘,,,,,所有文…

倍福---通过EL6070授权流程

TwinCAT 3.1提供了通过EtherCAT终端EL6070管理TwinCAT软件许可证的选项。EL6070包含模块化EtherCAT I/O系统中的硬件许可证密钥。本文介绍基于EL6070模块做授权的操作流程。 操作流程 1.1. EL6070模块介绍 1.1.1. 外观 TwinCAT 3.1提供了通过EtherCAT终端EL6070管理TwinCAT软件…

使用HbuilderX3.8.3_把开发的小程序发布为Html5页面上传到_免费托管空间---uniapp_小程序开发工作笔记009

首先使用hbuider开发完程序,然后,再去,点击发型,然后选择 上传网站到服务器,然后选择 选择新建,然后点击 新建以后然后这里点击新建服务空间,然后再去 这里选择免费服务空间,然后 然后点击立即购买,然后 点

用DIV+CSS技术制作个人博客网站(web前端网页制作课期末作业)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

L10

1.利用牛客的递推方法: class Solution {public boolean isMatch(String s, String p) {if(s null || p null) return false;char[] str s.toCharArray();char[] pattern p.toCharArray();return judge(str, 0, pattern, 0);}public boolean judge(char[]str, …

对于时间期间标识,怎么拆分运算的?

业务需求:薪资核算时,系统会根据核算期间员工的状态,将数据拆分成不同的期间段,以用作逻辑处理,造成时间期间标识分段的常见原因有:员工人事事件发生变动(如:入职、调动、离职、转正…

地形剖面图、纬度高度剖面图如何绘制

在气象中,我们常常需要用到剖面图。地形剖面主要研究地貌对降雨、气流的影响作用;纬度高度剖面图主要用来分析降雨的某些条件,如湿层深厚、上干下湿、风向风速等。 一、地形剖面图 绘制地形剖面图之前,需要了解自己使用的地形文件…

Google Cloud 线上课堂 | GCP 上 Stable Diffusion 高效部署/reCAPTCHA 护航游戏出海

立即预约 长按识别/扫描右方二维码 预约观看直播 GCP 上的 Stable Diffusion 高效部署方案 15:00 - 15:45 如何快速掌握 Stable Diffusion 及其 webui 的部署要点? 不同场景下,如何选择高效且易维护的部署方案? Vertex AI 可以在什么场景下…