struts2漏洞监测_CVE20190233: S2060 拒绝服务漏洞分析
更多全球网络安全资讯尽在邑安全
0x01 漏洞简述
2020年8月11日,360CERT监测发现Apache官方
发布了S2-060
的风险通告,该漏洞编号为CVE-2019-0233
,漏洞等级:中危
。漏洞评分:6.8
。
当使用getter
对文件上传执行一个暴露文件的操作时,攻击者可能会构造特定请求,从而将上传文件的工作目录设置为只读。因此,对该文件的后续操作将失败并出现错误。还可以将Servlet
容器的temp
目录设置为只读,这样后续的上载操作就会失败,对业务造成影响。
对此,360CERT建议广大用户及时将 Struts2
升级到最新版。与此同时,请做好资产自查以及预防工作,以免遭受黑客攻击。
0x02 风险等级
360CERT对该漏洞的评定结果如下
评定方式 | 等级 |
---|---|
威胁等级 | 中危 |
影响面 | 一般 |
360CERT评分 | 6.8分 |
0x03 影响版本
Apache Struts2:2.0.0-2.5.20
0x04 漏洞详情
从ParametersInterceptor
拦截器开始看,该拦截器对请求的参数进行处理,前面的过程是ActionInvocation
对拦截器进行回调处理。
从ActionContext
获取请求中的请求参数,
此时有四个参数(具体Action
构造见参考链接):
1. [文件名参数] - 这是用户已上传的实际文件。在Action中被设置为“upload”
2. [文件名参数]ContentType - 这是上传的文件的内容类型。在Action中被设置为“uploadContentType”
3. [文件名参数]FileName - 这是上传的文件的名称。在Action中被设置为“uploadFileName”
4. [文件名参数].parentFile.writable - 构造的利用poc
这里要注意原始上传的文件类型是一个File
类型。然后会调用setParameters
方法:
参数校验
然后对所有Parameters
的key
进行检测,调用isAcceptableParameter
方法。 由于自定义Action
不是ParameterNameAware
的实现类,于是,parameterNameAware
为null
, 先调用acceptableName
方法。 依次调用isWithinLengthLimit
,isExcluded
,isAccepted
。
isWithinLengthLimit
判断最大长度默认为100
。
isExcluded
进行表达式正则的检测,是否包含_memberAccess
等字符。
可以发现,我们的payload
没有包含特殊字符。
继续跟到DefaultExcludedPatternsChecker#isExcluded
,初始化了正则表达式的黑名单。
最后调用isAccepted
,跟到DefaultExcludedPatternsChecker#isAccepted
。
对一些不可见字符做处理。
三个函数调用完之后,就将其put
到acceptableParameters
Map里。
继续往下走,会根据原有的valueStack
,创建一个新的valueStack
,叫做newStack
,之后把前面的几个对key
检测的正则表达式加到这个新的valueStack
里面,
ognl表达式执行
接着,调用OgnlValueStack.setParameter
,这里会执行setValue
操作,而执行的过程中就会造成ognl
表达式的执行,这里会将root
作为参数传入,而root
里保存着Action
信息。
payload
是一个ognl
表达式,由于访问的是ValueStack
的root
里的属性,所有不需要加#
就能进行访问,而这里的upload
是我们自定义上传Action
里的File
类型。
首先target
值是一开始传入的root
里的上传Action
,然后会调用target
对应的setter
和getter
方法。
然后获取返回的upload
,类型为File
,此时target
被赋值为File
,经过AST
语法解析,getParentFile
的调用栈为:
中间会根据传入的payload
调用getGetMethod
,获取File
对象对应的getter
,也就是getParentFile
。在调用method之前,会进行黑名单的检测,具体是在com.opensymphony.xwork2.ognl.SecurityMemberAccess#isAccessible
方法里进行黑名单检测,黑名单来自struts-
然后getParentFile
的返回值被return
,
依然替换作为target
,值还是File
,继续调用setter
。
setWriteable
的调用栈为:
执行结果: 接着,后续的上传都会失效。
版本修复
升级到Struts 2.5.22
版本,默认情况下将java.io
和java.nio
中的类加入黑名单。
总结
该漏洞总体来说,危害不是很大,但是能够造成服务器功能失效,对于业务来说,还是具有一定的影响力,该漏洞主要是通过Action
的getter
方法,获取到上传的File
类型的filename
,再通过ognl
执行流,去配合执行File
的getter/setter
,最终造成文件无法后续上传,由于我们的ognl
表达式不涉及黑名单也不涉及特殊字符,所以不受沙箱的影响。
转自安全客
欢迎收藏并分享朋友圈,让五邑人网络更安全
欢迎扫描关注我们,及时了解最新安全动态、学习最潮流的安全姿势!
推荐文章
1
新永恒之蓝?微软SMBv3高危漏洞(CVE-2020-0796)分析复现
2
重大漏洞预警:ubuntu最新版本存在本地提权漏洞(已有EXP)
struts2漏洞监测_CVE20190233: S2060 拒绝服务漏洞分析相关推荐
- android 拒绝服务漏洞,Android 应用本地拒绝服务漏洞浅析
1.本地拒绝服务漏洞描述 Android 系统提供了 Activity.Service 和 Broadcast Receiver 等组件,并提供了 Intent 机制来协助应用间的交互与通讯,Inte ...
- 安卓拒绝服务漏洞分析及漏洞检测
"超级拒绝服务漏洞"是一个安卓通用型拒绝服务漏洞,恶意***者可能利用此漏洞让手机中的任意应用崩溃无法正常工作,几乎影响目前市面上所有的安卓APP应用. 漏洞分析: 0xr0ot和 ...
- android漏洞检测工具,安卓“超级拒绝服务漏洞”分析及自动检测工具
本帖最后由 公益 于 2015-1-7 18:14 编辑 作者:360捉虫猎手研究员 0xr0ot & Xbalien "超级拒绝服务漏洞"是360安全研究人员近期发现的一 ...
- CVE-2020-1971: OpenSSL 拒绝服务漏洞通告
2020-12-09 08:47 报告编号:B6-2020-120901 报告来源:360CERT 报告作者:360CERT 更新日期:2020-12-09 0x01 漏洞简述 2020年12月09日 ...
- 一种自动化挖掘联网车辆协议中的拒绝服务漏洞的方案
本文系原创翻译,转载请说明出处 原论文:USENIX2021 :Automated Discovery of Denial-of-Service Vulnerabilities in Connecte ...
- Apache Tomcat 拒绝服务漏洞通告
作者 | 360CERT 来源 | https://www.oschina.net/news/164556 报告编号:B6-2021-101501 报告来源:360CERT 报告作者:360CERT ...
- CVE-2017-0004相关lsass拒绝服务漏洞杂谈
昨天微软更新的补丁对lsass服务中的一处拒绝服务漏洞进行了修补,由于是远程拒绝服务漏洞遂决定看看(毕竟这种类型的这十几年也没出几个).补丁解压之后可以发现这次更新修改了大量的dll(可以用expan ...
- openssl升级_CVE20201967: openssl 拒绝服务漏洞通告
[漏洞背景] 2020年04月21日,openssl 官方发布了 TLS 1.3 组件拒绝服务漏洞 的风险通告,该漏洞编号为 CVE-2020-1967. [漏洞等级]高危,影响广泛. [漏洞概述] ...
- linux内核系列远程拒绝服务漏洞,预警 | Linux 爆“SACK Panic”远程DoS漏洞,大量主机受影响...
近日,腾讯云安全中心监测到Linux 内核被曝存在TCP "SACK Panic" 远程拒绝服务漏洞(漏洞编号:CVE-2019-11477,CVE-2019-11478,CVE- ...
最新文章
- pc css框架,PC端框架—semantic ui
- Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy
- 语音识别行业成长红利期已过,行业寡头显现,小公司生存状况堪忧
- exchange EWS 开发随笔二
- 解决VIM打开U盘文件中文乱码的问题以及VIM有用的配置
- linux命令mysql启动,linux下启动mysql的命令
- 51单片机--时钟芯片ds1302
- 轻松安装、卸载Linux软件
- 未转变者3.x局域网服务器,未转变者局域网怎么创建服务器
- Javasctipt面试题整理
- 2019京东秋招面经
- 浏览器交互导出excel
- python代码画word文档(python+pycharm)
- 怎么提取视频中的音频?教你快速学会这三个方法
- 「Gitee篇」如何用Git平台账号登录建木CI
- 如何排查JVM内存占用过高
- ios开发 多人语音聊天_iOS语音通话功能实现流程(实时语音通话二)
- 在网页上加载百度地图
- 骁龙865手机大盘点,年终换机其实很简单!
- 百度收录批量查询 最新2022百度收录批量查询
热门文章
- mysql七种join理论
- Qt 调用 Windows 接口实现窗口置顶
- Markdown公式输入(very nice!!!)
- 为啥地址线是20根则存储单元个数为2的20
- python cv2 matchtemplate_OpenCV-Python系列十:模板匹配
- python中系列的含义_python中四种组合数据类型的含义、声明、增删改查,遍历
- 事务(ACID)、并发一致性问题(丢失修改、读脏数据、不可重复读、幻影读)、封锁(封锁粒度、类型、协议、MySQL 隐式与显示锁定)
- python小作品speak_python 小案例demo05 升级版石头剪刀布
- python jit_Pyston是一个基于JIT的Python开源实现
- mysql+不锁表添加字段_MySQL5.6在线DDL不锁表(在线添加字段)