在绿盟的安全扫描中 Spring Actuator漏洞作为一个高危漏洞 该接口会暴露出我们Spring 信息,具体整改有两种方案 最初我对于调整该接口的方案是使用 nginx进行接口拦截,实际上该方案也是可行的 ,但是只针对于对外暴露的端口,绿盟在扫描内部容器漏洞的时候(可以理解为跳过nginx 直接扫描到端口) 会发生 严重 的信息泄露。至此我的方案是需要关闭该actuator 接口
测试方法: IP+端口 + 接口 访问如下节点 若非404且返回spring 信息 则判定该漏洞未修复
健康检查:通过 /actuator/health 端点,可以检查应用程序的健康状态。
信息端点:通过 /actuator/info 端点,可以获取应用程序的自定义信息。 建议关闭
度量指标:通过 /actuator/metrics 端点,可以获取应用程序的各种度量指标,如内存使用情况、线程数等。 建议关闭
环境信息:通过 /actuator/env 端点,可以获取应用程序的环境配置信息。 建议关闭
映射信息:通过 /actuator/mappings 端点,可以获取应用程序的所有请求映射信息。 建议关闭
内部关闭的方案有两种
- 通过代码的形式实现对接口访问的限制
- 通过Nacos配置的形式关闭(本文采用该方案)
解决方案
# 直接禁用actuator接口配置
management:
server:
port: -1
遇到问题:
网上有很多方案是这样的
这是旧版本的写法
会导致非常邪门的错误,后续读取不到Nacos的配置等,(ps: 我使用的版本是SpringBoot 2.3.7 )
09:58:55.777 [http-nio-9203-exec-8] WARN o.s.w.s.r.ResourceHttpRequestHandler - [isInvalidPath,738] - "Path with "WEB-INF" or "META-INF": [portal/WEB-INF/config/spring/applicationContext-datasource.xml]"
09:58:55.777 [http-nio-9203-exec-8] ERROR o.a.c.c.C.[.[localhost] - [log,175] - Exception Processing ErrorPage[errorCode=0, location=/error]
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping;
at org.apache.catalina.core.ApplicationHttpRequest.setRequest(ApplicationHttpRequest.java:714)
at org.apache.catalina.core.ApplicationHttpRequest.<init>(ApplicationHttpRequest.java:113)
at org.apache.catalina.core.ApplicationDispatcher.wrapRequest(ApplicationDispatcher.java:920)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:359)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313)
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:403)
at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:249)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1