LINUX.ORG.RU
ФорумTalks

Троян в npm пакете rand-user-agent

 ,


1

3

rand-user-agent позволяет генерить рандомные строки user-agent, что удобно при тестировании и проч. мероприятий по исследованию безопасности.

Пакет стал deprеcated, но всё равно популярен (45К скачиваний в неделю).

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

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

Следите за своими протухшими токенами, господа.

★★★★★

Что, npm-обезьянки снова получили решето и вирусню на узлы? Ой, как неожиданно.

PPP328 ★★★★★
()
Ответ на: комментарий от seiken

Больше вероятность на js такую фигню поймать. Там любят модули на всякую ерунду создавать и массово юзать. Вспоминая left-pad. С тех пор ничего не изменилось. Сейчас ещё нейросети им генерят всякий говнокод.

th3m3 ★★★★★
()
Ответ на: комментарий от seiken

Токен можно потерять с любым языком, да. Но у js есть два отягчающих обстоятельства: 1) js-писатели в 99% случаев являются некомпетентными веб-макаками и шансов потерять токен у них больше, 2) другие js-писатели тянут к себе в проект непонятные пачки js-библиотек сотнями, не глядя и даже не фиксируя конкретный скаченный с инета код, а только прописывая урл, такой подход у нормальных людей в нормальных языках опять же не принят.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от seiken

В С/С++ нет какого-то неконтролируемого никем репозитория полного вирусни и непроверенных проектов. C/C++ программисты не делают на узлах каждого клиента curl x | sudo bash.

PPP328 ★★★★★
()
Ответ на: комментарий от firkax

Хорошо, допустим, первый пункт верен. Со вторым пунктом не так всё однозначно. В package.json есть все необходимые средства для фиксации версий зависимостей. С другой стороны, и в том же питоне можно в requirements.txt указать названия пакетов без версий.

seiken ★★★★★
() автор топика
Ответ на: комментарий от PPP328

Так в C++ вообще нет «официального» репозитория и менеджера пакетов. Каждый дрочит, как хочет.

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

Вот именно. Разработчик сам идёт на условный github и сам контролирует, что он устанавливает. А не «я написал import xxx, оно стянуло неизвестно откуда 100 пакетов, каждый из них стянул 100 пакетов, из которых 10% устарели, 10% теперь трояны, а остальные 80% - это зависимости от leftpad»

А в большинстве случаев никуда не идёт и ставит зависимости из репозитория дистрибутива, где нет вирусов (единичные случаи вскрывались очень быстро)

PPP328 ★★★★★
()
Последнее исправление: PPP328 (всего исправлений: 1)
Ответ на: комментарий от seiken

Средства то есть, но макаки их не используют. Они вводят команду «сделать везде последние версии» и на все вопросы, если таковые возникнут, отвечают yes (кому захочется разбираться в сотнях непонятных пакетов которые сами подтянулись чьими-то зависимостями?). Это во-первых, а во-вторых, даже если версия фиксируется, но обычно по номеру, что не гарантирует защиту от подлога. Надо по хэшу коммита, такое там вроде тоже можно, но этим пользуются ещё реже.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от PPP328

А давай посмотрим с другой стороны. Вот в раст я прописал в зависимости модули. Они скачались проверенные, точно «чистые», подтвержденные.

А в с++ я ползаю по интернетикам и не знаю - а точно ли этот разраб на гитхабе нормальный? Ну с какого перепугу я должен это знать? Ну откуда? Я Ванга или что? Я должен знать всех разрабов мира и все проекты на гитахбе?

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

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

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

Я дополнил свой ответ выше. Она есть. Просто кто-то «гонится за версиями» и не учитывает, что пользователю нужно без извращений чтобы оно работало на его машине. А для этого нужно использовать версии из дистрибутива, а не скачанные неизвестно откуда.

PPP328 ★★★★★
()
Ответ на: комментарий от LightDiver

ваш подход с++ ничем не отличается от обсуждаемого npm

Ещё раз. Даже если забыть, что существуют репозитории дистрибутивов, код которых проверяется. Вы упускаете главную деталь. Те, кто пользуются репозиториями (apt/npm/cpan/etc) просто не хотят брать на себя ответственность за проблемы в зависимостях. «Ах, это не я баран и сделал curl | sudo bash (как в недавнем факапе убунты), это разработчики модуля бараны, потому что у них в цепочке зависимостей вредный пакет!». А то, что философия этих репозиториев (я про npm/cpan) - «тяни библиотеку, даже если там кода на 2 строки» приводит к тому, что там тысячи пакетов, которые никто не проверяет, не смотрит и не тестирует. Это не только раздувает рантайм у пользователя, но и в принципе не позволяет хоть как либо сказать, безопасен ли этот код.

