Администраторы репозитория NPM уведомили (https://blog.npmjs.org/post/175824896885/incident-report-npm...) пользователей о компрометации (https://eslint.org/blog/2018/07/postmortem-for-malicious-pac...) пакетов eslint-scope (https://www.npmjs.com/package/eslint-scope) и eslint-config-eslint (https://www.npmjs.com/package/eslint-config-eslint), в которых поставлялся популярный анализатор JavaScript-кода, насчитывающий более 2 млн загрузок в неделю.В результате получения контроля за учётными данными мэйнтейнера eslint-scope злоумышленникам удалось (https://github.com/eslint/eslint-scope/issues/39) опубликовать обновление, содержащее троянский код. В процессе установки пакета с сайта pastebin.com загружался и запускался (https://gist.github.com/hzoo/51cb84afdc50b14bffa6c6dc49826b3e) скрипт (https://github.com/eslint/eslint-scope/issues/39#issuecommen...), который отправлял на внешний сервер содержимое файла ~/.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 разработчиков. К счастью атака была оперативно пресечена (https://status.npmjs.org/incidents/dn7c1fgrr7ng) и администрация NPM заблокировала все токены аутентификации, выданные до 17:30 (MSK) 12 июля. Пользователям NPM необходимо обновить свои токены повторно выполнив процедуру аутентификации на сайте npmjs.com. Для усиления защиты своих учётных записей разработчикам модулей рекомендовано включить двухфакторную аутентификацию (https://blog.npmjs.org/post/166039777883/protect-your-npm-ac...). В промежуток времени с момента публикации вредоносного обновления до начала блокировки токенов достоверно подтверждённых попыток использования перехваченных токенов не зафиксировано.
Предполагается, что компрометация пакета eslint-scope, как правило используемого для отладки других NPM-пакетов разработчиками, была первым этапом внедрения червя (https://jamie.build/how-to-build-an-npm-worm), использующего захваченные токены для внедрения вредоносного кода в новые модули. С учётом разветвлённой системы зависимостей в случае успеха атака могла иметь катастрофические последствия.
URL: https://blog.npmjs.org/post/175824896885/incident-report-npm...
Новость: https://www.opennet.dev/opennews/art.shtml?num=48960
у меня дежавю
Тоже репозиторий Gentoo вспомнился?
>рекомендовано включить двухфакторную аутентификацию.да сделайте ее обязательной уже!
...и с привязкой к паспорту, личной подписью майора, и трибуналом по результатам действия пользователей после аутентификакации))
Если это поможет остановить вредителей - то я только ЗА. Задолбали уже все эти проблемы. Вот бы уже прижали всё это дело.
> вредителейтут главное понять, с какой они стороны
PS: 2fa есть не только через телефон, но и c помощью отдельностоящего приложения, генерящего последовательность псевдослучайных чисел. Поэтому, необязательно связываться ни с одними вредителями.
Двухфакторка бывает и в виде кода, генерируемого апликухой на мобильнике. FreeOTP подойдёт.
U2F токены и WebAuthn забыли добавить.
Да нахрена привязки к чему либо? Зачем по вашему Chrome и Firefox реализовывали WebAuthn? как раз таки (в том числе) для двухфакторной авторизации аппаратными токенами (FIDO U2F, FIDO2), которых на том же Амазоне - навалом.Вот сделали бы эти NPM-щики усилие и внедрили бы. Нет, вместо этого каждый месяц скандалы про очередной взлом учетки и подмену кода.
> которых на том же Амазоне - навалом.ню-ню. Ты себе примерно представляешь последствия поимки тебя на почте с таким товаром?
(это если еще все пройдет гладко на американской таможне - потому что это вот тот самый экспорт сильной криптографии, который по сей день ограничен)
А ничего что российский Аладдин выпускаеть Jacarta U2f? Боитесь покупать с Амазона - ну пожалуйста, покупайте здесь.
Тем не менее, "поимка на почте" - очень маловероятна. Причина - визуально устройство не отличается от USB флешки.Что же до госпаранойи...тут даже и не знаю что сказать. "Мы рождены чтоб Кафку сделать былью".
>и трибуналом по результатам действия пользователей после аутентификакациизачем результаты? Просто расстреливать всех погромистов на ноде как врагов народа
А я вам всегда говорил вспомнити leftpad , но никто неприслушивался ко мне
Верно, нужно чаще прислушиваться к анонимам
...и к пони по имени Пиони))
leafpad лучше))
Что бы мы без тебя делали, друг
говорил - значит и сделал гадость - пойдешь в подозреваемые
> При выполнении операции установки пакета с сайта pastebin.com загружался и запускался скрипт, который отправлял на внешний сервер содержимое файла ~/.npmrcВот это и есть корень зла. С какого перепугу скрипт, который фиг знает какой маньяк писал, имеет доступ в .npmrc? Chrootить такое надобно, ограничивая той папкой, в которую оно непосредственно гадит!
>> При выполнении операции установки пакета с сайта pastebin.com загружался и запускался скрипт, который отправлял на внешний сервер содержимое файла ~/.npmrc
> Вот это и есть корень зла. С какого перепугу скрипт, который фиг
> знает какой маньяк писал, имеет доступ в .npmrc? Chrootить такое надобно,
> ограничивая той папкой, в которую оно непосредственно гадит!опа, тут есть адекватные люди, а не только "свидетели репозиториев и мантейнеров"
в андройде уже по дефолту всё подряд автоматом пихается в песочницу (дырки в песочнице - другой вопрос, так то однажды и ядро через пинг хакнут), стоит поучится на опыте тех, кто вынужден работать с иди^W пользователями
Ага, а на офтопике как засендбоксить? NPM же должен быть кроссплатформенный.
не чрутить. Нужна полноценная система изоляции с разрешениями для десктопов. В МС это понимают и делают.
> По счастливому стечению обстоятельствА сколько обычных стечений обстоятельств уже украли ваши токены/пароли/сраные аккаунты сраного вконтакте?
NPM без факапов 0 дней
> NPM без факапов 0 днейэто не факап NPM
> В результате получения контроля за учётными данными мэйнтейнера eslint-scope
Не факт. Политика безопасности должна соответствовать важности сервиса. Если компрометация через юзеров происходит часто, значит в консерватории что-то не так.
угу - например, этих юзеров больше одного. Ну надо же!
Никогда такого не было, и вот опять!
Я давно говорил что экосистема, завязанная на никем не проверяемых помойкорепозиториях и тулзах которые из них ставят любое говно подходящее по версии (pip, bundler, go, cargo, ...) не проверяя подписи и чексуммы - это рассадник малвари. А плюсовики ещё плачутся что у них этого гoвна нет.
А кто будет проверять каждый leftpad?Решение давно известно - поднять свой npm-репозиторий, где хранить только проверенный код. Но это ж делать надо!
Ну я вообще подразумевал системные репозитории в которых есть дополнительный слой из мантейнеров, которые в лучшем случае всё досконально протестируют, в худшем хотя бы не пропустят откровенный шлак в виде какого-нибудь майнера. Кроме того, там обеспечивается предсказуемость и повторяемость сборок и проверяется целостность пакетов. Когда я делаю pkg install, мне не может прилететь свежачок с поломанной совместимостью выпущенный секунду назад, и мне не может по дороге провайдер в него подложить трояна. Мне прилетит либо то что проверил мантейнер и я лично проверил на тестовой машине, либо ничего. Питон, perl, php так замечательно живут испокон веков (басенки о несовместимостях и необходимости в pip и virtualenv оставлю дурачкам). А сейчас я вижу что и новоязы, несмотря на чудесность и полную самодостаточность их хайповых пакетных менеджеров появляются в виде системных пакетов:https://repology.org/metapackages/?search=rust%3A
https://repology.org/metapackages/?search=go%3AУ JS-макак свой мир, конечно - в нормальной экосистеме модуль из одной строки никогда бы не стали использовать, да он бы и не появился. Но даже их это касается:
https://repology.org/metapackages/?search=node%3A
> Решение давно известно - поднять свой npm-репозиторий
И когда в каком-то модуле найдут проблемы, у вас он никогда не обновится, знаем-знаем.
Можно более подробно почему не нужен pip и virtualnv? Не совсем понял, что имели ввиду.
Если гвидобейсикокодеры ненужны, то зачем тогда нужны "pip и virtualnv"?
Ты путаешь системный пакетный менагер и пакетный менагер для девелопера. Это разные вещи, которые предназначены для решения разных задач. Мне как девелоперу нафиг не сдались системные библиотеки из debian'а, они протухли уже сейчас, а когда я допишу свой код, они даже пахнуть уже не будут, окаменеют. В то же время мне, как админу локалхоста, нафиг не сдался девелоперский пакетный менагер в качестве системного по причинам, которые собственно ты и озвучиваешь. И мне необходимо разделять их, потому что как девелоперу мне может требоваться несколько разных версий одной и той же библиотеки, иногда просто чтобы посмотреть скомпилируется ли. Иногда я гоняю тесты для нескольких версий депендансов. Вручную это делать убьёшься. Системные пакетные менагеры тут ничем помочь не могут, скорее под ногами путаются и мешают: вручную будет проще и быстрее, особенно если подпереть костыликами на bash. Собственно все эти pip/cargo и иже с ними именно эти задачи и решают: быстро накатить нужную версию, хочешь совсем-совсем новую, хочешь древнючую и устаревшую, на которую заточен тот код, который я где-то наковырял, и который не получал обновлений последние десять лет, чтобы я сначала мог бы его запустить, посмотреть как он работает, решить нужен ли он мне или нет, и только после этого заниматься (или не заниматься) апдейтом кода под актуальные версии библиотек.Системный пакетный менагер и девелоперский -- это разные вещи. Веб-девелоперы же, так же как и ты, путают одно с другим, не отделяя разработку софта от деплоймента. И поэтому они получают то, что получают. У них и ещё более интересные баги бывают, типа нечаянно сделал drop table в продакшне, хотя всего лишь хотел пересоздать тестовую базу данных. Но на то они и веб-девелоперы.
> Ты путаешь системный пакетный менагер и пакетный менагер для девелопера.познакомьтесь с nix
PHP без composer уже не живет. Ну, то есть можно, но бессмысленно. Но это так, между прочим.В npm, помимо большего на порядки количества модулей (и микромодулей), есть еще одна специфика - каждый пакет тянет свои зависимости рекурсивно, независимо от остальных. И в одном проекте запросто может быть 10 разных невосместимых версий какого-нибудь leftpad-а. (Оставим в стороне дискуссии о разумности такого подхода). Мейнтенить такое принципиально невозможно - никаких разумных ресурсов не хватит.
Но, поскольку проблема актуальна, там придумали своего рода "постмодерацию" - npm audit.
В Go не все так плохо. Так каждый импорт пакета - это путь к Git-репозиторию. Централизованной репы нет, есть только стандартная либа, но она огорожена от васянов. А с левого репозитория что угодно может быть, такова жизнь ;)
Завязка на HEAD - это как раз одна из основных проблем управления зависимостями в Go.
(Я знаю, что уже есть несколько решений).
> 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.Матчасть, не?
Говорил? Значит будешь подозреваемым. Накаркал
Эту проблему уже сто раз поднимали. Но никто её фиксить не будет в официальных репах.CTAN вообще ужасен, там ЧУЖОЙ пакет может подменить КТО УГОДНО. Мне очень страшно, когда miktex требует установки пакета. Потому что установка пакета там - это огромный бэкдор. Как шелб по неаутентифицированному телнету. Проблема поднята давно, но навоз и ныне там.
Та же хрень с pypi.
Аналогично. Всякие композеры и прочие идут в задницу - только ручной накат, с внимательным чтением чейнджлогов перед апдейтами. Да, не девопсненько, зато страхует от ряда весёлых приключений.
Как бы еще погромистам это объяснить :(
сначала заказчикам, программисты сами все поймут
> А плюсовики ещё плачутся что у них этого гoвна нет.По моим наблюдениям, по поводу отсутствия в плюсках своего велопакетного менеджера плачутся-злорадствуют как раз те, кто на плюсах не пишет. Мол, у всех модно-молодёжных языков есть, а у C++ нет и поэтому плюсы -- окаменелое легаси, на котором ни в коем случае нельзя делать ничего нового.
А говорили такого не может быть, никогда-никогда честно
Лал. Опять любители автоматом тянуть всякий хлам страдают.
Эххх, а ведь эта была заявка на настоящий БЫЛИННЫЙ отказ!!! Надо было админам еще денек потупить и потом оставшийся месяц (если не год) наслаждаться пылающими седалищами веб мак^W разработчиков!Ну, ничего.
К сожалению, вредоносное ПО забыли нормально протестировать перед релизом.
Баги спасли нпм. Как иронична бывает судьба =)
Мне начинает казаться, что такие новости постят просто чтобы посмеяться
а что, разве не так? O_O
Йес! Я рад :) Нет вебне, жопоскриптерам - по заслугам! Да вообще 99% js так или иначе "вредоносен" для пользователя.
А когда тоже самое случилось с Gentoo на днях, ты был рад? Осталось понять, причем тут js...