The OpenNET Project / Index page

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

В зависимостях к npm-пакету с установщиком PureScript выявлены вредоносные изменения

15.07.2019 13:43

В зависимостях к npm-пакету с установщиком PureScript выявлен вредоносный код, проявляющийся при попытке установки пакета purescript. Вредоносный код встроен через зависимости load-from-cwd-or-npm и rate-map. Примечательно, что сопровождением пакетов с данными зависимостями занимается изначальный автор npm-пакета с инсталлятором PureScript, который до недавних пор занимался сопровождением данного npm-пакета, но около месяца назад пакет перешёл к другим сопровождающим.

Проблему обнаружил один из новых мэйтейнеров пакета, которому права на сопровождение были переданы после многих разногласий и неприятных обсуждений с изначальным автором npm-пакета purescript. Новые мэйнтейнеры отвечают за компилятор PureScript и настаивали, что NPM-пакет с его установщиком должен обслуживаться теми же сопровождающими, а не посторонним лицом. Автор npm-пакета с установщиком PureScript долго не соглашался, но затем уступил и передал доступ к репозиторию. При этом некоторые зависимости остались под его управлением.

На прошлой неделе был выпущен релиз компилятора PureScript 0.13.2 и новыми сопровождающими было подготовлено соответствующее обновление npm-пакета с установщиком, в зависимостях к которому был выявлен вредоносный код. Смещённый с поста сопровождающего автор npm-пакета с установщиком PureScript заявил, что его учётная запись была скомпрометирована неизвестными атакующими. Тем не менее, в текущем виде действия вредоносного кода ограничивались лишь саботажем установки пакета, который стал первой версией от новых сопровождающих. Вредоносные действия сводились к зацикливанию с выводом ошибки при попытке установить пакет командой "npm i -g purescript" без выполнения явной вредоносной активности.

Были выявлены две атаки. Через несколько часов после официального выхода новой версии npm-пакета purescript кем-то была сформирована новая версия зависимости load-from-cwd-or-npm 3.0.2, изменения в которой привели к тому, что вызов loadFromCwdOrNpm() вместо списка необходимых для установки бинарных файлов возвращал поток PassThrough, зеркалирующий входные запросы в качестве выходных значений.

Спустя 4 дня, после того как разработчики разобрались в источнике сбоев и готовились выпустить обновление для исключения load-from-cwd-or-npm из зависимостей, злоумышленниками было выпущено ещё одно обновление load-from-cwd-or-npm 3.0.4, в котором вредоносный код был убран. Тем не менее, почти сразу было выпущено обновление другой зависимости rate-map 1.0.3, в которой было добавлено исправление, блокирующее callback-вызов для загрузки. Т.е. в обоих случаях изменения в новых версиях load-from-cwd-or-npm и rate-map носили характер явной диверсии. Более того, во вредоносном коде имелась проверка, которая активировала сбойные действия только при установке выпуска от новых сопровождающих и никак не проявлялась при установке старых версий.

Разработчики решили проблему выпуском обновления, в котором проблемные зависимости были удалены. Для того чтобы исключить оседание скомпрометированного кода на системах пользователей после попытки установки проблемной версии PureScript рекомендуется удалить содержимое каталогов node_modules и файлов package-lock.json, после чего выставить в качестве нижнего лимита версию purescript 0.13.2.

  1. Главная ссылка к новости (https://harry.garrood.me/blog/...)
  2. OpenNews: Зафиксирована подстановка вредоносного кода в Ruby-пакет Strong_password
  3. OpenNews: В каталоге PyPI выявлены вредоносные пакеты
  4. OpenNews: Компрометация репозиториев дополнений к Kodi привела к распространению вредоносного кода
  5. OpenNews: В популярный NPM-модуль внедрено вредоносное ПО, копирующее параметры аутентификации
  6. OpenNews: Из каталога Docker Hub удалено 17 образов контейнеров с вредоносным кодом
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/51093-npm
Ключевые слова: npm, malware
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (53) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 14:05, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +16 +/
    Ух, прямо Санта-Барбара какая-то.
     
     
  • 2.8, Andrey Mitrofanov_N0 (??), 14:28, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Ух, прямо Санта-Барбара какая-то.

    Вы переоцениваете драматичность происходящего.... бега по граблям.

     
     
  • 3.32, Аноним (32), 20:52, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Улыбнуло.
    Забег по расставленным жюри граблям.
     
  • 2.30, freehck (ok), 18:43, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +10 +/
    > Ух, прямо Санта-Барбара какая-то

    А написано, как будто Арменфильм постарался:

    > Примечательно, что сопровождением пакетов с данными зависимостями занимается изначальный автор npm-пакета с инсталлятором PureScript, который до недавних пор занимался сопровождением данного npm-пакета, но около месяца назад пакет перешёл к другим сопровождающим.

    Пакет с того берега интернета, который хакеру не перелететь, опсу не перебежать. Хоть мейнтейнер не мейнтейнер, так сеть от блекаута на город упала и насмерть убила. А из оптоволокна хороший букет вышел. Тут автор кааааак подпрыгнет!

     

  • 1.3, fi2fi (?), 14:09, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Шо, опять!!!

    когда же появятся обязательные подписи в NPM ???

     
     
  • 2.6, пох. (?), 14:15, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +15 +/
    чем тебе подписи или гитхляп помогут от ситуации "разработчик зависимости стопиццотого уровня вложенности (помнити npm leftpad!) засунул в нее трояна"?

    просто он будет врать не "акаунт на npm скомпроментировали враги", а "враги украли подпись, вместе с симкой, и вот, накоммитили и подписали".

    это ваш жабоскриптик, с зависимостями всего от всего, он так работает, это не лечится.

     
     
  • 3.7, Аноним (7), 14:24, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –5 +/
    >  это не лечится.

    Ты болен, неуважаемый.

     
     
  • 4.14, Wilem (?), 15:16, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Почему? Всё правильно, «лечится» без мягкого знака.
     
  • 4.33, Аноним (32), 20:54, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Таки не лечится. За всю историю человечества. )))
     
  • 3.12, Аноним (12), 14:54, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > это ваш жабоскриптик, с зависимостями всего от всего, он так работает, это не лечится

    Впрочем, как и любой другой язык с внешними пакетами.

     
     
  • 4.16, пох. (?), 15:33, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    как и любой другой язык "быстрого прототипирования", да.

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

     
     
  • 5.19, НяшМяш (ok), 16:33, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Даже фиксация версий зависимостей не спасёт. Нужно зависимости с собой бандлить.
     
     
  • 6.21, Andrey Mitrofanov_N0 (??), 16:42, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Даже фиксация версий зависимостей не спасёт. Нужно зависимости с собой бандлить.

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

     
  • 6.29, пох. (?), 18:11, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    ну вот в рамках одного хаба - остальное решается технико-административными путями.

    а так да, правильно именно бандлить, зафиксируешь версию - а leftpad выпилен разработчиком целиком и со всеми версиями сразу.

     
  • 6.34, Аноним (32), 20:55, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Так Дмитрий-то так и спрашивает: а ты зависимости сам собираешь ли. Да.
     
  • 5.36, kai3341 (ok), 23:10, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    >  как и любой другой язык "быстрого прототипирования", да.
    > фикcация версий зависимостей, разумная осторожность при обновлениях, иногда и замена чужого универсального комбайна своей мелкой открывашкой - это не про них.

    Там есть фиксация зависимостей. И задействовать мелкую открывашку вместо универсального комбайна никто не запрещает.

    Что является наиболее узким местом web-приложения? Неужели код на языке "быстрого прототипирования"?

    Расскажи, кем ты работаешь? Можно одной ссылкой на linkedin. Меня не перестаёт удивлять узость твоего мышления и активность комментирования

     
  • 3.13, kai3341 (ok), 14:56, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Или у тебя много сторонних библиотек и мало кода, или у тебя мало сторонних библиотек и куча говнокода
     
     
  • 4.15, Wilem (?), 15:18, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Или у тебя много сторонних библиотек с говнокодом и мало своего говнокода, или у тебя мало сторонних библиотек с говнокодом и куча своего говнокода

    Поправил.

     
     
  • 5.18, vitalif (ok), 16:17, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Если у тебя много сторонних библиотек - то много чужого говнокода, а если мало - то некоторое количество своего. Но по крайней мере ты точно знаешь, что вставить в него rm -rf / можешь только ты сам
     
     
  • 6.22, Wilem (?), 16:54, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вывод: заменять версии надо запретить, а новые версии билдить из исходников и только после ревью несколькими независимыми разработчиками. Прям на уровне центральной свалки откуда все качают.
     
     
  • 7.25, Wilem (?), 17:15, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Правда, тогда надо ещё придумать защиту от новых аккаунтов которые могут фейково сделать ревью.
     
  • 7.35, Хипстер Ведерный (?), 23:02, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, нужно код новой версии смерживать вручную со старой. Смотреть построчно новую писанину. Очевидно, что мутный код должен быть заметен компетентному глазу.
     
     
  • 8.37, Led (ok), 23:59, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Всем известно где у вэб-макаки находится этот компетентный глаз ... текст свёрнут, показать
     
     
  • 9.39, Хипстер Ведерный (?), 02:08, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Не вижу связи между сферой человеческой деятельности и качеством его работы Люб... текст свёрнут, показать
     
     
  • 10.44, Аноним (44), 06:52, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Вот же связь ... текст свёрнут, показать
     
     
  • 11.48, Хипстер Ведерный (?), 10:26, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Они как раз просто считают деньги, ничего личного Должны происходить подобные и... текст свёрнут, показать
     
  • 4.31, Аноним (31), 19:14, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > куча говнокода

    , которую можно подрихтовать до библиотеки и выложить в npm :^)

     
     
  • 5.42, KonstantinB (ok), 03:59, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    До библиотеки? Одной?

    Не... Надо кучу разложить по маленьким баночкам и коробкам от спичек. Так, чтобы не больше лефтпада. Будет сразу пара тыщ библиотек!

     
  • 2.41, KonstantinB (ok), 03:56, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И чем они помогут, когда "злоумышленник" - это сам мейнтенер? Меньше поверят, что "аккаунт воз хакд"? :-)
     

  • 1.4, Аноним (4), 14:10, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    когда же появятся обязательные подписи в NPM ???

    а зачем, разве кому то нужен порядок в этом болоте ?

     
  • 1.5, Аноним (5), 14:10, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Да запретить аплоадить пакеты в npm - и всё. Разработчик должен сам запушить в гитхаб изменения, затегать релиз, а npm бы автоматом запаковал. Ну или предоставил бы кнопку "Чекнуть мой гитхаб на предмет новых релизов".

    То же касается остальных пакетных репозиториев по ссылкам к новости.

     
     
  • 2.9, Andrey Mitrofanov_N0 (??), 14:31, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >запретить аплоадить пакеты
    >должен сам
    > запушить в гитхаб
    >npm бы автоматом запаковал.
    >гитхаб на предмет новых
    > релизов".

    Сим запрещаю тебе камментиь на опенете про пакеты и йих манагемент, и гидхаю заодно.

    Выполняй?

     

  • 1.10, AnonPlus (?), 14:41, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    TL;DR

    У автора пакета отжали пакет и он стал мелко пакостить.

     
     
  • 2.11, Дворник (??), 14:51, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > У автора пакета отжали пакет и он стал мелко пакостить.

    Или враг автора пакета вовремя воспользовался случаем.
    Так или иначе, автор дескредитирован донельзя.

      

     
     
  • 3.38, Led (ok), 00:02, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +9 +/
    > автор дескредитирован донельзя.

    Как можно дИскредИтировать вэб-макаку?

     
     
  • 4.52, CryNet (?), 09:35, 17/07/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А ты какая *-макака будешь?
     
  • 2.17, Аноним (44), 15:52, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Какой смысл автору заниматься подобным?
     
     
  • 3.28, Аноним (28), 18:09, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Неразвитые социальные навыки и общая неадекватность.
     
     
  • 4.45, анон (?), 08:01, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А как же веселье?
    А как же осуществить акт дефекации на стол?
    Я вот в больничках, где разгреб все говно и поднял k8s, на прощанье все положил и сломал.
     
     
  • 5.47, Аноним (44), 09:55, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это уже граничит с криминалом.

    Веселье - это когда т.н. разработчики Росы сначала принимают мои решения их недоделок в свой т.н. продукт, а потом удаляют исходники в моих репозиториях, потому что "мы не знаем что ждать от этого неадеквата". Я вот тоже не знаю, что же я мог такое учудить в персональном git, кроме как пробить кое-кому шапочку из фольги. ;-)

     
     
  • 6.50, админ (?), 13:56, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Это граничит с идиотизмом, ибо нефиг выкидывать админа, если все работает.
     
     
  • 7.51, Аноним (44), 14:51, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Это граничит с идиотизмом, ибо нефиг выкидывать админа, если все работает.

    Это банальная жадность, которая мешает принимать верные решения. Дайте-ка угадаю. Взяли на место админа племянничка-студента, а вторую пол-ставки оприходовали. Таких великих комбинаторов достаточно лишь подтолкнуть в нужном направлении, и новоиспечённый гений сам всё испортит.

     

  • 1.20, Аноним (20), 16:39, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А что это вообще за пюре-скрипт, зачем он?
     
     
  • 2.23, Аноним (23), 16:55, 15/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Горе-скрипт
     
  • 2.40, KonstantinB (ok), 03:52, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Это такой язык, похожий на Haskell, но не Haskell, компилирующийся в JavaScript. Кроме двух с половиной энтузиастов, не нужен никому.
     
     
  • 3.55, антон (??), 04:05, 02/01/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Я один из таких энтузиастов, не на жопоскрипте же в конце-концов фронтенд хаскелисту писать! Не солидно, стыдно и унизительно.

    А PureScript очень даже хорош, там и тайплевел и всякое разное есть, и кое-что даже лучше и изящнее, чем в Haskell сделано (например partial constraints для рекордов с одинаковыми именами полей и типами), впрочем не удивительно, это молодой язык, который писался на самом Haskell с оглядкой на его недостатки, который имеет на сегодняшний день почти 30-и летнюю историю развития. Правда одно из главных отличий PureScript-а, что он НЕ ленивый, и это иногда боль в жопе, когда тебе например приходится избегать "when" в монадках в пользу "if-then-else", как и думать, объявлять ли переменную через let/where лишний раз, т.к. все частичные применения функций будут вычислены, независимо от ого, использовано имя или нет. Haskell своей ленивостью делает программистов такими же ленивыми, "за меня конпелятор разберётся".

    Остальные полтора энтузиаста, дайте знак, что вы живы, ну или остальные два (если меня считать за половинку).

     

  • 1.24, Аноним (24), 16:55, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Что же за неприятные обсуждения такие, с которыми передавали власть?
     
  • 1.26, Ilya Indigo (ok), 17:43, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Жил_был_пёс.jpg
     
  • 1.27, Аноним (27), 17:47, 15/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    npm - это троян
     
     
  • 2.46, Andrey Mitrofanov_N0 (??), 09:26, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > npm - это троян

    и броузер - троян,
    и интнернет - троян,
    и общество - троян,
    и его экономмодель - троян,
    и ....

    покайтеся, грешниуи, конь бледный на колёсиках -- у ворот.  <><><<>

     
     
  • 3.53, Andrey Mitrofanov_N0 (??), 10:11, 17/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >> npm - это троян
    > и броузер - троян,
    > и интнернет - троян,
    > и общество - троян,
    > и его экономмодель - троян,
    > и ....

    http://techrights.org/wp-content/uploads/2019/05/microsoft-borg.jpg
    http://techrights.org/2019/07/14/sociopathy-incompetence-and-intolerance/

    [I] “The choice for mankind lies between freedom and happiness and for the great bulk of mankind, happiness is better.” [/I]
    ― George Orwell, 1984

     

  • 1.43, Пейтонист (?), 05:47, 16/07/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем сразу обновляться до последней версии?
    Странные проблемы у людей, только выложили корявый пакет, сразу напарываются, будто сидят и ждут когда выйдет обновление.
    Работает на старой, и пусть работает.

    Хотя конечно может так и есть

     
     
  • 2.49, Аноним (49), 12:50, 16/07/2019 [^] [^^] [^^^] [ответить]  
  • +/
    с этими обновлениями у них как шило в опе.
    мне тут давеча надо было на первую малинку установить пакет. пишу апт-гет инсталл, а оно мне 404. лезу на archive.raspbian.org а там от папки wheezy и след простыл. и нафига надо было называть сайт archive ? :D   из-за хипстеров, мне теперь на эту рухлядь, которая и так по скорости как пень1 нужно что-то обновлять... железка только для spi используется, там новое ничего не нужно, вообще.
     

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



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

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