2017年度安全报告——应用漏洞

上传人:管****问 文档编号:109272259 上传时间:2019-10-26 格式:PDF 页数:38 大小:9.55MB
返回 下载 相关 举报
2017年度安全报告——应用漏洞_第1页
第1页 / 共38页
2017年度安全报告——应用漏洞_第2页
第2页 / 共38页
2017年度安全报告——应用漏洞_第3页
第3页 / 共38页
2017年度安全报告——应用漏洞_第4页
第4页 / 共38页
2017年度安全报告——应用漏洞_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《2017年度安全报告——应用漏洞》由会员分享,可在线阅读,更多相关《2017年度安全报告——应用漏洞(38页珍藏版)》请在金锄头文库上搜索。

1、360 Computer Emergency Readiness Team, February 2018 文中部分信息直接参考外部文章(见参考),如有侵权或异议请联系 cert 2017 年度安全报告 应用漏洞 Struts2 S2-045/S2-046 漏洞 Struts2 S2-052 漏洞 DotNetNuke CVE-2017-9822 漏洞 IIS 6.0 WebDAV CVE-2017-7269 漏洞 FFmpeg 安全问题 Nginx CVE-2017-7529 漏洞 Cisco WebEx CVE-2017-6753 漏洞 Git ssh CVE-2017-1000117 漏洞

2、 CVE-2017-16943 Exim-UAF 漏洞 Application Vulnerabilities 淘宝店铺 “Vivian研报” 首次收集整理 获取最新报告及后续更新服务请在淘宝搜索店铺 “Vivian研报” 或直接用手机淘宝扫描下方二维码 2017 年度安全报告应用漏洞 360 Computer Emergency Readiness Team, February 20182 应用程序作为计算机服务的直接提供者,其存在是不可或缺的。除了传统的 CS 应用之外还出现了 各种的 web 应用,相应的还有提供 web 服务的各类 web 容器。应用是广泛的存在于我们的日 常生活中的,

3、如若其中出现了漏洞,将可能直接影响业务的正常运作。本文是 360CERT 对 2017 年应用漏洞的总结。 Application Vulnerabilities 2017 年度安全报告应用漏洞 360 Computer Emergency Readiness Team, February 20183 漏洞情况 统计出 2017 年,漏洞最多的 50 个产品,其中系统类 20 个,应 用类 30 个。可以看到漏洞最多的是 Android,Linux Kernel, Iphone OS,分别 841,435,387 枚漏洞。 筛选出应用类产品漏洞 top10,大多来自 Adobe,Microso

4、ft, Apple ,Google 和开源社区的产品。排在首位的是 Image- Magick, 大多数都是文件解析及编辑器方面的漏洞, 多达 357 枚, 大部分是本地 DOS 和溢出,危害低且利用难度大。这也反映了整 体现象:漏洞多,但是价值高的可利用漏洞太少。 简单的说,评判漏洞有三个维度:应用的使用量,漏洞的利用难度, 漏洞造成的危害。接下来,对 2017 年有价值的应用漏洞进行详细 分析。 2017 年度安全报告应用漏洞 360 Computer Emergency Readiness Team, February 20184 2017 年披露的有价值应用漏洞进行梳理 2017 年度

5、安全报告应用漏洞 360 Computer Emergency Readiness Team, February 20185 2017 年 3 月 6 日,Struts2 发布 了关于 S2-045 的漏洞公告,提 及到可以通过构造好的 Content- Type 值来实现远程代码执行攻 击,影响的版本为 Struts2 2.3.5 - Struts2 2.3.31,Struts2 2.5 - Struts2 2.5.10。由于在默认的情 况下便可触发漏洞,并且有人发出 了可以实现命令执行的 Payload 导致该漏洞的影响不仅广而且利 用成本低,从一些 SRC 平台上对 该漏洞的提交情况也可

6、以看出这 一点。随后在 20 日出来的 S2- 046 是在 S2-045 的基础上还存 在其它的触发点。由于该漏洞造成 的影响非常广,在这里进行回顾。 Struts2 S2-045/S2-046 漏洞 Struts2 及漏洞相关背景 Apache Struts2 是一个用于开发 Java EE 网络应用程序的 开放源代码网页应用程序架构。它利用并延伸了 Java Servlet API,鼓励开发者采用 MVC 架构。缘起于 Apache Struts 的 WebWork 框架,旨在提供相对于 Struts 框架的增强和改进,同 时保留与 Struts 框架类似的结构。2005 年 12 月,

7、WebWork 宣布 WebWork 2.2 以 Apache Struts2 的名义合并至 Struts。 由于 Struts2 中的 OGNL 引擎功能比较强大,可通过其来访问 Java 对象的成员变量或方法,如果输入点可控便会造成安全问题。 尽管 Struts2 也有安全管理器来避免通过 OGNL 来执行命令等一 些危险的操作,但是该安全管理器也是一次又一次的被绕过。 漏洞细节 借助 JavaAgent 来查看漏洞利用过程的调用栈 可以看到大体的流程为 : FileUploadInterceptor.intercept() LocalizedTextUtil. findText() Lo

