0

我正在使用 Go + gorilla/mux v1.4 框架开发一个 RESTful Web 应用程序。发布后的一些基本安全测试揭示了应用程序中的开放 URL 重定向漏洞,该漏洞允许用户使用外部 URL 提交特制请求,导致服务器以 301 重定向响应。

我使用Burp Suite对此进行了测试,发现任何重定向到应用程序中外部 URL 的请求似乎都以 301 Moved Permanently 响应。我一直在寻找在发送 301 之前拦截这些请求的所有可能方法,但这种行为似乎已融入 net/http 服务器实现

这是发送到服务器的原始请求 (myapp.mycompany.com:8000):

GET http://evilwebsite.com HTTP/1.1
Accept: */*
Cache-Control: no-cache
Host: myapp.mycompany.com:8000
Content-Length: 0

任何时候的响应都是:

HTTP/1.1 301 Moved Permanently
Location: http://evilwebsite.com/
Date: Fri, 13 Mar 2020 08:55:24 GMT
Content-Length: 0

尽管检查了 request.URL 以防止在 http.handler 中发生这种类型的重定向,但我没有任何运气让请求到达处理程序。似乎基本 http 网络服务器正在执行重定向,但不允许它访问我在 PathPrefix("/").Handler 代码中定义的自定义处理程序代码。

我的目标是确保应用程序针对此类请求返回 404-Not Found 或 400-Bad Request。有没有其他人遇到过大猩猩/多路复用器的这种情况。我在一个 Jetty 网络应用程序上进行了同样的尝试,发现它返回了一个完全有效的 404。我已经在这工作了几天,并且真的可以使用一些想法。

4

1 回答 1

0

这不是声称的开放 URL 重定向安全问题。此请求无效,因为路径包含的绝对 URL 的域与Host标头不同。没有一个理智的客户端(即浏览器)可以被诱使首先发出这样一个无效的请求,因此没有实际的攻击向量。

当然,可以创建一个自定义客户端来提交这样的请求。但也可以使用自定义客户端以非标准方式解释服务器响应或直接访问恶意 URL,甚至无需联系您的服务器。这意味着在这种情况下,客户端本身将是问题,而不是服务器响应。

于 2020-03-13T10:42:34.173 回答