HTTP TRACE/TRACK 漏洞问题

最近项目被安全稽核,发现有如下问题:

【问题】远端WWW服务支持TRACE请求。RFC 2616介绍了TRACE请求,该请求典型地用于测试HTTP协议实现。攻击者利用TRACE请求,结合其它浏览器端漏洞,有可能进行跨站脚本攻击,获取敏感信息,比如cookie中的认证信息,这些敏感信息将被用于其它类型的攻击。

1、发现问题

模拟确认: 指令 curl -v -X TRACE localhost:port

# 到服务器上面输入下面的命令
[root@dlp logs]$ curl -v -X TRACE localhost:8089
* About to connect() to localhost port 8089 (#0)
*   Trying ::1...
* Connected to localhost (::1) port 8089 (#0)
> TRACE / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:8089
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: message/http; charset=UTF-8
< Content-Length: 78
< Date: Wed, 09 Nov 2022 11:49:34 GMT
<
TRACE / HTTP/1.1
Accept: */*
User-Agent: curl/7.29.0
Host: localhost:8089
* Connection #0 to host localhost left intact

响应返回 200 ,即代表存在高危漏洞!

如果回显为,如下所示,则该漏洞不存在。

< HTTP/1.1 403 Forbidden
< Content-Type: text/html; charset=iso-8859-1
或者回显为
< HTTP/1.1 405 Method Not Allowed
< Content-Type: text/html; charset=iso-8859-1

显然,我们服务 8089 应该存在高危漏洞。

2、解决问题

如何解决?

由于我们应用是 spring-boot 内嵌 undertow 服务器, 那么就需要添加配置项,直接附上代码:

package com.example.demo.autoconfigure;import io.undertow.server.HandlerWrapper;
import io.undertow.server.HttpHandler;
import io.undertow.server.handlers.DisallowedMethodsHandler;
import io.undertow.util.HttpString;
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Configuration;@Configuration
public class UndertowWebServerCustomizerConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {@Overridepublic void customize(UndertowServletWebServerFactory factory) {factory.addDeploymentInfoCustomizers(deploymentInfo -> {deploymentInfo.addInitialHandlerChainWrapper(new HandlerWrapper() {@Overridepublic HttpHandler wrap(HttpHandler handler) {HttpString[] disallowedHttpMethods = {HttpString.tryFromString("TRACE"),HttpString.tryFromString("TRACK")};return new DisallowedMethodsHandler(handler, disallowedHttpMethods);}});});}
}

写好配置类之后:

  • 在resources/META-INF/spring.factories中设置自动配置类。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.demo.autoconfigure.UndertowWebServerCustomizerConfig
  • 也可以注解方式,启动app类扫码该包路径即可;

3、拓展

3.1、对于spring boot内嵌tomcat:

配置TomcatConfig.java

 1 import org.apache.catalina.Context;2 import org.apache.tomcat.util.descriptor.web.SecurityCollection;3 import org.apache.tomcat.util.descriptor.web.SecurityConstraint;4 import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;5 import org.springframework.boot.context.embedded.tomcat.TomcatContextCustomizer;6 import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;7 import org.springframework.context.annotation.Bean;8 import org.springframework.context.annotation.Configuration;9
10 @Configuration
11 public class TomcatConfig {
12
13     @Bean
14     public EmbeddedServletContainerFactory servletContainer() {
15         TomcatEmbeddedServletContainerFactory tomcatServletContainerFactory = new TomcatEmbeddedServletContainerFactory();
16         tomcatServletContainerFactory.addContextCustomizers(new TomcatContextCustomizer(){
17             @Override
18             public void customize(Context context) {
19                 SecurityConstraint securityConstraint  = new SecurityConstraint();
20                 securityConstraint.setUserConstraint("CONFIDENTIAL");
21                 SecurityCollection collection = new SecurityCollection();
22
23                 collection.addPattern("/*");
24                 collection.addMethod("HEAD");
25                 collection.addMethod("PUT");
26                 collection.addMethod("DELETE");
27                 collection.addMethod("OPTIONS");
28                 collection.addMethod("TRACE");
29                 collection.addMethod("COPY");
30                 collection.addMethod("SEARCH");
31                 collection.addMethod("PROPFIND");
32                 securityConstraint .addCollection(collection);
33                 context.addConstraint(securityConstraint );
34             }
35         });
36
37         //禁用TRACE请求
38         tomcatServletContainerFactory.addConnectorCustomizers(connector -> {
39             connector.setAllowTrace(true);
40         });
41         return tomcatServletContainerFactory;
42     }
43 }

引入方式同上!

3.2、 对于非内嵌式Jetty:

在jetty.xml中增加配置:

1 <security-constraint>
2     <web-resource-collection>
3         <web-resource-name>NoTrace</web-resource-name>
4         <url-pattern>/*</url-pattern>
5         <http-method>TRACE</http-method>
6     </web-resource-collection>
7     <auth-constraint></auth-constraint>
8 </security-constraint>

3.3、对于非内嵌tomcat:

直接修改tomcat根目录conf目录下的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>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
注:在tomcat的在server.xml中先允许TRACE请求,再在web.xml中禁用TRACE,以此禁用TRACE请求.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" allowTrace="true"redirectPort="8443" />

3.4、对于apache:

对于2.0.55以上版本的apache服务器,
在httpd.conf尾部添加如下指令后重启apache即可:
TraceEnable off

如何禁用 HTTP TRACE/TRACK相关推荐

  1. 禁用Web服务器the TRACE and TRACK methods,修复80端口httpd漏洞:CVE-2003-1567

    漏洞报告显示: Medium (CVSS: 5.8) NVT: HTTP Debugging Methods (TRACE/TRACK) Enabled References cve: CVE-200 ...

  2. 启用 HTTP TRACE 方法

    http://publib.boulder.ibm.com/tividd/td/ITAME/SC32-1359-00/zh_CN/HTML/am51_webseal_guide32.htm RFC 2 ...

  3. Linux内核跟踪之trace框架分析【转】

    转自:http://blog.chinaunix.net/uid-20543183-id-1930846.html ------------------------------------------ ...

  4. oracle12c bug,Oracle12c R2注意事项: 因BUG生成大量的trace file 包含KRB: (rman module)

    升级了Oracle 12cR2的同学,尤其是安装了2018 4月RU的版本(12.2.0.1.180417), 遇好检查下你的trace目录下是否生成了超大量的trace file,或单个超大的tra ...

  5. apache禁用不安全的http法_tomcat禁用不安全的HTTP方法

    一般情况下在项目开发完成之后上线之前一般都要经过安全组扫描,上周在处理一个微服务迁移过程中安全组提出了两个安全方面的问题,即微服务的api使用了不安全的http方法(DELETE和TRACE),事实上 ...

  6. 禁用zookeeper admin页面

    zookeeper的内嵌管理控制台是由jetty启动的,存在一定的信息泄露及安全隐患. 今日我们的平台被扫描到HTTP TRACE / TRACK Methods Allowed漏洞,所以想着可以关闭 ...

  7. 通过options探测服务器信息,WEB服务器启用了OPTIONS方法

    漏洞描述 攻击者可利用options方法获取服务器的信息,进而准备进一步攻击. 解决方案: 修改配置文件禁用options方法: windows2008.windows2012,请在wwwroot目录 ...

  8. LInux系统木马植入排查分析 及 应用漏洞修复配置(隐藏bannner版本等)

    在日常繁琐的运维工作中,对linux服务器进行安全检查是一个非常重要的环节.今天,分享一下如何检查linux系统是否遭受了入侵? 一.是否入侵检查 1)检查系统日志 检查系统错误登陆日志,统计IP重试 ...

  9. 常见web中间件 HTTP 限制请求方法 配置

    目录 前言 Nginx.OpenResty配置 IIS 配置 Tomcat.JBOSS配置 WebLogic配置 Apache httpd配置 前言 本文针对 IIS Tomcat Nginx Ope ...

最新文章

  1. 大批量生成假数据,faker.js获得近28k个Star
  2. java工厂模式 uml_简单工厂模式的UML类图与源码实现(转) | 学步园
  3. Win32 OpenGL标准例子
  4. react只停留在表层?五大知识点带你梳理进阶知识
  5. pycharm快捷键_春节快结束了回单位途中总结下pycharm快捷键
  6. 20W+喜爱的Pathview网页版 | 整合表达谱数据KEGG通路可视化
  7. [dhtmlxGantt]浮动Milestone显示
  8. java操作ElasticSearch(es)进行增删查改操作
  9. CoreData学习-最好的一片文章
  10. 单片机pic的linux环境代替,pic单片机can总线协议收发编程
  11. DSP PMBus 相关知识储备
  12. sd卡写保护解除工具_U盘格式化工具怎么用
  13. 专业的压缩解压缩工具 WinZip Pro 7 for Mac
  14. ppt 制作海报 导出高分辨率图片
  15. juniper防火墙操作命令
  16. 用matlab做音乐仿真,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真
  17. java dispo lock_java实现文件上传和下载(1)
  18. 学习python用哪个app-python做app用什么工具
  19. 元宇宙数字藏品,打造数字经济产业,实现全新业态升级
  20. Linux上用到的一些内容整理

热门文章

  1. dz论坛开启html,DZ论坛解决https开启后部分出现http的网址问题导致https不能显示方法...
  2. 双方都在外地能起诉离婚吗
  3. [置顶] 游戏开发技术总结(经典之作)第八集 脚踏实地-----游戏角色自动寻路、路径搜索算法...
  4. gatsby-config.js有什么作用?
  5. 计算机故障吧,摊上事了!我给客户修电脑说主板硬盘坏了,客户:你也太坑了吧!...
  6. java基础练习之奥特曼打小怪兽
  7. 由 官场微小说:两个县长的命运 所想
  8. Linux骚操作之第三十话防火墙
  9. Word转换pdf技巧:通过pdf虚拟打印机生成pdf
  10. 车联网--车路协统技术