【问题标题】:Prevent Open URL Redirect from gorilla/mux阻止来自 gorilla/mux 的打开 URL 重定向
【发布时间】:2020-06-25 07:46:48
【问题描述】:

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

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

这是发送到服务器 (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。我已经在这方面工作了几天,并且真的可以使用一些想法。

【问题讨论】:

    标签: go redirect gorilla go-http


    【解决方案1】:

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

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

    【讨论】:

    • Steffen,感谢您的澄清。但是,当遇到这样一个特殊的请求时,我仍然希望让 gorilla/mux 返回像 Jetty 这样的 404。我应该从 gorilla/mux 切换到其他东西吗?
    • @CodeManure:您可能可以使用SkipClean 来停止自动重定向,然后在您自己的处理程序中处理无效路径。但同样,这首先不是开放的重定向问题。
    • 谢谢史蒂芬。在基本路由器上设置SkipClean(true) 就可以了!感谢您的帮助!
    猜你喜欢
    • 2020-10-03
    • 2014-11-30
    • 2017-05-27
    • 2014-09-08
    • 2014-12-22
    • 2017-06-19
    • 2014-11-26
    • 2021-05-03
    • 2021-03-06
    相关资源
    最近更新 更多