Почему Net :: HTTP set_debug_output опасен, если используется в производстве? - PullRequest
14 голосов
/ 18 марта 2011

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

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

set_debug_output(output)

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

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

http://ruby -doc.org / STDLIB / libdoc / сеть / HTTP / RDoc / классы / Net / HTTP.html # M001371

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

Ответы [ 4 ]

16 голосов
/ 26 мая 2011

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

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

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

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

5 голосов
/ 26 мая 2011

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

В следующем примере, ЧУВСТВИТЕЛЬНЫЕ ДАННЫЕ могут подвергаться воздействию $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

2 голосов
/ 25 мая 2011

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

1 голос
/ 31 мая 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...