如何进行Spring Data Commons RCE分析
如何进行Spring Data Commons RCE分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,其主要目标是使数据库的访问变得方便快捷。Spring Data Commons是Spring Data下所有子项目共享的基础框架。Spring的核心是控制反转(IoC)和面向切面(AOP),相比Struts 2框架绝大部分的安全漏洞都都是由于OGNL产生,而自从Spring引入SpEL,也引起很多安全漏洞,今天利用Spring Data Commons (CVE-2018-1273)作为案例和大家聊一聊。
01 漏洞描述
Spring Data Commons(1.13至1.13.10之前的版本,2.0至2.0.5的版本以及较旧的不受支持的版本)包含由于特殊元素的不正确中和而导致的属性绑定器漏洞。未经身份验证的远程恶意用户(或攻击者)可以针对Spring Data REST支持的HTTP资源提供特制的请求参数,或者使用Spring Data的基于投影的请求有效负载绑定帽可能导致远程执行代码攻击。
02 源码分析
Spring MVC框架会处理来自前端的页面的请求,并根据请求进行数据的封装,处理前端页面的请求暂不赘述,我们现在主要探讨对数据的封装处理,因为Spring Data Commons框架在做数据封装处理的时候产生了漏洞,进入org.springframework.web.method.support.InvocableHandlerMethod类,进入getMethodArgumentValues方法,如下图所示:
如上图所示红框所示位置,resolveArgument对请求参数进行了进一步处理,进入org.springframework.web.method.support.HandlerMethodArgumentResolverComposite类的resolveArgument方法,如下图所示:
由于resolveArgument方法,并没有明显的逻辑,定位到resolve.resolveArgument行进入到org.springframework.web.method.annotation.ModelAttributeMethodProcessor类的resolveArgument方法,如下图所示:
进入到resolveArgument方法的第132行代码,如下图所示,该行代码创建attribute的实例对象,并实现具体的数据绑定功能。
进入org.springframework.data.web.ProxyingHandlerMethodArgumentResolver类的createAttribute方法,createAttribute方法中调用MapDataBinder类进行传入数据的数据绑定。
定位到binder.bind语句进入bind方法,看实现的具体逻辑,进入到org.springframework.web.bind.WebDataBinder类的bind方法,如下图所示:
因为WebDataBinder类继承了DataBinder类,所以super.doBind语句是将参数传递给WebDataBinder类的doBinder方法,进入DataBinder类的doBinder方法,如下图所示,在该方法中前两句是校验语句,applyPropertyValues方法是具体的处理逻辑。
进入org.springframework.validation.DataBinder类的applyPropertyValues方法,如下图所示:
如上图所示箭头位置,继续进入org.springframework.beans.AbstractPropertyAccessor类的setPropertyValues方法,如下图所示:
定位到该方法的第97行,如下图所示:
进入setPropertyValue方法,如下图所示:
继续跟踪进入org.springframework.data.web.MapDataBinder类的setPropertyValue方法,如下图所示:
在serPropertyValue方法中对前端出入的参数进行处理,定位到setPropertyValue方法中的第182行代码,如下图所示:
第182行代码中使用Spring 的SpEL表达式对外部的参数进行处理,但是并没有对参数进行进行有效的校验,所示第182行代码是漏洞注入点。
03 漏洞复现
抓取前端传入后台的数据包,如下图所示:
构造payload,如下图所示:
响应结果,如下图所示:
04 总结与修复
本次漏洞问题出现在 Spring Data Commons中。该漏洞是由前端参数传入后台,后台框架使用SpEL表达式处理未校验的恶意字符串所引起的,因此建议采取IP白名单对IP进行限制,或者升级框架到最新版本。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。