Критическое обновление безопасности для node.js и io.js

4 июля, вышло обновление безопасности с исправлением критической уязвимости для node.js и io.js. Суть уязвимости в том, что при конвертации буфера в UTF8 строку приложение может «упасть».

Привожу мой свободный перевод текста официального сообщения:

Во-первых, очевидно, что решение проблемы не идеально, но оно поможет нам сэкономить время на разработку лучшего решения. В США сейчас вечер и сейчас выходные, связанные с 4 июля (День независимости США).

Мы призываем обновится, потому что детали об уязвимости и потенциале использования ненароком оказались на публичном форуме. Итак, мы предпочти дать компаниям и пользователям инструмент для защиты своих проектов и смягчения DoS атак, если таковые случатся. Потому что лучше встретиться с реальностью, нежели сидеть скрестив пальцы. Время поджимает, особенно для США, где сейчас праздники, что делает это все кошмаром для людей, развертывающих больший проекты. Но этот призыв мы делаем с полезной информацией.

Короткая история:

Крис Ривз и Тревор Норрис обнаружили ошибку в V8 в методе, который декодирует UTF строки. Суть ошибки в том, что при конвертации буфера в UTF8 строку процесс может «упасть». Проблема безопасности возникает из-за того, что большое количество информации, поступающее в приложение, использует данный механизм; это означает, что пользователи могут посылать специально сгенерированные строки, чтобы «убить» приложение. Мы знаем, что уязвимо большинство сетевых операций и операций файловой системы, равно как и вызовы функции конвертации буфера в UTF8 строку. Мы знаем, что разбор HTTP(S) заголовков не уязвим, т. к. Node не конвертирует эти данные в UTF8. Это маленькое утешение, которое ограничивает пути эксплуатации уязвимости через HTTP(S), однако очевидно, их предостаточно. Так же у нас еще нет информации о том, как уязвимость воздействует на TLS ограничители (terminators) и прокси сервера (forward-proxy).

Выпуск патча был запланирован на полдень по тихоокеанскому времени. Конечно же, патч не был готов вовремя. В течение дня был проведен обширный тест и верификация дляV8, io.js и Node.js. Сборка тоже заняла некоторое время и из-за всего этого произошла задержка. Федор Индутный сразу же сделал исправление, Бен Нурдуис, Тревор Норрис, Жюльен Джилли, Род Вагг, Майкл Доусон и Иеремия Сенкпаил усердно работали над обновлением.

[ Источник ]

UPD: Спасибо arelay за исправления.
  • +10
  • 8,3k
  • 7
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 7

    –9
    РЕШЕТО
      +2
      очень тяжело работали чтоб доставить это обновление

      Тогда уже вольный перевод «переводчика» ;)
        0
        Спасибо, исправил.
        0
        я верно понял что кроме доса это ни чем не грозит?
          0
          Этого разве мало? Но вот только я не понял как воспроизвести. У себя попробовал и так и этак — 0 реакции.
            0
            Вот пример из рапорта об ошибке:

            'use strict';
            
            var pattern = new Buffer([0xF0, 0x9F, 0x92, 0x95]);
            var data = new Buffer(8000);
            for (var i = 0; i < 8000; i += 4) {
                pattern.copy(data, i, 0, 4);
            }
            data.slice(0, 7833).toString();
            

            На node.js без патча пишет «Segmentation fault (core dumped)» и завершает процесс.

            Сам рапорт: github.com/joyent/node/issues/25583
          0
          Если я ничего не путаю, то node версии 0.10.x этой проблеме не подвержена, проблема есть только в более новых версиях. См. комментарии к фиксу:
          github.com/joyent/node/commit/78b0e30954111cfaba0edbeee85450d8cbc6fdf6

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

          Самое читаемое