PPP328 ★★★★★
()
Ответ на: комментарий от LightDiver

Вот, например. Один из самых популярных npm модулей - gatsby. Знаете, сколько у него самого зависимостей?

All modules (1 top level, 1253 dependencies)
⚠Modules with multiple versions (114)
⚠Deprecated modules (17)
All peer dependencies (248)
⚠Missing peer dependencies (16)

1253 зависимости!! Из которых 114 модулей с разными версиями и 17 deprecated модулей.

При 270 000 скачиваний еженедельно!

P.S. Вишенка на торте: из этих 1253 зависимостей 660 имеют только одного мейнтейнера. Какой шанс, что у кого-то из них сопрут ключ?

PPP328 ★★★★★
()
Последнее исправление: PPP328 (всего исправлений: 1)
Ответ на: комментарий от PPP328

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

Вот вернумся к тому же расту. Минимальный простой проект с окном - собираются 284 модуля. Ты правда думаешь, что я должен проверять все эти модули и знать что там в каждом? Там работа с иксами, вейлендом и прочее прочее.

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

Npm, как ты видишь, этим требованиям не соответствует. С++, впрочем, тоже - зоопарк модулей в дистрибутивах, зоопарк а гитхабе вообще нонеймный. Ищи как хочешь, бери где хочешь. А если в дистрибутиве нет нужного?

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

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

Репозиторий дистрибутива.

С++, впрочем, тоже - зоопарк модулей в дистрибутивах

Передергивание. Зоопарк только в рамках разницы LTS и rolling дистрибутивов. Всем нормальным программистам хватает выпуска deb и rpm пакетов и оно (внезапно!) уже работает практически на всех дистрах (за исключением дистров 10-15 летней давности, где тоже скорее всего заработает, но с приседанием)

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Ну вот мне, как гентушнику, уже недостаточно. Видмо не всем достаточно рпм и деб. А еще есть виндузятники.

Банальное - я недавно попытался свой проект сделать на плюсах, запнулся на работе с зип-архивами. Встроенное в дистрибутив категорически отказалось работать. Полез на гитхаб искать, перебирал перебирал версии. А откуда я могу знать что они там безопасные? Да не буду и не смогу я это проверять.

Потыкался, плюнул - остался на раст. Тут такого нету - зависимость прописал, она работает.

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

Встроенное в дистрибутив категорически отказалось работать.

У всех работает, у вас не работает. Спешите видеть, растовик не смог использовать libz.

Тут такого нету - зависимость прописал, она работает.

«Я ниасилил использовать libz и сделал curl | sudo bash»

PPP328 ★★★★★
()
Последнее исправление: PPP328 (всего исправлений: 1)
Ответ на: комментарий от PPP328

Да хрен его знает. [I] dev-libs/libzip

Вот оно работать отказалось. Так и не справился, хотя особо настойчиво и не пытался. Есть дела и важнее. Просто хотел попробовать в очередной раз плюсы и в очередной раз получил по хлебалу всеми этими их нюансами. И так раз за разом.

Но ты понимаешь, у того же раст такой беды нету. Почему? У питона нету.

А я тебе скажу почему - у них есть официальная инфраструктура.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Вот оно работать отказалось

И вы, конечно, же, написали мейнтейнерам дистрибутива, что в дистре кривой libzip? Или вы нашли этому подтверждение? Нет. Потому что вы написали кривой код.

Но ты понимаешь, у того же раст такой беды нету. Почему? У питона нету.

Ага, зато есть еженедельные новости, что кто-то потерял ключ и теперь вместо модуля малварь. Которая теперь у всех пользователей на компах. Круто! Зато не надо читать мануал как пользоваться libzip.

Ну и да, то что вы написали include/import zip не значит, что оно у вас будет работать. Потому что (барабанная дробь), реп постоянно обновляется, а при фиксации версии вы теряете апдейты безопасности. А знаете, где такой проблемы нет? В репе дистрибутива, где версия фиксируется, но поверх идут апдейты безопасности, не ломающие API.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Ты видел такие новости про раст? Есть ссылки?

