Ну что, вы тоже запаниковали по поводу безопасности в npm после недавнего блог поста?

Конкретнее, этого:
habrahabr.ru/company/ruvds/blog/346442

Этот пост отличный троллинг, дайте ка я расскажу вам почему. Да, в целом это возможно. И да, нужно быть внимательным. Но давайте на чистоту — это не проблема npm, и определенно в этом нет ничего нового.
Давайте разберемся почему эта статья полнейшая чушь, которая ошибочно выставляет npm в плохом свете и разводит панику на пустом месте.

Смысл трояна


Автор описывает его вредоносный javascript код, который встраивается в веб сайты и ворует данные.
Для того чтобы автор смог получить данные с сайтов, он определил что ему нужно каким-то образом распространить этот код и выбрал для этого npm.

Пока ничего нового и ничего удивительного. Каждый может пушнуть вредоносный код куда угодно: в npm, python pipy, и т.д.

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

Реальная проблема в том, как распространить этот троян на другие сайты.

Автор определил проблему и выбрал путь открытия пул реквестов в проекты на GitHub, в которых подло добавлял его вредоносный пакет к остальным зависимостям в package.json.

Вот и все, это вся суть его хака. ВСЯ СУТЬ трояна конкретно в этом. Никакой магии.
Никакого удаленного выполнения кода на серверах npmjs.
Никакой wu-ftpd уязвимости.
Никакого удаленного npmjs meltdown или любой другой 0-day атаки.
Автор так же не звонил в поддержку npmjs и не свистел на частоте 2600 герц в трубку.

Позвольте перефразировать


Путь распространение вредоносного пакета — убеждение других проектов использовать эту зависимость.

Прекрасно. Давайте немного успокоимся и осознаем этот инновационный способ хакерской атаки.

Без сомнения, автор одарен невероятными коммуникативными навыками, и если суть в этом — я могу только порекомендовать:
1. рассмотреть карьеру в продажах или инвестициях, потому что ты очевидно сможешь продать эти PRы любому инвестору.
2. обратиться к Kevin Mitnick и спланировать с ним компьютерное ограбление века.

Причем тут npm?


Честно? Я не знаю.

Меня бесит, почему каждый раз кто-то хочет навязать великий страх нашему Javascript сообществу.

Почему npm козел отпущения? Давайте рассмотрим следующие аналогии:
  • Я контрибьютор в линукс ядро. Я добавил мой патч в проект, достаточно большой, и он был замерджен. Позже Ubuntu будет выпущен с новой версией ядра, которая включает мой зловредный код.
    Вы будете винить Ubuntu в том, что они распространили багнутую или хакнутую версию ядра Linux?
  • Я wordpress контрибьютор. Я добавил патч или фичу в популярный пакет, который попал в 30% из 10 миллионов самых популярных сайтов мира.
    Сейчас вы будете винить Wordpress?
  • Если кто-то нашел дыру в DNS протоколе, вы будете бегать и кричать «ааа, дыра в безопасности!» на миллион раутеров по всему миру, единственная задача которых — передавать DNS траффик?


У меня заканчиваются аналогии, но я очень надеюсь, что вы уловили мысль.

Проблема не в npm. У них много проблем, но этот случай — точно напрямую не связан с npm.

Основные аргументы защиты


Мне кажется глупым даже упоминать эти пункты из оригинального блог поста, но, надеюсь, я хотя бы расскажу для кого-то что-то новое:
читает cookie из document.cookie.

Уже больше чем десятилетие у cookies есть флаг httpOnly, основная задача которого — защитить их от XSS атак и вредоносного JavaScript кода, который пытается получить к ним доступ.

Моя программа ничего никуда не отправляет между 7-ю утра и 7-ю вечера.

Я… Даже не знаю что ответить на это. Я надеюсь, что автор понимает что у времени есть небольшое свойство — оно относительно.

Кстати, чисто для информации, обычно админы работают по follow-the-sun модели, что значит, что кто-то всегда не спит и бдит.

Серьезно, это как сказать, что полиция работает только по ночам, потому что кто будет совершать преступление средь бела дня?

Понимаем ли мы Open Source?


Понимаете ли вы, что вы работаете в Open Source сообществе? Вы понимаете что это значит?

Open Source построен на доверии. На сообществе, общении и других ключевых вещах, что и делает его настолько крутым и за что я его люблю.

Могу ли я выложить в open source проект с уязвимостью? Да
Могу ли я выложить в open source проект с проблемами в быстродействии, из-за которого вы потенциально потеряете миллионы в Рождественский вечер? Да

Как метко выразился Eric Raymond в его статье, где он ссылался на высказывание Линуса о том, что open source очень уязвим:
при достаточном количестве глаз баги выплывают на поверхность


Когда вы выбираете open source, вы так же берете на себя риски, которые он несет за собой.
Будь то плохой, вредоносный или не сопровождаемый код.

Но ответственность полностью на вас. Вы ответственны за обеспечение должной проверки пакетов, которые вы устанавливаете из npm. Это не задача npm проверять каждую строчку кода за вас. npm — просто механизм распространения.

Эпилог


Я понял, что этот блог пост был юмористическим. Но реакции и комментарии, которые я прочитал и получил — были от людей, которые восприняли это все слишком серьезно, вплоть до паники.

Я должен честно признаться — я немного расстроился видя весь этот шум и обсуждения на счет npm и безопасности в целом, на основании, казалось бы, шуточной статьи.

Я security активист, автор книги Node.js Security, постоянный котрибьютор в проект OWASP Node.js и регулярно провожу лекции на тему безопасности в Node.js.
Почему я об этом говорю? Потому что я очень поддерживаю всеобщую осведомленность в сфере безопасности веб-приложений (или информационной безопасности в целом). Но мне не нравится, когда npm и сообщество становится грушей для битья без причины.

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

Однако, я считаю что мы должны больше уважать умственные способности наших читателей. И делать это с помощью более конструктивных статей про опасности в сфере веб-безопасности (или npm) без необходимости наводить панику. Это не то, как мы строим доверие в мире безопасности.

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