Подтвердить что ты не робот

Почему Net:: HTTP set_debug_output опасен, если используется в производстве?

В библиотеке Net::HTTP есть очень полезный метод, который дает возможность отлаживать HTTP-запросы.

Вот что говорит об этом документация:

set_debug_output(output)

ПРЕДУПРЕЖДЕНИЕ Этот метод вызывает серьезную дыру в безопасности. Никогда не используйте этот метод в производственном коде.

Установите выходной поток для отладки.

http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html#M001371

Какое отверстие безопасности упоминается здесь?

4b9b3361

Ответ 1

Глядя на код, нет другого отверстия безопасности, за исключением того факта, что все в протоколе HTTP передается потоку, который вы предоставляете. Если вы не позаботитесь, и вывод помещен где-то, вы не подозреваете об этом, это может вызвать внутреннюю работу вашего приложения.

IMHO, выражение в документации довольно сложно и не дает хорошего объяснения относительно дыры в безопасности. Я думаю, что комментарий должен прочитать что-то вроде:

Будьте осторожны и сидите на своих руках перед тем, как напечатать debug_output выставляет полную Протокол HTTP (включая возможные чувствительная информация) к потоку который передается.

Короче говоря: нет "скрытой" дыры в безопасности.

Ответ 2

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 весь трафик возвращается к тому, что предоставляется output, и может выявлять идентификаторы сеанса, учетные данные для входа, данные кредитной карты и т.д.

В следующем примере SENSITIVE DATA может быть выставлен как $stdout, так и $stderr даже при использовании SSL

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

Ответ 3

Это может быть связано с тем, что установка отладки позволит вашему сайту утечка дополнительной информации злоумышленнику. Если кто-то пытался проникнуть внутрь, они могли точно видеть ошибки, которые они вызывают, и, таким образом, упростить реверсирование работы вашего сайта.

Ответ 4

Помимо информации об уязвимости, существует пара других возможных уязвимостей.

Вы можете использовать тот факт, что есть открытый поток файлов, который может быть записан как вектор для ввода кода. Удаление полезной нагрузки через почтовые запросы.

Вы также можете быстро заполнить диск, что ухудшит доступность журналов.

Вы можете воспользоваться уязвимостью в средстве просмотра парсера/файла журнала, который, как вы знаете, будет использоваться для просмотра журнала, введя эксплоит в файл, который он будет читать.

Вероятно, еще несколько векторов, о которых я не могу думать, но этого достаточно, что я бы не хотел этого делать, если это не было очень временным, и вы должны были бы убедить меня, что другого способа производства не было.