8、calizedTextUtil.getDefaultMessage() TextParseUtil.translateVariables() OgnlTextParser. evaluate() 2017 年度安全报告应用漏洞 360 Computer Emergency Readiness Team, February 20186 使用 JavaAgent 来查看调用栈的好处在于只有 payload 和 漏洞环境的情况下就可以大致知道漏洞的利用过程,方便接下 来做动态分析。下面再使用动态分析的方式来跟一下漏洞利用 的 整 个 过 程,struts2 会 在 StrutsPrepareFilt

9、er 过 滤 器 中 将 HttpServletRequest 请 求 封 装 成 StrutsRequestWrapper 或 是 MultiPartRequestWrapper。 而 这 个 漏 洞 就 是 发 生 在 对 MultiPart 请 求 的 处 理 上, 在 StrutsPrepareFilter 类 中 的 doFilter 方法中下断点即可。对于这里 Get 或是 Post 请求都是一 样的 在这个方法中可以看到它是通过请求头中 Content-Type 的 值中是否包含“multipart/form-data”来决定该请求是否为 MultiPart 请求,这也是为什么

10、payload 在 Content-Type 中需 要包含“multipart/form-data”的原因,同时也说明了在利用的 时候并不需要去构造一个上传文件的包了,只需要在请求中修改 Content-Type 的值包含“multipart/form-data”就行。接着通 过 getMultiPartRequest 方法来获取 MultiPart 请求的处理类。 往下跟会进入 wrapRequest 方法 2017 年度安全报告应用漏洞 360 Computer Emergency Readiness Team, February 20187 可以看到该方法从容器中获取了名字为 multi

11、partHandlerName 的 值 的 一 个 实 例 来 作 为 处 理 器。 而 multipartHandlerName 的 值 来 自 于 配 置 中 的 struts.multipart.parser 的 值, 该 值 默 认 为”jakarta“, 也 就 是 说 最 终 获 取 到 的 是 一 个 JakartaMultiPartRequest类的实例, 而问题就是出现在该类中, 这也解释了为啥这个漏洞能影响这么大,因为在默认的情况下就可 以被利用。 继续往下跟的时候会进入 JakartaMultiPartRequest 类中的 parseRequest 方法,再跟入 Fil

12、eItemIteratorImpl 类中的构造方 法 2017 年度安全报告应用漏洞 360 Computer Emergency Readiness Team, February 20188 可 以 看 到 这 里 有 一 个 对 ContentType 的 值 得 判 断, 要 不 是 以“multipart/” 开 头 的 话 便 会 抛 出 一 个 InvalidContentTypeException 的 异 常, 跟 下 去 看 它 对 这 里的异常信息是如何处理的,因为这个异常信息里是包含着 Content-Type 的值的,也就是说里面包含着 payload 中构 造好的 OG

13、NL 表达式。再往下跟直到 OGNL 表达式执行就 是一开始通过 JavaAgent 看到的调用栈中的过程了,看一下 translateVariables 方法: 会通过以 $ 或是 % 字符开头来提取出真正的表达式,所以在 payload 中使用 $ 来写一样是可以的。 2017 年度安全报告应用漏洞 360 Computer Emergency Readiness Team, February 20189 S2-046 是在 S2-045 的基础上的,触发流程一样,触发点不一 样了。在 Streams 类中的 checkFileName 方法会对文件名进行 检查,若是包含空字节的话会抛出

14、InvalidFileNameException 异 常 其中异常信息含有完整的文件名,这里的异常信息也经过了和 S2-045 一样的处理,也就是说文件名中的 OGNL 表达式也会 被执行。针对该漏洞的利用只需要在模拟文件上传时在 Content- Disposition 的 filename 中加入空字节,并将 OGNL 表达式写到 filename 就好 S2-046 还有一个触发方式是 Content-Length 长度超过 2M,但是这种触发需要配置 struts.multipart.parser 为 jakarta-stream 才行。 Struts2 的安全问题层出不穷,它的漏洞往

15、往影响比较大,同时漏 洞点也经常会别人吐槽。若不是业务必要应该使用安全性更好的框 架来替代它。同时也可以由此去考虑一些别的框架在使用语言表达 式的时候是否会存在一些类似的安全性问题。 2017 年度安全报告应用漏洞 360 Computer Emergency Readiness Team, February 201810 Struts2 S2-052 漏洞 漏洞相关背景 Xstream 是一个 Java 类库,用来将对象序列化成 XML 或者通 过 XML 反序列化为对象。Struts2 启用了 rest-plugin 后接收到 XML 格式数据时会使用 XStreamHandler 来处理

16、,也就是通过 XML 反序列化为对象。若 XML 为利用 Gadget 构造好的恶意数 据,在反序列化的过程中可以导致远程代码执行。 漏洞细节 文件 /org/apache/struts2/rest/ContentTypeInterceptor.java 在struts2 rest-plugin 中的处理逻辑里接受到对应格式的消息时, 会调用已经注册的对应 handler 的 handler.toObject 方法对其进 行实例化,在这里传入的 xml 消息,所以就会跳转到已经定义的 XStreamHandler 的 toObject 方法 2017 年 9 月 5 日,Apache Struts 发 布 最 新 安 全 公 告, Apache Struts2 的 REST 插件 存在远程代码执行的高危漏洞, 该漏洞由 的安全研究员 汇报,漏洞编号为 CVE-2017- 9805(S2-052)。Struts2 REST 插件的 XStream 组件存

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号