The OpenNET Project / Index page

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

Критическая проблема в NPM 5.7, приводящая к смене прав доступа на системные каталоги

23.02.2018 08:54

В опубликованном вчера выпуске пакетного менеджера NPM 5.7.0 выявлена серьёзная проблема, которая может привести к нарушению нормальной работы компонентов операционной системы. При запуске npm с использованием утилиты sudo (не важно, какая команда выполняется, достаточно запустить "sudo npm --help" или "npm update -g") рекурсивно меняются права доступа на каталоги, относительно корневого префикса npm. Судя по отчётам пострадавших пользователей, после подобного изменения могут возникнуть проблемы с загрузкой операционной системы и работой локальных приложений. Проблема проявляется только при запуске npm с использованием утилиты sudo.

При запуске с применением sudo вместо root в качестве владельца для системных каталогов, включая всё содержимое /etc, /usr и /boot, устанавливается текущий непривилегированный пользователь. Источником проблемы стал переход версии 5.7.0 на новую реализацию mkdir, сохраняющую исходные права доступа и владельца при запуске с правами root с использованием sudo.

Проблема уже решена в обновлении 5.7.1. Массовых проблем удалось избежать благодаря тому, что в репозитории выпуски npm 5.7.x были помечены как экспериментальные и не доставлялись через каналы обновления стабильных релизов. При этом на сайте анонс был опубликован в форме, не отличающейся от объявлений стабильных релизов, что ввело в заблуждение некоторых пользователей, которые попытались перевести на NPM 5.7 свои рабочие системы. Также интересно, что сообщение об ошибке с описанием проблемы было отправлено за неделю до релиза 5.7.0, но осталось без внимания разработчиков.

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



RPM:
   for p in $(rpm -qa); do rpm --setperms $p; do rpm --setugids $p; done

DEB:
   dpkg --get-selections | grep install | grep -v deinstall | cut -f1 | xargs apt-get --reinstall -y --force-yes install

