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 за исправления.
Привожу мой свободный перевод текста официального сообщения:
Во-первых, очевидно, что решение проблемы не идеально, но оно поможет нам сэкономить время на разработку лучшего решения. В США сейчас вечер и сейчас выходные, связанные с 4 июля (День независимости США).
Мы призываем обновится, потому что детали об уязвимости и потенциале использования ненароком оказались на публичном форуме. Итак, мы предпочти дать компаниям и пользователям инструмент для защиты своих проектов и смягчения DoS атак, если таковые случатся. Потому что лучше встретиться с реальностью, нежели сидеть скрестив пальцы. Время поджимает, особенно для США, где сейчас праздники, что делает это все кошмаром для людей, развертывающих больший проекты. Но этот призыв мы делаем с полезной информацией.
Короткая история:
Крис Ривз и Тревор Норрис обнаружили ошибку в V8 в методе, который декодирует UTF строки. Суть ошибки в том, что при конвертации буфера в UTF8 строку процесс может «упасть». Проблема безопасности возникает из-за того, что большое количество информации, поступающее в приложение, использует данный механизм; это означает, что пользователи могут посылать специально сгенерированные строки, чтобы «убить» приложение. Мы знаем, что уязвимо большинство сетевых операций и операций файловой системы, равно как и вызовы функции конвертации буфера в UTF8 строку. Мы знаем, что разбор HTTP(S) заголовков не уязвим, т. к. Node не конвертирует эти данные в UTF8. Это маленькое утешение, которое ограничивает пути эксплуатации уязвимости через HTTP(S), однако очевидно, их предостаточно. Так же у нас еще нет информации о том, как уязвимость воздействует на TLS ограничители (terminators) и прокси сервера (forward-proxy).
Выпуск патча был запланирован на полдень по тихоокеанскому времени. Конечно же, патч не был готов вовремя. В течение дня был проведен обширный тест и верификация дляV8, io.js и Node.js. Сборка тоже заняла некоторое время и из-за всего этого произошла задержка. Федор Индутный сразу же сделал исправление, Бен Нурдуис, Тревор Норрис, Жюльен Джилли, Род Вагг, Майкл Доусон и Иеремия Сенкпаил усердно работали над обновлением.
[ Источник ]
UPD: Спасибо arelay за исправления.
Комментарии (7)
arelay
08.07.2015 07:01+2очень тяжело работали чтоб доставить это обновление
Тогда уже вольный перевод «переводчика» ;)
alexismaster
08.07.2015 14:23я верно понял что кроме доса это ни чем не грозит?
Nord001
08.07.2015 15:07Этого разве мало? Но вот только я не понял как воспроизвести. У себя попробовал и так и этак — 0 реакции.
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
alexaol
08.07.2015 16:23Если я ничего не путаю, то node версии 0.10.x этой проблеме не подвержена, проблема есть только в более новых версиях. См. комментарии к фиксу:
github.com/joyent/node/commit/78b0e30954111cfaba0edbeee85450d8cbc6fdf6
0leGG
РЕШЕТО