服务器 500 错误是安全问题吗?

dfd*_*esq 3 java security gwt

我发现使用curl 和带有POST 有效负载的伪造GWT-Permutation 可能会在服务器上导致500 个错误。有效负载在 Apache 服务器上生成 java.lang.Exception。

这会带来安全问题吗?我应该向 Google 的 GWT 支持报告吗?

为了澄清这个问题:大量的服务器错误是否会成为拒绝服务的问题。即他们会耗尽服务器资源吗?(抱歉,如果这太假设了)。

SEVERE: Exception while dispatching incoming RPC call
java.lang.NumberFormatException: Expected type 'int' but received a non-numerical value: 
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.getNumberFormatException(ServerSerializationStreamReader.java:999)
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.readInt(ServerSerializationStreamReader.java:537)
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.readString(ServerSerializationStreamReader.java:582)
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.prepareToRead(ServerSerializationStreamReader.java:488)
    at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:240)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:206)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)

谢谢!戴夫

Aur*_*and 7

我想到了两个安全问题。

1) 泄露您的系统信息。如果堆栈跟踪返回到客户端,那么您最终可能会泄漏信息,这可能有助于攻击者构建更有效的攻击。您已经提到此堆栈跟踪仅在您的日志中,因此这一点不是问题。

2) 拒绝服务。如果攻击导致您泄漏资源,或者使服务器端对每个请求执行的处理量远多于客户端必须执行的处理量,则这就是一个问题。

在您的情况下,如果此特定异常导致连接泄漏(即未正确关闭),则您将遭受 DoS 攻击。如果此攻击导致您的服务器执行繁重的处理,则您也遭受了 DoS 攻击。然而,看起来情况可能并非如此。看起来就像NumberFormatException在服务器解析请求时就终止了请求。与响应格式良好的请求相比,这在计算上可能更便宜。

从遵守 HTTP 规范的角度来看,存在一个不错的论点,即服务器应该返回 HTTP 400 错误请求而不是 HTTP 500 内部服务器错误,因为该错误是由于格式错误的请求参数造成的,但这确实延伸到迂腐的境界。