The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

NPM-пакет Stylus был по ошибке заблокирован из-за подозрений в наличии вредоносного кода

27.07.2025 09:29

Администраторы репозитория NPM по ошибке заблокировали пакет Stylus, распознав в нём несуществующее вредоносное ПО. Через 12 часов после отправки жалобы в NPM проблема была отмечена как не соответствующая действительности, объявление о наличии вредоносного ПО было отозвано, а пакет восстановлен в репозитории.

Пакет Stylus в прошлом месяце насчитывал 4.2 млн загрузок в неделю и использовался в качестве зависимости у более двух тысяч проектов. Удаление пакета из репозитория привело к массовыми сбоям в сборочных системах проектов, использующих Stylus или зависимые от него пакеты. Среди прочего, возникли проблемы при сборке CLI-инструментария платформы Angular. Сложилась ситуация, напоминающая произошедший в 2016 году инцидент с удалением модуля left-pad.

Причиной ложной тревоги стало присутствие в числе разработчиков Stylus участника panya (бывший сопровождающий), который до этого был уличён в публикации нескольких вредоносных пакетов (svelte-intl, ufo-rocks2, durilka, eslint-plugin-compat, desktop-title, select-account-icon и т.д.). Мотивы действий разработчика "panya" не ясны, предполагается, что он мог проводить исследования, связанные с безопасностью. При этом имея доступ к формированию релизов Stylus, данный разработчик не использовал имеющуюся возможность для внедрения вредоносного ПО в Stylus.


Дополнительно можно отметить появление новых жертв фишинг-атаки через домен npnjs.com. Помимо ранее отмеченных 5 пакетов, атакующим удалось обмануть сопровождающих пакеты is и got-fetch. Пакет is насчитывает 2.8 млн загрузок в неделю и используется в качестве зависимости у 636 других пакетов. Пакет got-fetch насчитывает 53 тысячи загрузок в неделю.

