栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring cloud SnakeYAML RCE 漏洞复现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring cloud SnakeYAML RCE 漏洞复现

漏洞成因

通过/env post提交数据以设置属性spring.cloud.bootstrap.location为外部恶意yml文件,再通过/refresh获取yml文件内容并解析导致漏洞。

debug过程

由于最后是通过/refresh请求导致的,故这次从refresh相关代码开始,在RefreshEndpoint类中,有这么一段代码:

	@ManagedOperation
    public String[] refresh() {
        Set keys = this.contextRefresher.refresh();
        return (String[])keys.toArray(new String[keys.size()]);
    }

    public Collection invoke() {
        return Arrays.asList(this.refresh());
    }

之后会来到contextRefresher.refresh()中:

public synchronized Set refresh() {
        Map before = this.extract(this.context.getEnvironment().getPropertySources());
        this.addConfigFilesToEnvironment();
        Set keys = this.changes(before, this.extract(this.context.getEnvironment().getPropertySources())).keySet();
        this.context.publishEvent(new EnvironmentChangeEvent(keys));
        this.scope.refreshAll();
        return keys;
    }

其中,这次漏洞是在

this.addConfigFilesToEnvironment();

中产生的,这段代码的功能是获取最新的配置,而恶意yml文件会在其中获取并被解析。

其后再通过YamlProcessor.process方法内的yaml.loadAll()进行加载、解析配置

通过baseConstructor类进行解析yml文件操作
配上当时节点内容
目前已将yml文件内容全部解析成SequenceNode实例
最终一步一步反射获取内容实例并读取到恶意代码
这里就直接反射调用了自定义类AwesomescriptEngineFactory,并执行了其中的payload

Runtime.getRuntime().exec("cmd.exe /c calc");
修复建议

禁止/env未授权访问
配置文件加入以下代码:

endpoints.env.enabled= false

升级为最新版本

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号