漏洞深度分析|CVE-2022-1471 SnakeYaml 命令执行漏洞

项目介绍

YAML是一种数据序列化格式,设计用于人类的可读性和与脚本语言的交互。

SnakeYaml是一个完整的YAML1.1规范Processor,支持UTF-8/UTF-16,支持Java对象的序列化/反序列化,支持所有YAML定义的类型。

项目地址

https://github.com/snakeyaml/snakeyaml

漏洞概述

SnakeYaml通常使用方法如下:

new Yaml(new Constructor(TestDataClass.class)).load(yamlContent);

默认情况下,SnakeYaml在解析用户提供恶意yamlContent时,即使yamlContent不满足TestDataClass类型,也会执行恶意代码。

影响版本

Snakeyaml 全版本

环境搭建

导入存在漏洞的Snakeyaml组件并编写demo测试即可

漏洞复现

下面demo通过反序列化一个恶意类,该恶意类可以请求远程jar文件并实例化。

 

漏洞分析

该漏洞并不被官方认可,官方认为通过yaml文件反序列化对象是正常功能并不会修复。

 

这里我仅对snakeyaml反序列化的流程进行分析,为了简洁易懂,下面仅列举关键代码:

 

上述代码需要层层展开,简单说就是根据snakeyaml的构造器解析yaml文件内容并返回对应实例。下面对实例化的关键步骤展开介绍:

  1. 获取构造器

在下面代码中根据节点获取对应的类并从yamlClassConstructors中获得对应的构造器。

 

这里的Constructor有三种类型,分别对应不同的yaml

 

2. 实例化对象

获得构造器后就是装配对象。这里仅分析ConstructSequence。在下面代码中,根据节点的不同类型分别进行处理。

 

如果不是上述三种基本类型,那么获取默认的构造函数并递归构造参数节点

 

最后通过反射初始化实例

 

以上梳理了snakeyaml大概的反序列化流程。当yaml可以被攻击者控制时,通过传入恶意的yaml内容就可以实例化任意对象,从而造成命令执行。

修复方式

在参考链接中,官方认为snakeyaml的使用场景仅接收可信的数据源,因此不认为cve-2022-1471是漏洞,因此目前还没有修复,后续可能也不会修复。这里建议开发人员排查snakeyaml的使用情况,判断是否接收外部数据,并加入new SafeConstructor()类进行过滤,如下:

Yaml yaml = new Yaml(new SafeConstructor());

参考链接

snakeyaml / snakeyaml / issues / #561 - CVE-2022-1471 (vulnerability in deserialization) — Bitbucket

https://github.com/advisories/GHSA-mjmj-j48q-9wg2

https://nvd.nist.gov/vuln/detail/CVE-2022-1471

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
回答: OpenSSL命令注入漏洞CVE-2022-1292)是指在OpenSSL 1.0.2版本中存在的漏洞。为了修复这个漏洞,你需要将OpenSSL 1.0.2升级到SSL 3版本。首先,你可以使用以下命令查看OpenSSL的版本信息:\[1\] ``` openssl version ``` 然后,你可以从OpenSSL官方网站下载SSL 3的升级包。下载地址可以在官方网站上找到。\[2\]你可以使用以下命令下载升级包: ``` wget https://www.openssl.org/source/openssl-3.0.5.tar.gz ``` 下载完成后,解压升级包并进入解压后的目录: ``` tar -zxvf openssl-3.0.5.tar.gz cd openssl-3.0.5/ ``` 接下来,你可以使用以下命令进行编译和安装: ``` ./config shared zlib make make install ``` 在安装之前,建议备份原始文件。安装完成后,你可以添加新的OpenSSL软连接,并将编译后的库文件写入so库配置文件。具体操作可以参考相关文档或官方指南。\[2\] 请注意,升级OpenSSL可能会对系统产生影响,请确保在操作之前备份重要数据,并在升级过程中谨慎操作。 #### 引用[.reference_title] - *1* *2* *3* [openssl 漏洞升级 (CVE-2015-4000/CVE-2022-1292)](https://blog.csdn.net/qq_44637753/article/details/126829820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值