问题描述
|
Net::HTTP
库中有一个非常有用的方法,可以调试HTTP请求。
以下是有关文档的内容:
set_debug_output(output)
警告此方法会导致严重的安全漏洞。切勿在生产代码中使用此方法。
设置输出流以进行调试。
http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html#M001371
这里提到什么安全漏洞?
解决方法
查看代码,除了HTTP协议中的所有内容都传递到您提供的流之外,没有其他安全漏洞。如果您不小心,并且将输出放置在您不怀疑的地方,则可能会暴露应用程序的内部运行情况。
恕我直言,文档中的声明非常难,并且没有提供有关安全漏洞的良好解释。我认为该评论应遵循以下内容:
要小心,坐在你的手上
输入之前,因为设置了
debug_output将公开完整的
HTTP协议(包括可能的
敏感信息)
那是传入的。
长话短说:没有“隐藏”的安全漏洞。
,
set_debug_output(output)
可以暴露敏感的用户数据。
在https://github.com/ruby/ruby/blob/trunk/lib/net/protocol.rb#L159和https://github.com/ruby/ruby/blob/trunk/lib/net/protocol的行中。 rb#L196所有流量都返回给提供的任何“ 3”,并且可能暴露会话ID,登录凭据,信用卡信息等。
在下面的示例中,即使使用SSL,SENSITIVE DATA也可能暴露于$stdout
或$stderr
require \"net/https\"
require \"uri\"
uri = URI.parse(\"https://ssltest7.bbtest.net/\")
http = Net::HTTP.new(uri.host,uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
#SECURITY HOLE
http.set_debug_output($stdout)
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({\"SENSITIVE\" => \"DATA\"})
response = http.request(request)
更多Net :: HTTP示例
,可能是由于将debug设置为on会使您的站点向攻击者泄漏更多信息。如果有人试图闯入,他们可以准确地看到造成的错误,从而使反向工程更容易地进行您的网站工作。
,除了信息公开之外,还有其他一些可能的漏洞。
您可以利用以下事实:打开了一个文件流,可以将其写入作为注入代码的向量。通过发布请求删除有效负载。
您还可以快速填充磁盘,从而损害日志的可用性。
您可以通过将漏洞利用注入将要读取的文件中,利用日志解析器/文件查看器中的漏洞,该漏洞已知将用于查看日志。
可能还有更多我想不到的向量,但这足以使我不想这样做,除非它是非常临时的,并且您必须说服我没有生产中的其他方式。