Что лять не значит, что будет работать?! Как это так? Вот в раст это значит, что будет работать в 99% случаев, если ты используюешь актуальную версию.

В этом то и беда, что все неопределенно - то будет, то не будет. Я вообще не понимаю как плюсы смогли набрать такую популярность при их подходе. Конкурентов чтоли не было долго.

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

если ты используюешь актуальную версию.

Пхпх, т.е. вам с выходом каждой версии, ломающей API нужно переписывать свой код. Добро пожаловать в роллинг. Менеджер проекта вам скажет спасибо, услышав, что вам надо переписать архитектуру, потому что в зависимости вчера дропнули поддержку синхронных запросов и вам надо срочно переписать тонну кода. Продакш реди!

У питона нету. А я тебе скажу почему - у них есть официальная инфраструктура.

Ага, у меня гугл ломится от запроса «malware in pypl». Официальная инфраструктура my ass.

Rust

Наиболее заметный инцидент произошёл в августе 2023 года, когда исследователи из Phylum обнаружили серию вредоносных пакетов, маскирующихся под популярные библиотеки, такие как postgress, oncecell, envlogger, if-cfg и serd. Эти пакеты содержали вредоносный код в файле build.rs, который собирал информацию о системе и отправлял её через Telegram-бота злоумышленнику.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

"подозрительные пакеты были обнаружены на ранней стадии "

Вот и пусть ищут, разбираются, банят левое. Но основная официальная безопасная инфраструктура быть должна.

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

И заметь - пытались подсунуть левые проекты, маскирующиеся под нормальные. Их тут же обнаружили и убрали. Использование официальных нормальных безопасно.

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

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

В случае с плюсами используются библиотеки из репозитория.

Использование официальных нормальных безопасно.

Ага, особенно прикольная штука в crates/npm/pypl/etc - это когда разраб опечатывается. И ему система не скажет «братюнь, такого пакет нет». Неееет. Оказывается, что в этой «проверенной и доверенной инфраструктуре» есть тонна пакетов, которые на одну букву отличаются от оригинального названия, но являются malware. Ух! Безопасно! И как же они туда попадают? А, можете не отвечать, загружаемые в эту инфру пакеты никто не проверяет, даже автоматикой.

А знаете, где проверяют? В репозитории дистрибутивов.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Не впихнешь ты все нужное в дистрибутив. Особенно, когда это релизный дистрибутив. Он устаревает уже в день выпуска.

Разработка это постоянный путь, а не статика - движение.

LightDiver ★★★★★
()
Ответ на: комментарий от PPP328

Разработчик сам идёт на условный github и сам контролирует, что он устанавливает

Ой-ой-ой, ну расскажи, что ты там контролируешь? Аудит кода проводишь?

seiken ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Он устаревает уже в день выпуска.

Интересным образом это беспокоит только фанатиков непроверяемых репозиториев. Вся остальная разработка сидит и в ус не дует, особенно коммерческая. Фиксы на безопасность прилетают в течение lifetime дистрибутива, API стабильное, продукт работает на известном окружении.

Зато под роллинг как ни тужься - не получится выпустить корпоративный продукт. Потому что у всех зоопарк версий и зафиксировав на одной - будет работать только у единиц. Вы видели на сайте какого-нибудь JetBrains, Zoom, Slack ebuild для генты? Нет. Потому что переписывать ради переписывания финансово невыгодно.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

А в большинстве случаев никуда не идёт

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

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

Удивительно, но это, почему-то, не мешает разработчикам С/С++. Как же так? Может всего хватает и на самом деле вам не хватает leftpad?

PPP328 ★★★★★
()
Ответ на: комментарий от LightDiver

Ты видел такие новости про раст? Есть ссылки?

Справедливости ради, js на порядок более популярен, если не больше.

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

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

LightDiver ★★★★★
()
Ответ на: комментарий от PPP328

Может всего хватает и на самом деле вам не хватает leftpad?

Так эти лефтпады каждый плюсовик каждый раз пилит самостоятельно, вот и всё. Был бы официальный репозиторий для плюсов, были бы там и свои лефтпады.

seiken ★★★★★
() автор топика
Ответ на: комментарий от BceM_IIpuBeT

Сторонние разныые существуют. Вон один от майкрософта удобный. Мы про официальный.

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

Первоочередные цели хакеров - самые популярные технологии.

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

Был бы официальный репозиторий

Вы так и будете продолжать отрицать наличие репозиториев дистрибутивов? Раз в нём нет libleftpad - значит у C/C++ программистов достаточно интеллекта написать

