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 за исправления.

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


  1. 0leGG
    08.07.2015 04:03
    -9

    РЕШЕТО


  1. arelay
    08.07.2015 07:01
    +2

    очень тяжело работали чтоб доставить это обновление

    Тогда уже вольный перевод «переводчика» ;)


    1. OmegaScorp Автор
      09.07.2015 13:08

      Спасибо, исправил.


  1. alexismaster
    08.07.2015 14:23

    я верно понял что кроме доса это ни чем не грозит?


    1. Nord001
      08.07.2015 15:07

      Этого разве мало? Но вот только я не понял как воспроизвести. У себя попробовал и так и этак — 0 реакции.


      1. OmegaScorp Автор
        09.07.2015 11:22

        Вот пример из рапорта об ошибке:

        '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


  1. alexaol
    08.07.2015 16:23

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