Мейнтейнер популярного опенсорсного npm-пакета node-ipc Брэндон Нозаки Миллер (известный в обществе разработчиков под ником RIAEvangelist) внедрил в его код вредоносное ПО, которое стирает жесткие диски компьютеров пользователей с IP-адресами из России или Беларуси, сообщает портал ZDNet.
Все началось с вроде бы невинного протеста против конфликта на Украине. Миллер написал и опубликовал модифицированный npm-пакет с открытым исходным кодом, который перезаписывал файлы на компьютере пользователей с IP адресами из России и Белорусии и заменял их смайликом. Но затем ситуация вышла из под контроля: он начал уничтожать файловые системы компьютеров. Точнее, Миллер добавил код, который удалял файловую систему компьютеров пользователей из этих стран. Затем мейнтейнер добавил модуль в качестве зависимости к чрезвычайно популярному пакету node-ipc. Последний, в свою очередь, является крайне востребованной зависимостью, которую используют многие JavaScript-программисты. И он превратился из вызывающего недовольство в разрушителя систем.
По данным компании Snyk, занимающейся безопасностью ПО и обнаружившей проблему, «node-ipc (версии >=10.1.1 <10.1.3) — это вредоносный пакет. Он содержит вредоносный код, который нацелен на пользователей с IP, расположенных в России или Беларуси, и заменяет содержимое их файлов на эмодзи в виде сердечка». Уязвимости присвоен идентификатор CVE-2022-23812 с оценкой CVSS 9,8 (критическая).
С момента своего появления код претерпел ряд изменений, и его следует считать крайне опасным. Подчеркивая его потенциальную опасность, Миллер закодировал свои изменения кода в base-64, чтобы затруднить обнаружение проблемы простым чтением кода.
Фактически, Node-ipc теперь нельзя использовать. Но это легче сказать, чем сделать. Он присутствует во многих программах и используется для локальной и удаленной межпроцессной коммуникации (IPC) в системах Linux, Mac и Windows. Его также задействуют в очень популярном Javascript-фреймворке vue-cli для создания пользовательских веб-интерфейсов. Именно через него эта вредоносная программа разрушила большое количество систем.
«Даже если преднамеренный и опасный поступок мейнтейнера RIAEvangelist будет воспринят некоторыми как законный акт протеста, как это отразится на его будущей репутации и его вкладе в сообществе разработчиков? Можно ли ему будет снова доверять, чтобы в будущем он не предпринимал подобных или даже более агрессивных действий в отношении любых проектов, в которых он участвует?», — вопрошает Лиран Таль, исследователь компании Snyk, обнаруживший проблему, сказал. Сам Миллер, защищая свой пакет на GitHub, заявил: «Это все публично, документировано, лицензировано и с открытым исходным кодом».
Но что, если какой-либо другой мейнтейнер сделал нечто подобное и не оставил такого сообщения? И почему опасный код был скрыт, что не дало пользователям возможность принять осознанное решение?
В любом случае, люди, как известно, не умеют читать документацию. Кроме того, как отметил старший исследователь угроз компании Sophos Шон Галлахер в своем твиттере, любой, кто просто добавляет код по собственной воле в свои производственные системы, напрашивается на неприятности. «Если вы в прямом эфире устанавливаете исправления зависимостей, для которых у вас нет контроля качества, вы не имеете никакого отношения к SecOps», — сказал он.
Это «протестное ПО» создает опасный прецедент. «Что произойдет дальше, так это то, что команды безопасности в западных корпорациях, которые не имеют абсолютно никакого отношения к России или политике, начнут рассматривать свободное ПО на базе Open Source как путь для атак на цепочки поставок (чем оно полностью и является) и просто начнут запрещать все такое ПО в своих компаниях. Или, по крайней мере, все то, что поддерживается сообществом. Это не будет иметь никакого положительного эффекта для украинцев, идиот, и только навредит внедрению FOSS», — справедливо написал один программист на GitHub.
Тем временем, в обычном для Open Source порядке исправления собственных ошибок, другой разработчик Тайлер С. Реш, MidSpike, начал усилия по созданию безопасного форка node-ipc на GitHub.