-
-
[原创]分析SnakeYAML 反序列化漏洞(CVE-2022-1471)
-
发表于: 2024-5-13 09:23 1196
-
- 简介
SnakeYaml是Java中解析yaml的库,而yaml是一种人类可读的数据序列化语言,通常用于编写配置文件等。
yaml基本语法:
大小写敏感
使用缩进表示层级关系
缩进只允许使用空格
#表示注释
支持对象、数组、纯量这3种数据结构
示例:
yaml对象:
key:
child-key: value
child-key2: value2
yaml数组:
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成
详细参考:https://www.runoob.com/w3cnote/yaml-intro.html
SnakeYaml库:
SnakeYaml提供了yaml数据和Java对象相互转换的API,即能够对数据进行序列化与反序列化。
Yaml.load():将yaml数据反序列化成一个Java对象
Yaml.dump():将Java对象序列化成yaml
2.思路来源
今天在学习SnakeYAML的反序列化的时候,想到⼀个新的探测payload,⽹上之前有⼀个SPI(Service Provider Interface)
那个链⼦可以有通过URLClassloader检测。
SPI是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI是调用方来制定接口规范,提供给外部来实现,调用方在调用时则选择自己需要的外部实现。 从使用人员上来说,SPI 被框架扩展人员使用。
3.RCE
如果存在任意文件写入的话,即构造一个恶意类,并添加到classpath下,导致代码执行
此时将将SPI1中say方法的内容改为calc,当运行后则会造成代码执行