printf("'%*s'\n", total_width, str);
PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

А ты не путай свою личную шерсть с государственной.

Репы дистрибутивов это все стороннее. А мы тут про официальные репы конкретного проекта. Например раста, питона.

Сейчас я вижу плюсы не как продукт. Это стандарт. Выкатили некий стандарт, который все время меняется, а продукта то нет. И как с этим работать не знают даже те, кто умеют работать с определенной версией.

Вы наработали себе «навык». Как в винде - секреты мастерства. Как сплясать, куда тыкнуть, чтобы все заработало. А системы нет.

Кто то юзает с99, кто то с11, кто то грезит о с26 и работе строк в нем. Ты чуешь о чем?

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от PPP328

При чём тут репозиторий дистрибутива??? Там пакеты могут быть вообще без кода или на каких угодно языках.

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

Короче держите оба по клоуну, тут бесполезно о чём-то спорить. Вы просто упёрлись, что вам лично нужен репозиторий с малварью (примеры для каждого репа я вам привёл). На аргумент «в дистрах нет малвари в репах» вы отвечаете тем, что вам там нужен leftpad. Ну удачи вам, жрите малварь дальше. Очень жаль, что в моём дистре есть продукты на ваших языках, потому что хрен его знает, что вы там притянули по зависимостям.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

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

LightDiver ★★★★★
()
Ответ на: комментарий от LightDiver

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

Я предпочитаю делать apt install libzip-dev, но автор выше это ниосилил.

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Тебе же уже написали: в нормальном дистре для продакшна (не путать с роллинг-троллинг) частенько нет актуальной версии нужной библиотеки. Например, python-pkcs11, собранный пакет из pip не содержит современную версию с поддержкой ECC, т.е. нужно собирать из исходников.

seiken ★★★★★
() автор топика
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от seiken

Так для вашего python есть же ваша помойка с пакетами. Что ж вы ее не используете? Боитесь написать pyton-cryptography и получить вместо пакета малварь?

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

То есть ты предпочитаешь сторонний продукт. Я так и написал. В надежде, что конкретно эти посторонние человеки по своему благоволению добавят нужные тебе модули. Ну жди.

В любом случае это не официальный продукт и не официальные репы со всем вытекающим. Еще и устаревшие.

LightDiver ★★★★★
()
Ответ на: комментарий от PPP328

В pypi нет актуальной версии.

seiken ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

качать лично из разных уголков интерната

Два клоуна реально не понимают, что атака на централизованую систему с многотысячными автоматическими зависимостями на порядки проще за классику. Ребята, вы говнокодеры)))

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от BceM_IIpuBeT

Это что то из разряда: «опенсорс опаснее, потому что каждый может заглянуть в код и увидеть уязвимости»?

Копаясь в разрозненных проектах по всему интернету, ты умножаешь лично для себя опасность кратно.

Разница между плюсами и растом очень простая: в раст есть инфраструктура и раст это продукт, а плюсы это не продукт, а стандарт - в нем нет инфраструктуры. Все остальное вытекает из этого. И сравнение тут точно не в пользу плюсов. Хотя есть в подходах преимущетсва и там и там.

LightDiver ★★★★★
()
Ответ на: комментарий от BceM_IIpuBeT

что атака на централизованую систему с многотысячными автоматическими зависимостями на порядки проще

Очевидно, что только при прочих равных. Т.е. если в этой централизованной системе не предусмотрено дополнительных механизмов защиты. Просто считать, что если сосед Вася хреново защищает свои зависимости в одно рыло, то и в централизованной системе будет васянская защита - как-то странно…

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

Да как ты не понимаешь? Атака на город это гораздо опаснее - там сконцентрированны человеки, которых можно убить одним махом. Вот если бы все жили по лесам и джунглям, не объединяясь в группы, это было бы таааак безопасно!

LightDiver ★★★★★
()
Ответ на: комментарий от seiken

Ой, ви таки делаете мне смешно. У вас нет такой защиты в репозитории. Вот вообще. Никто не проверяет ни pypl, ни crates ни pip ни cpan ни еще что-либо. Даже ваш хвалёный раст. Я вам уже привёл пример малвари в его репе. И её нашли сторонние люди, которые просто решили проверить репу для рекламы самих себя. Никто и нигде не проверяет загружаемые либы в эти репы. Это всё помойки.

PPP328 ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)