我们的网站由一家安全扫描仪公司测试,发现了已知漏洞。这听起来像“信息泄漏是应用程序泄露敏感数据的应用程序弱点”。
服务器使用 Tomcat 8.5.42 运行 ColdFusion 2016
当安全人员使用更改的主机名模拟黑客攻击运行 Curl 命令工具时,服务器会生成 java 堆栈错误,其中包含有关服务器的过多信息。
下面是命令:
C:\curl\bin\curl.exe -i -s -k -X "GET" -H "Accept: application/json,text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" -H "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" -H "Accept-Language: en-us,en;q=0.5" -H "Host: whs'check" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0 Software Security Group" "https://www.[mysite.com]/"
输出导致以下 java 堆栈错误:
<!doctype html><html lang="en"><head><title>HTTP Status 400 – Bad Request</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 400 – Bad Request</h1><hr class="line" /><p><b>Type</b> Exception Report</p><p><b>Message</b> The character ['] is never valid in a domain name.</p><p><b>Description</b> The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).</p><p><b>Exception</b></p><pre>java.lang.IllegalArgumentException: The character ['] is never valid in a domain name.
org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.java:966)
org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:842)
org.apache.tomcat.util.http.parser.Host.parse(Host.java:66)
org.apache.tomcat.util.http.parser.Host.parse(Host.java:40)
org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:293)
org.apache.coyote.ajp.AjpProcessor.prepareRequest(AjpProcessor.java:1062)
org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:523)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
命令中的罪魁祸首是:“主机:whs'check”。其中非法字符单引号“'”。
我尝试了几件事,例如向 server.xml 文件添加条目
<Connector port=".... relaxedQueryChars="'">
另外,我尝试添加到 catalina.properties
tomcat.util.http.parser.HttpParser.requestTargetAllow='
或者
tomcat.util.http.parser.HttpParser.requestTargetAllow="'"
似乎没有任何工作。我们需要想办法在运行像 Curl 这样的客户端工具时不显示与服务器相关的错误。每当用户从浏览器访问网站时发生错误时,我们都会显示通用错误页面。
有人建议限制对某些 IP 的错误可见性。我在 Coldfusion Admin 中看不到任何设置来执行此操作。Apache Tomcat 配置上有什么东西可以做到这一点吗?可能是在 catalina.properties 文件中添加一些内容?
谢谢