SSRF CheckMarx String输入参数的漏洞

时间:2017-06-20 11:59:06

标签: java checkmarx ssrf

我正在为我的一个项目运行CheckMarx扫描,并且它为方法的一个输入字符串参数附带了一个SSRF漏洞。我的方法如下所示,并且参数 param1 抛出了SSRF漏洞。

public String method1(@WebParam(name = "param1") final String param1) {
    LOG.info("Inside method1...")
    if (StringUtils.isBlank(param1) || !StringUtils.isAlphanumeric(param1)) {
        throw new DataManipulationException();
    }
    // Call 3rd party here (method in line 87 below)
}

在方法内部,我使用HttpClient GetMethod调用第三方URL,并将param1作为查询字符串参数传递。

来自CheckMarx的SSRF是:

The application sends a request to a remote server, for some resource, using @DestinationElement in \src\com\test\Test.java:87. However, an attacker can control the target of the request, by sending a URL or other data in param1 at \src\com\test\Test.java:55.

在第55行,我有

public String method1(@WebParam(name = "param1") final String param1) {

在第87行,我有

private String processRequest(final GetMethod method) throws IOException {

对于解决此SSRF漏洞的任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

要确认SSRF漏洞,还需要processRequest方法的代码段。据我了解,CheckMarx将此问题报告为" param1"应包含第三方URL以及应用程序正在使用的URL。可能有以下可能性来缓解SSRF风险:

  • 您是否需要第三方库来执行功能?如果否,那么您可以安全地删除该代码。
  • 如果您需要第三方且网址保持不变,则可以对该网址进行硬编码。
  • 如果您无法进行硬编码并且不断更改,那么您是否可以列出可能的第三方网址?必须手动审核所有可能的第三方网址,并执行白名单以允许所需的网址。或者所有可能的URL都应插入到后端的文件/数据库中,用户可以传递该特定URL的ID。
  • 如果URL每次都在不断更改且无法列入白名单,则应该防止不能进一步损害应用程序的方法。在这种情况下,需要方法的代码段,并且应该正确地检查方法。