【安全】Apache Tomcat CVE-2017-12617 put请求漏洞修复方案
来源:互联网 发布:创维酷开内置软件卸载 编辑:程序博客网 时间:2024/05/29 15:07
一·背景描述
近期,Apache项目官网发布Tomcat中间件远程代码执行(CVE-2017-12617)漏洞,可导致服务器上的数据泄露或服务器权限被获取;外部专业安全机构分析报告显示该漏洞威胁等级较高,现将有关事项通知如下:
一、漏洞情况说明
说明
漏洞编号
CVE-2017-12617(远程代码执行漏洞)
漏洞描述
在一定条件下,攻击者可以利用这个漏洞,获取用户服务器上JSP文件的源代码,或是通过精心构造的攻击请求,向用户服务器上传恶意JSP文件,通过上传的JSP 文件,可在用户服务器上执行任意代码,从而导致数据泄露或获取服务器权限,存在高安全风险。
威胁等级
高
影响范围
Apache Tomcat 9.0.0.M1-9.0.0
Apache Tomcat 8.5.0-8.5.22
Apache Tomcat 8.0.0.RC1-8.0.46
Apache Tomcat 7.0.0-7.0.81
修复方案
参见应急处置要求
二、应急处置要求
(一)CVE-2017-12617修复方案
受CVE-2017-12617影响的Apache Tomcat 7.0.0 - 7.0.81版本建议升级到Apache Tomcat 7.0.82;8.5.0-8.5.22版本建议升级到8.5.23;8.0.0.RC1-8.0.46建议升级到8.0.47;Apache Tomcat 9.0.0.M1-9.0.0建议升级到9.0.1,并进行相关技术和业务测试。
针对受影响版本,Apache官方发布了对应的Tomcat升级版本。根据安全服务商分析,版本升级可解决上述漏洞。升级版本已上传至FTP服务器,地址ftp://10.32.108.37/信息技术中心标准化文档/软件安全补丁/Tomcat,相关信息见下表:
版本
文件名
MD5校验值
7.0.82
apache-tomcat-7.0.82.tar.gz
b9c07fb4f37063e9e8185972b3f88a98
apache-tomcat-7.0.82-windows-x86.zip
dceb8435f0f741e1ac85620fee26b98c
apache-tomcat-7.0.82-windows-x64.zip
59a62692f4152d089a9d28daa82154d0
8.5.23
apache-tomcat-8.5.23.tar.gz
c4addea2c8c166530f11bdeb4730c26e
apache-tomcat-8.5.23-windows-x86.zip
d5433dae3cf986cabe1350b450939458
apache-tomcat-8.5.23-windows-x64.zip
65a15a86d19e1046c98b1ca95100779b
8.0.47
apache-tomcat-8.0.47.tar.gz
0fd249576c33fa71947bc7d296d5b0a9
apache-tomcat-8.0.47-windows-x86.zip
5e4c28f0e2b5602d6531958cb6ff1f6f
apache-tomcat-8.0.47-windows-x64.zip
28cad2840850971c29757f901dee7b8f
9.0.1
apache-tomcat-9.0.1.tar.gz
29c36bbdd7c22a74603d3db04e946be0
apache-tomcat-9.0.1-windows-x86.zip
2ac0885c3588e3d237a0e1590aa0fd56
apache-tomcat-9.0.1-windows-x64.zip
845a0bc44691b15f65ddee5f76de3fd5
官网下载地址:
https://tomcat.apache.org/download-70.cgi
https://tomcat.apache.org/download-80.cgi
https://tomcat.apache.org/download-90.cgi
(二)CVE-2017-12617临时规避方案
用户可以禁用PUT
二·解决方案
步骤:
1·tomcat目录 conf web.xml 和 项目 web-inf 下的Web.xml 添加 以下配置禁用这些请求方式
<security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>HEAD</http-method> <http-method>OPTIONS</http-method> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint></auth-constraint> </security-constraint>
此方法,适用于静态资源和实现了doGet、doPost方法的servelt类的服务。一般现代web应用大多采用Spring MVC框架,DispatchServelet的父类重org.springframework.web.servlet.FrameworkServlet重写了javax.servlet.http.HttpServlet的doGet、doPost、doPut、doDelete、doOptions、doTrace,对应HTTP 的标准方法。
DispatchServelet处理每一个请求时,由javax.servlet.http.HttpServlet的service方法进行处理,因此,HTTP的标准方法都会被处理。单纯的配置web.xml无法禁用掉HTTP方法。
2·Spring MVC 禁用HTTP OPTIONS方法
在应用的web.xml中修改spring mvc的配置:
<servlet> <servlet-name>springServlet</servlet-name> <servlet-class>s2jh.biz.util.CustomerDispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>springServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
重写DispatcherServlet的doOptions方法:
/** * 自定义 Spring MVC DispatcherServlet * Disabled HTTP OPTIONS METHOD */ public class CustomerDispatcherServlet extends DispatcherServlet { private static final Logger LOGGER = LoggerFactory.getLogger(CustomerDispatcherServlet.class); private static final long serialVersionUID = 8018418118826214565L; private static final ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.http.LocalStrings"); private static final String METHOD_OPTIONS = "OPTIONS"; @Override protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { methodNotAllowed(METHOD_OPTIONS, response); LOGGER.warn("HTTP OPTIONS DISABLED."); } /** * DISABLED HTTP METHOD * * @param methodName * @param response * @throws IOException */ private void methodNotAllowed(String methodName, HttpServletResponse response) throws IOException { String errMsg = lStrings.getString("http.method_post_not_supported"); Object[] errArgs = new Object[1]; errArgs[0] = methodName; errMsg = MessageFormat.format(errMsg, errArgs); response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, errMsg); } }
在Tomcat的web.xml文件中配置org.apache.catalina.servlets.DefaultServlet的初始化参数:
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param><init-param><param-name>readonly</param-name><param-value>true</param-value></init-param> <load-on-startup>1</load-on-startup> </servlet>
确保readonly参数为true(默认值),即不允许DELETE和PUT操作。
注意:如果你之前添加了readonly的配置 值为 false ,可能你的项目里 使用了 rest ,如果 改成true rest 请求会失败,需要你把用到的 rest 请求修改为 get/post
最后效果如图:因为在web-resource-collection 里 禁用了一些请求所以返回错误码403
HTTP Status 403 - Access to the requested resource has been denied
如果不禁用请求 单单只是让readonly 为 true 生效 效果如下图
HTTP Status 405 - HTTP method PUT is not supported by this URL
在网上找的,比较详细
WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:
OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 向指定资源位置上传其最新内容。
DELETE 请求服务器删除Request-URI所标识的资源。
TRACE 回显服务器收到的请求,主要用于测试或诊断。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当符合下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。
http的访问中,一般常用的两个方法是:GET和POST。其实主要是针对DELETE等方法的禁用。
[部分资料节选自网络]
阅读全文
0 0
- 【安全】Apache Tomcat CVE-2017-12617 put请求漏洞修复方案
- Apache Tomcat漏洞 之 CVE-2017-12617
- 9 月 19 日,腾讯云安全中心监测到 Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615
- CVE-2017-12617漏洞分析
- Tomcat任意文件上传漏洞CVE-2017-12615复现测试
- Tomcat远程代码执行漏洞(CVE-2017-12615)
- 测试Tomcat CVE-2017-12615 远程代码执行漏洞
- Tomcat 远程代码执行漏洞分析(CVE-2017-12615)
- Oracle 漏洞修复方案
- Struts2漏洞修复方案
- Web安全 -- CVE-2016-10033漏洞
- 【漏洞公告】CVE-2017-7669:Apache Hadoop远程权限提升漏洞
- [安全漏洞公告专区]【漏洞公告】CVE-2017-9798:“Optionsbleed”-Apache HTTP OPTIONS方法内存泄露漏洞
- [漏洞] CVE-2017-1000364/CVE-2017-1000365/CVE-2017-1000366
- 平滑升级Nginx到新版本v1.12.1修复Nginx最新漏洞CVE-2017-7529
- tomcat 漏洞 CVE-2016-1240 分析报告
- Apache Tomcat RCE if readonly set to false (CVE-2017-12617)
- Struts2 高危漏洞修复方案
- angular npm install问题
- Admin站点的使用(总结)
- 个人找到的阿里巴巴java编译手册
- hdu 5035 Delivery 概率
- C++实现均匀照明的自由曲面设计
- 【安全】Apache Tomcat CVE-2017-12617 put请求漏洞修复方案
- PowerPoint (PPT) 文档 文本内容提取
- job触发流程原理剖析与源码分析
- django依赖文件requirements.txt生成/安装
- VC操作XML的基本流程
- 【清明】排序
- 变量问题定义时的注意事项
- php计算两个时间之间的差
- 初赛复习6