FreeBSD:
   mtree -U -f /etc/mtree/BSD.root.dist
   mtree -U -f /etc/mtree/BSD.var.dist
   mtree -U -f /etc/mtree/BSD.include.dist
   mtree -U -f /etc/mtree/BSD.sendmail.dist
   mtree -U -f /etc/mtree/BSD.usr.dist




  1. Главная ссылка к новости (http://blog.npmjs.org/post/171...)
  2. OpenNews: Сбой антиспам-системы привёл к коллапсу в репозитории NPM
  3. OpenNews: Более половины npm-пакетов могли быть скомпрометированы из-за ненадёжных паролей доступа
  4. OpenNews: Незащищённость NPM к атакам по внедрению вредоносных модулей-червей
  5. OpenNews: Применение тайпсквоттинга для распространения вредоносных модулей NPM, PyPI и Gems
  6. OpenNews: Инцидент с захватом прав на NPM-модуль привёл к сбою в работе проектов, использующих NPM
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/48125-npm
Ключевые слова: npm
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (62) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 09:22, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему не православный Yarn? npm кто-то еще используем в вменяемом состоянии?
     
     
  • 2.3, Аноним (-), 09:43, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ярн тоже баги выдаёт, правда не такие лютые
     
     
  • 3.60, Аноним (-), 03:47, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Ярн тоже баги выдаёт, правда не такие лютые

    Можно подумать вебмакаки перестанут быть вебмакаками и научатся софт писать нормально, а не так как они обычно кодят для своей клиентуры.

     
  • 2.22, й (?), 13:17, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    там речь про -g, который в yarn вообще выпилили
     
     
  • 3.29, НяшМяш (ok), 14:44, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    потому что вместо него есть ключевое слово global
     
     
  • 4.70, Prototik (?), 16:53, 25/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Который, однако, не лезет в систему, а складывает всё в домике пользователя.
     
  • 3.30, Аноним (-), 14:50, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    https://yarnpkg.com/en/docs/migrating-from-npm#toc-cli-commands-comparison
     
  • 2.35, KonstantinB (ok), 17:41, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да. Потому что лень мигрировать и объяснять всем, что поменялось и что теперь запускать.

    Хотя надо бы.

     
  • 2.72, Аноним (-), 20:36, 28/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Впервые попробовать решил для установки фреймворка Semantic UI. Не шмогло.
     

  • 1.2, Аноним (-), 09:37, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Что-то я давно его не видел, так что побуду за него, кхм.. node js не нужен, вспомнити npm left pad
     
     
  • 2.5, Аноним (-), 10:35, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Он говорил вообще жс не нужен, вроде.
     

  • 1.4, ПользовательНПМ (?), 10:14, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    К слову, чтобы не запускать npm с рут правами:
    mkdir ~/.node
    echo 'prefix = ~/.node ' >> ~/.npmrc
    echo 'export NPM_PACKAGES="$HOME/.node"' >> ~/.bashrc
    echo 'export PATH="$NPM_PACKAGES/bin:${PATH}"' >> ~/.bashrc
    echo 'export NODE_PATH="$NPM_PACKAGES/lib/node_modules"' >> ~/.bashrc
    echo 'unset MANPATH' >> ~/.bashrc
    echo 'export MANPATH="$NODE_PARENT/share/man:$(manpath)"' >> ~/.bashrc
     
     
  • 2.6, Аноним (-), 10:37, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • –12 +/
    Bash/ZSH - фу
    NPM - фу
    env export - фэ
     
     
  • 3.12, Аноним (-), 11:04, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    batfile рулез, да. echo %~dp0
     
  • 2.13, Michael Shigorin (ok), 11:06, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > unset MANPATH
    > export MANPATH=...

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

     
     
  • 3.16, EHLO (?), 12:32, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> unset MANPATH
    >> export MANPATH=...
    > Интересно, и многие вот так скопипастят, даже не задумавшись о том, что
    > первая строчка вообще ни к чему...

    Зависит от того что будет делать $(manpath), очевидно втч читать $MANPATH

    > echo 'unset MANPATH' >> ~/.bashrc
    > echo 'export MANPATH="$NODE_PARENT/share/man:$(manpath)"' >> ~/.bashrc

     
     
  • 4.46, angra (ok), 20:41, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ну тут всё-таки стоило объяснить подробней, что manpath в случае непустой переменной MANPATH просто вернет ее значение, а в случае пустой выдаст дефолтный путь. Хотя зачем это делается в этом скрипте для меня загадка, ведь это может испортить добавления в MANPATH от других секций .bashrc. Какой-то мелкомягкий подход у этих нодовцев.


     
  • 4.49, Аноним (-), 22:13, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/


    $ manpath
    bash: manpath: command not found

    Что за manpath?
     
     
  • 5.52, angra (ok), 00:26, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В debian и rhel дистрах идет в составе пакета man-db вместе с собственно man, а также apropos, whatis, mandb и другими утилитами. То бишь отсутствует лишь в урезанных установках. Как в других дистрах, не знаю.
     
  • 3.27, Аноним (-), 14:33, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тю, обычная практика. Так во многих конфигах делают: сначала все разбиндить, а потом уже свое.
     
     
  • 4.45, angra (ok), 20:20, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Копипастить не думая? Да, это обычная практика дурачков. Они ведь даже не пытаются вникнуть в причины и не понимают разницу между разбиндить ВСЁ одной командой и сбросить один параметр с последующим присвоением ему нового значения.
     
  • 3.47, Ne01eX (ok), 20:58, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Миша, ну от кого, так от тебя такой хни не ожидал. :-D

    Наивно полагать что кто-то за тебя очистил стек/кусок памяти/инициализировал переменную с пустым/нулевым значением. Не важно сейчас о каком языке программирования/какой оболочке/командном интерпретаторе/конкретной_блджад_реализации_export идёт речь. Очищать/обнулять/разбиндивать только что созданную переменную нужно ВСЕГДА. Равно как и проверять, что за х..ня в действительности в переменных.
    Конкретно в данном случае я бы ещё проверил $NODE_PARENT на наличие перевода строки (и ещё какую-нибудь аномальную хрень, типа кавычек точки-с-запятой и.т.п), потому что идёт запись в файл, где это можно нестандартно использовать ;-).
    Равно как и убирать за собой, после того как переменная выполнила задачу. Не надеясь, что волшебные уборщики всё сделают сами. Никогда.

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

    P.S. Но я бы порекомендовал всем совсем не использовать ни NPM ни Node.js. Без объяснения причин. Без смайлов.

     
     
  • 4.48, Аноним (-), 22:11, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Но я бы порекомендовал всем совсем не использовать ни NPM ни Node.js. Без объяснения причин. Без смайлов.

    А что взамен? (тоже серьёзно спрашиваю)

     
     
  • 5.63, Ne01eX (ok), 13:13, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Но я бы порекомендовал всем совсем не использовать ни NPM ни Node.js. Без объяснения причин. Без смайлов.
    > А что взамен? (тоже серьёзно спрашиваю)

    Для управления пакетами вполне хватит системы управления пакетами того дистрибутива, который вы используете.

     
     
  • 6.66, Ne01eX (ok), 17:38, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>> Но я бы порекомендовал всем совсем не использовать ни NPM ни Node.js. Без объяснения причин. Без смайлов.
    >> А что взамен? (тоже серьёзно спрашиваю)
    > Для управления пакетами вполне хватит системы управления пакетами того дистрибутива, который
    > вы используете.

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

    P.S. Частный случай, для тех кто ещё не въехал.

     
  • 4.51, angra (ok), 00:20, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Наивно полагать что кто-то за тебя очистил стек/кусок памяти/инициализировал переменную
    > с пустым/нулевым значением. Не важно сейчас о каком языке программирования/какой оболочке/командном  интерпретаторе/конкретной_блджад_реализации_export идёт речь.

    Очень даже важно. Например в Go инициализация пустым значением при создании переменной явлется частью спецификации. И если ты будешь в коде на golang заниматься этим, то читатели кода вполне справедливо назовут тебя чудаком на букву "м".

    > Очищать/обнулять/разбиндивать только что созданную переменную нужно ВСЕГДА.

    Думать желательно всегда. А тупо следовать правилам без их понимания это не очень хорошая идея. Переменную в данном случае не создавали и эксклюзивного права на нее у писашего этот "код" нет.

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

    Конкретно в этом случае следование идиотскому правилу приведет к тому, что будет похерены добавления в MANPATH путей из предыдущих секций .bashrc. Это нечто противоположное улучшению качества.

    > P.S. Но я бы порекомендовал всем совсем не использовать ни NPM ни Node.js. Без объяснения причин. Без смайлов.

    Действительно, зачем думать, обосновывать, надо тупо следовать.

     
     
  • 5.59, Аноним (-), 03:45, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Действительно, зачем думать, обосновывать, надо тупо следовать.

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

     
  • 5.65, Ne01eX (ok), 17:34, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    /me махнул рукой...

    Да, делайте как хотите...

     
  • 4.54, Кабан ЛяЛя (?), 02:25, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Хаскела на Вас нет...
     
  • 4.69, Аноним (-), 10:06, 25/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сколько лет уже скрипты пишу, bash, dash, sh перезаписывают уже существующее значение, так что Михаил прав, нунужные итерации.
     
  • 2.14, Аноним (-), 11:39, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > echo 'unset MANPATH' >> ~/.bashrc

    А вы смелый! вы забыли еще rm rf...

     
  • 2.56, qsdg (ok), 03:37, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > К слову, чтобы не запускать npm с рут правами:
    > ... <много телодвижений> ...

    Для этого уже давно есть NVM. С ним и рута не нужно, и всё хранится в одной папке, и можно иметь разные версии Node/NPM параллельно.

    https://github.com/creationix/nvm

    Что не отменяет того, конечно, что экосистемя Node.js для како-кодеров, и нормальный архитектор никогда не примет её (если только ему не нужен хинди-код за хинди-цену в проекте, конечно).

     

  • 1.11, Michael Shigorin (ok), 11:04, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Эк издевательски-то очередную кривулину назвали: correct-mkdir.js.

    И вот всё у них в песочнице так :-/

     
  • 1.15, Аноним (-), 12:16, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    осталось блокчейн к этому всему прикрутить и совсем казуально будет.
     
     
  • 2.17, Аноним (-), 12:39, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Поедемте на гироскутерах, отвеадаем смузи в барбершопе, дружище.
     
     
  • 3.23, fail_ (?), 13:34, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Поедемте на гироскутерах, отвеадаем смузи в барбершопе, дружище.

    -1
    не раскрыта тем барбершопофф

     

  • 1.18, index0h (ok), 12:40, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Традиционные факапы npm не прекращают удивлять))
     
  • 1.19, Аноним (-), 12:56, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем npm install -g вообще нужен? По идее можно же в любую папку вытянуть npm пакет со всеми необходимыми зависимостями?
     
     
  • 2.20, Бог Смузихлебов (?), 12:58, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это что бы без песочницы уничтожать хостовый сервер ;)
     
  • 2.24, Сергей (??), 13:45, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Кто то использует инструменты написаные на ноде, а их нужно устанавливать глобально
     
     
  • 3.26, Аноним (-), 14:21, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Для глобальной установки есть пакетный менеджер. Всё слаку ругили за make install на боевой системе, вроде прошло. Но нет, не прошло, хипстерам обязательно в обход пакетного менеджера что-то поставить нужно. А ещё лучше через curl ...| bash. Так что не понимаю, чем вызвано удивление по поводу случившегося. "Вы занимались любовью не предохраняясь и ожидали, что оттуда выйдет что? Плазма тв?".
     
     
  • 4.33, Аноним (-), 15:40, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Так ведь при sudo и global пакетный манагер не спасёт ибо npm даже системные бинарники может переписывать
     
     
  • 5.50, Аноним (-), 22:19, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Так ведь при sudo и global пакетный манагер не спасёт ибо npm даже системные бинарники может переписывать

    Зачем sudo и global, если есть пакетный менеджер, как раз и нужный для того, чтобы системные бинарники не перезаписывались всеми подряд?



    yum install nodejs-something

    вместо

    npm install -g something

    слишком длинно? Или не на яваскрипте написано, поэтому не будем им пользоваться?

     
     
  • 6.71, й (?), 14:02, 26/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    а вот теперь покажи jshint, gulp, lesscss и bower в твоём yum. в rh7+epel нету, в ubuntu тоже, в homebrew тоже. никто так js-пакеты не пакетирует (и я даже знаю, почему).
     

  • 1.21, Аноним (-), 13:12, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Кто-то запускает npm не в контейнере?
     
     
  • 2.42, Аноним (-), 19:37, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    страдальцы, которым приходится кодировать код или учиться этому
     

  • 1.25, Аноним (-), 14:02, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Какие есть варианты пробросить PATH внутрь контейнера с нодой и тулкитом глобальным?
     
     
  • 2.34, имя (?), 16:22, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    https://docs.docker.com/engine/reference/builder/#env
    https://docs.docker.com/engine/reference/commandline/run/#set-environment-vari

    что больше нравится. Или можно костылем через расшареный файл с хоста закидывать и в контейнере читать

     

  • 1.28, Аноним (-), 14:40, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Дорогие анонимы, а расскажите чем так плох npm?
    Я вот пользуюсь npm и да, некоторые пакеты требуют установки с -g.
    Брат жив, ярн - не пробовал, чем он лучше?
    npm - стандарт.
     
     
  • 2.43, Аноним (-), 19:38, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Дорогие анонимы, а расскажите чем так плох npm?
    > Я вот пользуюсь npm и да, некоторые пакеты требуют установки с -g.
    > Брат жив, ярн - не пробовал, чем он лучше?
    > npm - стандарт.

    ты новость-то читал?

     
  • 2.61, Аноним (-), 06:44, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ты npm leftpad-то вспомнил? Вот вначале вспомни npm leftpad, а потом уже спрашивай. Null undefined. 0.1 + 0.2 = 0.30000000000000004.
     
     
  • 3.62, Аноним (-), 11:38, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ураааа, двоечник вернулся!!!
     

  • 1.31, Аноним (-), 15:03, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вот еще на посмотреть как альтернатива webpack https://parceljs.org
     
     
  • 2.39, Аноним (-), 17:55, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Логично: "Вэб-пак для вэб-макак".
     
  • 2.58, Аноним (-), 03:40, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Вот еще на посмотреть как альтернатива webpack https://parceljs.org

    Недостаточно XMRов! Нужно больше кривой хни от вебмакак, милорд!

     

  • 1.40, vitalif (ok), 18:02, 23/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Почитать комменты опеннета, так всё сплошь суровые барадатые дятьки, пищущие на сях и только на сях )))

    А кто ж блин npm-модули то пишет? Ёжики?))

     
     
  • 2.41, Аноним (-), 19:30, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А кто ж блин npm-модули то пишет? Ёжики?))

    Вэб-макаки.

     
  • 2.44, Аноне (?), 19:51, 23/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Кто робко или в тряске жалуется на минусы PHP
     
  • 2.53, Анонимусис (?), 00:51, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    пишу на сях и плюсах под убунты и не только за деньги

    спрашивайте свои ответы

     
  • 2.55, arisu (ok), 03:03, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    такие же дeбилы, которые потом это используют.
     
     
  • 3.57, Аноним (-), 03:38, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Хипстопроблемы. Как пишут софт, так и тестируют.
     

  • 1.64, sleeply4cat (ok), 14:37, 24/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем вообще npm лапает эти директории?
     
     
  • 2.67, Аноним (-), 21:11, 24/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что может.
     

  • 1.68, Димон (??), 22:07, 24/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это какими придурками нужно быть, чтобы спроектировать программу, которая при выполнении пути программы --help меняет права каких-то там директорий?

    Жаваскриптуны и все им сочувствующие (типа Mozilla) не должны заниматься программированием.

     

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



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

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