После получения контроля над пакетами злоумышленники сформировали вредоносные выпуски is 3.3.1 и 5.0.0, got-fetch 5.1.11 и 5.1.12. В пакет is был встроен кросс-платформенный загрузчик вредоносного ПО, реализованный на JavaScript и открывающий WebSocket-соединение для удалённого выполнения кода в системе. Вредоносный код также передавал данные о системе и содержимом переменных окружения.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Нарушение обратной совместимости в популярном NPM-пакете привело к сбоям в различных проектах
  3. OpenNews: Сбой антиспам-системы привёл к коллапсу в репозитории NPM
  4. OpenNews: Инцидент с захватом прав на NPM-модуль привёл к сбою в работе проектов, использующих NPM
  5. OpenNews: Фишинг позволил получить контроль над несколькими популярными NPM-пакетами
  6. OpenNews: Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компаний
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/63635-npm
Ключевые слова: npm
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (33) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (3), 11:54, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    > Мотивы действий разработчика "panya" не ясны, предполагается, что он мог проводить исследования, связанные с безопасностью.

    "мотивы ограбления не ясны. предположительно, грабитель проводил исследования, связанные с деньгами."

     
     
  • 2.19, Аноним (19), 14:05, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    1. Об исследованиях надо предупреждать
    2. Учетку могли угнать и автор её давно забросил
    3. блокировать другой проект. к которому он причастен, с учётом контроля Других участников, и без аудита этого пакета, который блокируют автоматически - не логично. Или авторы систему советов и администрация не верит миллиону глаз, в любви к которым признается в каждом письме?
     

  • 1.4, 1 (??), 12:03, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Товарищи аминистраторы репозитория NPM, произошла чудовищная ошибка!
     
     
  • 2.45, Аноним (45), 09:23, 28/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Товарищи аминистраторы репозитория NPM, произошла чудовищная ошибка!

    Сопровождающий зарегистрировался на почтовом домене inbox.ru?

     
     
  • 3.59, голос_из_леса (ok), 00:17, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Хуже "mail.su"
     

  • 1.5, Аноним (5), 12:17, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как от этого спасаться? package-lock.json?
     
     
  • 2.8, 1 (??), 12:34, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если у вас что-то важное, то поднимите свое зеркало пакетов, которые используются в вашем проекте. На зеркале включите сканеры безопасности. Создайте регламенты обновления, следите за изменениями и контролируйте каждую модификацию в package-lock.json. Это будет дорого. Поэтому если ни чего важного нет, то просто расслабьтесь.
     
  • 2.30, morphe (?), 17:28, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Deno позволяет точечно регулировать права

    Разрешить дёргать лишь определённые команды/пускать только в определённые директории на диске/подключаться к заданному списку доменных имён

     
     
  • 3.40, Аноним (40), 03:54, 28/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А еще что?
     
  • 3.41, Аноним (41), 07:07, 28/07/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это на уровне юзерленда ограничения, которые очень легко обойти. Настоящая изоляция -- это либо линукс-неймспейсы, либо виртуалка.
     
     
  • 4.55, morphe (?), 15:31, 28/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это на уровне юзерленда ограничения, которые очень легко обойти. Настоящая изоляция --
    > это либо линукс-неймспейсы, либо виртуалка.

    Ты их никак не обойдёшь, эти ограничения там стоят поверх всего уровня общения интерпрататора JS с системой

    Неймспейсы и виртуалки это хорошо, но как они защитят тебя от майнера/слива данных из той бд/фс куда процессу нужно ходить, туда куда его хождение не было предусмотрено (сервер злоумышленника)?
    Вот тут как раз только точечные ограничения помогут, будь то opensnitch или вот, ограничения Deno.

     
     
  • 5.56, Аноним (41), 21:09, 28/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > поверх всего уровня общения интерпрататора JS с системой

    Чувак. Если есть возможность вызова подпроцессов, то сетевые ограничения обходятся вызовом spawn("curl"), или что там у вас в дено. А если в дено бывают нативные модули (аналог .node-модулей), то движок JS будет не единственным, кто общается с системой. Всегда всё можно обойти, вопрос лишь -- насколько целенаправленно искать. Дено -- это вообще не продакшн-ready история, я вообще вначале думал, что его пишет подросток, а там оказывается аффтар нодежс так и не вырос из штанишек.

     
     
  • 6.57, morphe (?), 22:15, 28/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> поверх всего уровня общения интерпрататора JS с системой
    > Чувак. Если есть возможность вызова подпроцессов, то сетевые ограничения обходятся вызовом
    > spawn("curl")

    ...При условии что ты явно разрешишь запускать curl

    > А если в дено бывают нативные модули (аналог .node-модулей), то движок JS будет не единственным, кто общается с системой

    Есть и .node модули, и dlopen/dlsym, и собственные нативные модули. Для всех есть whitelistы

    > Дено -- это вообще не продакшн-ready история

    Гоняю deno в продакшене, он обслуживает сотни людей, и я не один такой.
    Правда не в исходном виде, а подключаю его как библиотеку, deno_core

    Это в целом намного более грамотно реализованная обёртка над v8 чем node.js, особенно если говорить о поддержке стандартов (В deno предпочтительным является использование web стандартов, а не node.js стандартной библиотеки, которая много где очень криво устроена)

     
     
  • 7.58, Аноним (41), 22:53, 28/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > node.js стандартной библиотеки, которая много где очень криво устроена

    В Node.js можно передавать буфер в качестве имени файла. В дено считается, что имя файла -- это либо UTF-8-строка, либо URL, конвертирующийся в UTF-8-строку. Про то, что имя файла может содержать невалидные UTF-8-последовательности, аффтар дено не слышал. А в ноде -- слышали. Как итог, если ты хочешь получить список файлов в папке, нода вернет список целиком, а дено вернет только те файлы, у которых имена -- UTF-8-валидные. Этого достаточно, чтобы заявить, что дено -- это лишь игрушка в компьютерном классе средней образовательной школы.

     
     
  • 8.60, morphe (?), 03:04, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да, это так Как я и сказал, в deno ориентируются на web api при проентировании ... текст свёрнут, показать
     
     
  • 9.62, morphe (?), 05:05, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и к слову, эти ограничения не в Deno придумали Есть https wintertc org , ко... текст свёрнут, показать
     
  • 8.61, morphe (?), 03:10, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    BTW, просто интересно, как часто и где ты сталкиваешься с именами файлов что не ... текст свёрнут, показать
     
     
  • 9.63, Аноним (41), 07:59, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Речь не о том, как часто Речь о том, что стандартная библиотека языка врет В п... большой текст свёрнут, показать
     
     
  • 10.64, morphe (?), 16:52, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Опять же, апи там соответствует спеке wintertc webapi, там имя файла - url Надо ... большой текст свёрнут, показать
     
     
  • 11.65, Аноним (41), 17:43, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Если прога исполняется не внутри песочницы браузера, вебапи тупо неприменим Это... большой текст свёрнут, показать
     
     
  • 12.66, morphe (?), 19:09, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Что это млять значит Что мешает node js реализовывать fetch, WebCache, WebSock... большой текст свёрнут, показать
     
     
  • 13.67, Аноним (41), 19:38, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не юли, речь шла про ФС-с-точки-зрения-вебапи Деталь реализации, не имеющая отн... большой текст свёрнут, показать
     
     
  • 14.68, erphov (?), 21:26, 29/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тебе же сказали про поддержку node js api, что ты ещё хочешь ... текст свёрнут, показать
     
     
  • 15.69, Аноним (41), 07:16, 30/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Где он там поддерживается Дено НЕ поддерживает апи ноды в полной мере, а его до... большой текст свёрнут, показать
     

  • 1.7, Аноним (7), 12:26, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Удивительное королевство. Не вредоносные банить, вредоносные не банить.
     
  • 1.12, Аноним (-), 13:20, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Мы словили эту проблему через зависимости nx.

    Добавили оверайд в package.json на гитхаб.

    Держу в курсе.

     
  • 1.15, Аноним (15), 13:56, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > привело к массовыми сбоям в сборочных системах

    тренировка прошла успешно

     
     
  • 2.20, Аноним (19), 14:09, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Апокалипсис продемонстрирован. ))
     
  • 2.21, Аноним (19), 14:18, 27/07/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Может это сопровождающие солидарно демонстрируют свою власть в ответ на скрип с 10$ им за сопровождение в соответствие с инициативой Maintenance Fee? ))
     

  • 1.26, Tron is Whistling (?), 16:09, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    После NPM в новости или как там его ещё этого, у питона, сразу понятно, что произошла какая-то феерическая фигня. Судьба у этих репозитариев такая.
     
  • 1.31, Аноним (31), 17:57, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Durilka? Как это может быть вредоносным пакетом?
     
  • 1.33, Саркофандр (?), 19:35, 27/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Ну уж лучше так, чем если бы там на самом деле вредонос был и его бы не сразу удалили.
     
  • 1.34, Аноним (34), 20:12, 27/07/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –2 +/
     
  • 1.49, Аноним (49), 10:53, 28/07/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Т.е. заблокировать автоматом пакет, у которого один из мантейнеров публикует вредоносные пакеты - это ошибка?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру