The OpenNET Project / Index page

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

В популярный NPM-модуль внедрено вредоносное ПО, копирующее параметры аутентификации

13.07.2018 10:14

Администраторы репозитория NPM уведомили пользователей о компрометации пакетов eslint-scope и eslint-config-eslint, в которых поставлялся популярный анализатор JavaScript-кода, насчитывающий более 2 млн загрузок в неделю и 59 млн суммарных загрузок. В результате получения контроля за учётными данными мэйнтейнера eslint-scope злоумышленникам удалось опубликовать обновление, содержащее троянский код.

При выполнении операции установки пакета, с сайта pastebin.com загружался и запускался скрипт, который отправлял на внешний сервер содержимое файла ~/.npmrc, включающего токен для аутентификации в NPM. Данные отправлялись на серверы учёта статистики посещений "sstatic1.histats.com" и "c.statcounter.com" в составе параметра, указанного в HTTP-заголовке "Referer" (злоумышленники могли просмотреть захваченные токены через web-интерфейсы счётчиков посещений histats.com и statcounter.com).

Взлом учётной записи разработчика был произведён из-за использования одного и того же пароля на разных сайтах, на одном из которых произошла утечка базы пользователей. Сопоставив email разработчика злоумышленники смогли воспользоваться паролем для получения доступа к NPM. Троянская вставка присутствовала в версиях eslint-scope 3.7.2 и eslint-config-eslint 5.0.2.

По предварительным сведениям с момента публикации до блокировки вредоносного обновления (c 12:49 до 17:37 MSK 12 июля) злоумышленникам удалось получить токены для доступа к учётным записям примерно 4500 разработчиков. К счастью атака была оперативно пресечена и администрация NPM заблокировала все токены аутентификации, выданные до 17:30 (MSK) 12 июля. Пользователям NPM необходимо обновить свои токены повторно выполнив процедуру аутентификации на сайте npmjs.com. Для усиления защиты своих учётных записей разработчикам модулей рекомендовано включить двухфакторную аутентификацию. В промежуток времени с момента публикации вредоносного обновления до начала блокировки токенов достоверно подтверждённых попыток использования перехваченных токенов не зафиксировано.

Предполагается, что компрометация пакета eslint-scope, как правило используемого для отладки других NPM-пакетов разработчиками, была первым этапом внедрения червя, который мог использовать захваченные токены для внедрения вредоносного кода в новые модули. С учётом разветвлённой системы зависимостей в случае успеха атака могла иметь катастрофические последствия. Например, среди пользователей eslint-scope разработчики таких популярных проектов, как Yarn (48% всех загрузок в NPM), Babel (150 млн загрузок), jQuery (65 млн загрузок), CoffeeScript (50 млн загрузок). Данные пакеты используются как зависимости в тысячах других пакетов и проектов.

По счастливому стечению обстоятельств во вредоносном коде была допущена ошибка, которая приводила к сбою установки, если при определённых условиях поток для получения ответа на запрос к pastebin.com закрывался до окончания выполнения вызова eval(). Данная особенность сразу привлекла внимание пользователей пакета, которые начали разбирать код и менее чем через час после публикации вредоносного обновления отправили уведомление разработчикам.

  1. Главная ссылка к новости (https://blog.npmjs.org/post/17...)
  2. OpenNews: Применение тайпсквоттинга для распространения вредоносных модулей NPM, PyPI и Gems
  3. OpenNews: Выявлена попытка включения бэкдора в популярный NPM-пакет mailparser
  4. OpenNews: Незащищённость NPM к атакам по внедрению вредоносных модулей-червей
  5. OpenNews: Сбой антиспам-системы привёл к коллапсу в репозитории NPM
  6. OpenNews: Более половины npm-пакетов могли быть скомпрометированы из-за ненадёжных паролей доступа
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: npm
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (54) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (-), 10:46, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +23 +/
    у меня дежавю
     
     
  • 2.26, Аноним (26), 17:52, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Тоже репозиторий Gentoo вспомнился?
     

  • 1.2, MPEG LA (ok), 10:49, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >рекомендовано включить двухфакторную аутентификацию.

    да сделайте ее обязательной уже!

     
     
  • 2.15, Аноняшка (?), 12:04, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +21 +/
    ...и с привязкой к паспорту, личной подписью майора, и трибуналом по результатам действия пользователей после аутентификакации))
     
     
  • 3.22, Константавр (ok), 13:50, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Если это поможет остановить вредителей - то я только ЗА. Задолбали уже все эти проблемы. Вот бы уже прижали всё это дело.
     
     
  • 4.23, Аноним (-), 13:55, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > вредителей

    тут главное понять, с какой они стороны

    PS: 2fa есть не только через телефон, но и c помощью отдельностоящего приложения, генерящего последовательность псевдослучайных чисел. Поэтому, необязательно связываться ни с одними вредителями.

     
  • 3.25, Аноним (25), 15:01, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Двухфакторка бывает и в виде кода, генерируемого апликухой на мобильнике. FreeOTP подойдёт.
     
     
  • 4.35, Kuromi (ok), 01:36, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    U2F токены и WebAuthn забыли добавить.
     
  • 3.34, Kuromi (ok), 01:36, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Да нахрена привязки к чему либо? Зачем по вашему Chrome и Firefox реализовывали WebAuthn? как раз таки (в том числе) для двухфакторной авторизации аппаратными токенами (FIDO U2F, FIDO2), которых на том же Амазоне - навалом.

    Вот сделали бы эти NPM-щики усилие и внедрили бы. Нет, вместо этого каждый месяц скандалы про очередной взлом учетки и подмену кода.

     
     
  • 4.54, тов. майор (?), 07:05, 16/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > которых на том же Амазоне - навалом.

    ню-ню. Ты себе примерно представляешь последствия поимки тебя на почте с таким товаром?

    (это если еще все пройдет гладко на американской таможне - потому что это вот тот самый экспорт сильной криптографии, который по сей день ограничен)

     
     
  • 5.63, Kuromi (ok), 01:23, 12/08/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А ничего что российский Аладдин выпускаеть Jacarta U2f? Боитесь покупать с Амазона - ну пожалуйста, покупайте здесь.
     
  • 5.64, Kuromi (ok), 01:31, 12/08/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тем не менее, "поимка на почте" - очень маловероятна. Причина - визуально устройство не отличается от USB флешки.

    Что же до госпаранойи...тут даже и не знаю что сказать. "Мы рождены чтоб Кафку сделать былью".

     
  • 3.62, Сталин (?), 13:40, 05/08/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >и трибуналом по результатам действия пользователей после аутентификакации

    зачем результаты? Просто расстреливать всех погромистов на ноде как врагов народа

     

  • 1.4, Аноним (4), 10:57, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    А я вам всегда говорил вспомнити leftpad , но никто неприслушивался ко мне
     
     
  • 2.12, Пиони (?), 12:00, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Верно, нужно чаще прислушиваться к анонимам
     
     
  • 3.14, Аноняшка (?), 12:03, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    ...и к пони по имени Пиони))
     
  • 2.16, Аноняшка (?), 12:05, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    leafpad лучше))
     
  • 2.19, mimocrocodile (?), 13:02, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Что бы мы без тебя делали, друг
     
  • 2.39, Аноним (39), 03:45, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    говорил - значит и сделал гадость - пойдешь в подозреваемые
     

  • 1.11, Аноним (11), 11:21, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    > При выполнении операции установки пакета с сайта pastebin.com загружался и запускался скрипт, который отправлял на внешний сервер содержимое файла ~/.npmrc

    Вот это и есть корень зла. С какого перепугу скрипт, который фиг знает какой маньяк писал, имеет доступ в .npmrc? Chrootить такое надобно, ограничивая той папкой, в которую оно непосредственно гадит!

     
     
  • 2.18, J.L. (?), 12:41, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> При выполнении операции установки пакета с сайта pastebin.com загружался и запускался скрипт, который отправлял на внешний сервер содержимое файла ~/.npmrc
    > Вот это и есть корень зла. С какого перепугу скрипт, который фиг
    > знает какой маньяк писал, имеет доступ в .npmrc? Chrootить такое надобно,
    > ограничивая той папкой, в которую оно непосредственно гадит!

    опа, тут есть адекватные люди, а не только "свидетели репозиториев и мантейнеров"
    в андройде уже по дефолту всё подряд автоматом пихается в песочницу (дырки в песочнице - другой вопрос, так то однажды и ядро через пинг хакнут), стоит поучится на опыте тех, кто вынужден работать с иди^W пользователями

     
  • 2.33, Аноним (11), 01:21, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ага, а на офтопике как засендбоксить? NPM же должен быть кроссплатформенный.
     
  • 2.40, Аноним (40), 08:05, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    не чрутить. Нужна полноценная система изоляции с разрешениями для десктопов. В МС это понимают и делают.
     

  • 1.13, Аноняшка (?), 12:01, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > По счастливому стечению обстоятельств

    А сколько обычных стечений обстоятельств уже украли ваши токены/пароли/сраные аккаунты сраного вконтакте?

     
  • 1.17, index0h (ok), 12:16, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    NPM без факапов 0 дней
     
     
  • 2.21, J.L. (?), 13:44, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > NPM без факапов 0 дней

    это не факап NPM
    > В результате получения контроля за учётными данными мэйнтейнера  eslint-scope

     
     
  • 3.24, Аноним (-), 13:57, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не факт. Политика безопасности должна соответствовать важности сервиса. Если компрометация через юзеров происходит часто, значит в консерватории что-то не так.
     
     
  • 4.55, пох (?), 07:06, 16/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    угу - например, этих юзеров больше одного. Ну надо же!

     

  • 1.20, pull request (?), 13:03, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Никогда такого не было, и вот опять!
     
  • 1.27, Аноним (27), 18:00, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Я давно говорил что экосистема, завязанная на никем не проверяемых помойкорепозиториях и тулзах которые из них ставят любое говно подходящее по версии (pip, bundler, go, cargo, ...) не проверяя подписи и чексуммы - это рассадник малвари. А плюсовики ещё плачутся что у них этого гoвна нет.
     
     
  • 2.28, KonstantinB (ok), 18:14, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А кто будет проверять каждый leftpad?

    Решение давно известно - поднять свой npm-репозиторий, где хранить только проверенный код. Но это ж делать надо!

     
     
  • 3.31, Аноним (27), 21:36, 13/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну я вообще подразумевал системные репозитории в которых есть дополнительный сло... текст свёрнут, показать
     
     
  • 4.45, Сергей (??), 13:18, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Можно более подробно почему не нужен pip и virtualnv? Не совсем понял, что имели ввиду.
     
     
  • 5.47, Led (ok), 04:28, 15/07/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Если гвидобейсикокодеры ненужны, то зачем тогда нужны "pip и virtualnv"?
     
  • 4.48, Ordu (ok), 05:46, 15/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ты путаешь системный пакетный менагер и пакетный менагер для девелопера. Это разные вещи, которые предназначены для решения разных задач. Мне как девелоперу нафиг не сдались системные библиотеки из debian'а, они протухли уже сейчас, а когда я допишу свой код, они даже пахнуть уже не будут, окаменеют. В то же время мне, как админу локалхоста, нафиг не сдался девелоперский пакетный менагер в качестве системного по причинам, которые собственно ты и озвучиваешь. И мне необходимо разделять их, потому что как девелоперу мне может требоваться несколько разных версий одной и той же библиотеки, иногда просто чтобы посмотреть скомпилируется ли. Иногда я гоняю тесты для нескольких версий депендансов. Вручную это делать убьёшься. Системные пакетные менагеры тут ничем помочь не могут, скорее под ногами путаются и мешают: вручную будет проще и быстрее, особенно если подпереть костыликами на bash. Собственно все эти pip/cargo и иже с ними именно эти задачи и решают: быстро накатить нужную версию, хочешь совсем-совсем новую, хочешь древнючую и устаревшую, на которую заточен тот код, который я где-то наковырял, и который не получал обновлений последние десять лет, чтобы я сначала мог бы его запустить, посмотреть как он работает, решить нужен ли он мне или нет, и только после этого заниматься (или не заниматься) апдейтом кода под актуальные версии библиотек.

    Системный пакетный менагер и девелоперский -- это разные вещи. Веб-девелоперы же, так же как и ты, путают одно с другим, не отделяя разработку софта от деплоймента. И поэтому они получают то, что получают. У них и ещё более интересные баги бывают, типа нечаянно сделал drop table в продакшне, хотя всего лишь хотел пересоздать тестовую базу данных. Но на то они и веб-девелоперы.

     
     
  • 5.60, J.L. (?), 13:19, 20/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ты путаешь системный пакетный менагер и пакетный менагер для девелопера.

    познакомьтесь с nix

     
  • 4.56, KonstantinB (ok), 10:48, 16/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    PHP без composer уже не живет. Ну, то есть можно, но бессмысленно. Но это так, между прочим.

    В npm, помимо большего на порядки количества модулей (и микромодулей), есть еще одна специфика - каждый пакет тянет свои зависимости рекурсивно, независимо от остальных. И в одном проекте запросто может быть 10 разных невосместимых версий какого-нибудь leftpad-а. (Оставим в стороне дискуссии о разумности такого подхода). Мейнтенить такое принципиально невозможно - никаких разумных ресурсов не хватит.

    Но, поскольку проблема актуальна, там придумали своего рода "постмодерацию" - npm audit.

     
  • 2.36, Аноним (11), 01:44, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В Go не все так плохо. Так каждый импорт пакета - это путь к Git-репозиторию. Централизованной репы нет, есть только стандартная либа, но она огорожена от васянов. А с левого репозитория что угодно может быть, такова жизнь ;)
     
     
  • 3.57, KonstantinB (ok), 10:52, 16/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Завязка на HEAD - это как раз одна из основных проблем управления зависимостями в Go.
    (Я знаю, что уже есть несколько решений).
     
     
  • 4.59, smartypants (?), 01:46, 17/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > When checking out or updating a package, get looks for a branch or tag that matches the locally installed version of Go. The most important rule is that if the local installation is running version "go1", get searches for a branch or tag named "go1". If no such version exists it retrieves the default branch of the package.

    Матчасть, не?

     
  • 2.38, Аноним (39), 03:45, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Говорил? Значит будешь подозреваемым. Накаркал
     
  • 2.42, Аноним (40), 08:11, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Эту проблему уже сто раз поднимали. Но никто её фиксить не будет в официальных репах.

    CTAN вообще ужасен, там ЧУЖОЙ пакет может подменить КТО УГОДНО. Мне очень страшно, когда miktex требует установки пакета. Потому что установка пакета там - это огромный бэкдор. Как шелб по неаутентифицированному телнету. Проблема поднята давно, но навоз и ныне там.

    Та же хрень с pypi.

     
  • 2.49, Аноним (49), 11:07, 15/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Аналогично. Всякие композеры и прочие идут в задницу - только ручной накат, с внимательным чтением чейнджлогов перед апдейтами. Да, не девопсненько, зато страхует от ряда весёлых приключений.
     
     
  • 3.51, Аноним (51), 12:33, 15/07/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как бы еще погромистам это объяснить :(
     
     
  • 4.52, gdsagdfhdfg (?), 19:39, 15/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    сначала заказчикам, программисты сами все поймут
     
  • 2.53, Аноним (53), 21:50, 15/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > А плюсовики ещё плачутся что у них этого гoвна нет.

    По моим наблюдениям, по поводу отсутствия в плюсках своего велопакетного менеджера плачутся-злорадствуют как раз те, кто на плюсах не пишет. Мол, у всех модно-молодёжных языков есть, а у C++ нет и поэтому плюсы -- окаменелое легаси, на котором ни в коем случае нельзя делать ничего нового.

     

  • 1.30, Аноним (30), 18:38, 13/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А говорили такого не может быть, никогда-никогда честно
     
  • 1.32, Аноним (49), 00:18, 14/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Лал. Опять любители автоматом тянуть всякий хлам страдают.
     
  • 1.37, your mom (?), 03:00, 14/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Эххх, а ведь эта была заявка на настоящий БЫЛИННЫЙ отказ!!! Надо было админам еще денек потупить и потом оставшийся месяц (если не год) наслаждаться пылающими седалищами веб мак^W разработчиков!

    Ну, ничего.

     
     
  • 2.41, Аноним (41), 08:10, 14/07/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    К сожалению, вредоносное ПО забыли нормально протестировать перед релизом.
    Баги спасли нпм. Как иронична бывает судьба =)
     

  • 1.44, Аноним (44), 11:30, 14/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мне начинает казаться, что такие новости постят просто чтобы посмеяться
     
     
  • 2.58, arisu (ok), 20:43, 16/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    а что, разве не так? O_O
     

  • 1.46, user90 (?), 15:48, 14/07/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Йес! Я рад :) Нет вебне, жопоскриптерам - по заслугам! Да вообще 99% js так или иначе "вредоносен" для пользователя.
     
     
  • 2.50, Аноним (26), 11:30, 15/07/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А когда тоже самое случилось с Gentoo на днях, ты был рад? Осталось понять, причем тут js...
     

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



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

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