The OpenNET Project / Index page

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

Уязвимость в NPM, приводящая к перезаписи файлов в системе

09.09.2021 10:11

Компания GitHub раскрыла подробности о семи уязвимостях в пакетах tar и @npmcli/arborist, предоставляющих функции для работы с tar-архивами и расчета дерева зависимостей в Node.js. Уязвимости позволяют при распаковке специально оформленного архива перезаписать файлы за пределами корневого каталога, в который осуществляется распаковка, насколько это позволяют текущие права доступа. Проблемы дают возможность организовать выполнение произвольного кода в системе, например, через добавление команд в ~/.bashrc или ~/.profile при выполнении операции непривилегированным пользователем или через замену системных файлов при запуске с правами root.

Опасность уязвимостей усугубляется тем, что проблемный код используется в пакетном менеджере npm при операциях с npm-пакетами, что позволяет организовать атаку на пользователей, разместив в репозитории специально оформленный npm-пакет, при обработке которого в системе будет выполнен код злоумышленника. Атака возможна даже при установке пакетов в режиме "--ignore-scripts", отключающем выполнение встроенных скриптов. Всего npm затрагивает четыре уязвимости (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 и CVE-2021-39135) из семи. Первые две проблемы касаются пакета tar, а остальные две пакета @npmcli/arborist.

Наиболее опасная уязвимость CVE-2021-32804 вызвана тем, что при очистке указанных в архиве tar абсолютных путей некорректно обрабатываются повторяющиеся символы "/" - удаляется только первый символ, а остальные оставляются. Например, путь "/home/user/.bashrc" будет преобразован в "home/user/.bashrc", а путь "//home/user/.bashrc" в "/home/user/.bashrc". Вторая уязвимость CVE-2021-37713 проявляется только на платформе Windows и связана с некорректной очисткой относительных путей, включающих неразделённый символ диска ("C:some\path") и последовательность для возврата в предыдущий каталог ("C:../foo").

Уязвимости CVE-2021-39134 и CVE-2021-39135 специфичны для модуля @npmcli/arborist. Первая проблема проявляется только на системах, не различающих регистр символов в ФС (macOS и Windows), и позволяет записать файлы в произвольную часть ФС, указав в числе зависимостей два модуля '"foo": "file:/some/path"' и 'FOO: "file:foo.tgz"', обработка которых приведёт удалению содержимого каталога /some/path и записи в него содержимого foo.tgz. Вторая проблема позволяет перезаписать файлы через манипуляцию с символическими ссылками.

Уязвимости устранены в выпусках Node.js 12.22.6 и 14.17.6, npm CLI 6.14.15 и 7.21.0, а также в отдельных выпусках пакета tar 4.4.19, 5.0.11 и 6.1.10. Получив информацию о проблеме в рамках инициативы "bug bounty", GitHub выплатил исследователям $14500 и просканировал содержимое репозитория, в котором не было выявлено попыток эксплуатации уязвимостей. Для защиты от указанных проблем GitHub также ввёл запрет на публикацию в репозитории NPM-пакетов, включающих символические ссылки, жёсткие ссылки и абсолютные пути.

  1. Главная ссылка к новости (https://github.blog/2021-09-08...)
  2. OpenNews: Уязвимость в пакетном менеджере Composer, допускающая компрометацию PHP-репозитория Packagist
  3. OpenNews: Уязвимость в NPM, позволяющая изменить произвольные файлы при установке пакета
  4. OpenNews: Уязвимость в пакетном менеджере GNU Guix
  5. OpenNews: Уязвимость в пакетном менеджере pacman, позволяющая выполнить код в ходе MITM-атаки
  6. OpenNews: Уязвимость в Apache CouchDB, позволяющая совершить атаку на реестр пакетов NPM
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/55767-npm
Ключевые слова: npm, tar, nodeюjs
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (57) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 10:11, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +24 +/
    остановите, нормальному программисту надо выйти
     
     
  • 2.15, Аноним (15), 10:59, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • –18 +/
    Это чем ты занимаешься нормальный?) Нейросетки? Другие алгоритмы машинного обучения? Делаешь комиты в ядро linux? Алгоритмы распознавания образов? Пишешь игровые движки? Движки физ. процессов? Мат. моделирование? Программы для космических спутников? Или может прошивки для крутых устройств пишешь на ассемблере и C++?
     
     
  • 3.18, pashev.me (?), 11:28, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Фортран.

    Лучший язык, в том числе для обучения.

    Простой, не не примитивный. Минимальная программа - end.
    Батарейки в комплекте.

    Компилируемый. Близкий к железу. Но можно и на кластерах.

     
     
  • 4.19, Xasd7 (?), 11:43, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Батарейки в комплекте.

    точно? :-D

     
     
  • 5.20, pashev.me (?), 11:45, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Точно.
     
  • 5.26, lockywolf (ok), 12:28, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Врёт как дышит. В комплекте там только многопоточность и функция Бесселя

    хотя если аноним считает бомбы, это, конечно, уже немало

     
     
  • 6.38, Аноним (38), 14:55, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В С++ тоже есть функция Бесселя.
     
     
  • 7.52, заминированный тапок (ok), 10:17, 13/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    и многопоточность
     
  • 4.22, Anonymoustus (ok), 11:50, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Для обучения Фортран вряд ли стоит называть лучшим. Или придётся объяснять учащимся всю предысторию, включая перфокарты и синтаксис старого Фортрана, иначе не будет понимания о преемственности поколений языка и оправданности его современного и дальнейшего применения. А ведь маленькие будущие погромизды, глядя на различия Фортранов, этими вопросами неминуемо озаботятся и зададут их вам.

    Паскаль был и есть лучшим языком для обучения. И «обобщённый» Бейсик я бы поставил на второе место по этому критерию.

     
     
  • 5.55, anonynous (?), 22:59, 13/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    паскаль язык который можно использовать только для обучения.
    то есть использовать его в реальности смысла 0. лучше уж фортран. он точен.
     
     
  • 6.58, Anonymoustus (ok), 23:15, 13/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Я себе недавно написал на Паскале ненужную, как мне думалось, программу, чтобы просто вспомнить годы молодые и размять мозги, но которая внезапно не раз и не два оказалась нужной и я ею пользуюсь время от времени.

    На Паскале очень хорошо и удобно писать хорошо структурно оформленные, наглядные и понятные программы.

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

     
  • 4.30, Аноним (30), 12:59, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > не не примитивный

    двойное отрицание... Значит примитивный?

     
  • 4.37, Брат Анон (ok), 14:43, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Лучший язык, в том числе для обучения.

    Изыди, сотона!

    Фортран-77, сгинь нечистый!

     
  • 4.50, Тот_Самый_Анонимус (?), 20:53, 11/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Отвечу трусливому Anonymoustus'у под вашим комментом, ибо он запретил ответы ему.
    Паскаль — кал для обучения.
    Операторные скобки, выглядящие как операторы? — Это паскаль!
    Логические операции в виде слов? — Это паскаль! (интересно, а почему они тогда знаки + и - ге заменили словами plus и minus?).
    Кастрированный for?  Снова паскаль!
    Ориентированность на систаксис английского языка и грамматики с маразматичным запоминанием, надо ли ставить точку с запятой пере else? — Паскаль, кто ж ещё?

    Шикарный язык, что ещё сказать...

     
     
  • 5.56, anonynous (?), 23:01, 13/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    а от синтаксиса ссылок плакать хочется.
    и повеситься.
    и бегин енд по сравнению с ним - детский лепет.
    крышечки ... <censored>...
     
     
  • 6.57, anonynous (?), 23:03, 13/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    уж лучше lisp для обучения
    он проще и _логичнее_ !
     
  • 4.59, Pilat66 (?), 17:50, 16/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю как сейчас, а лет тридцать назад это был чуть ли не единственный язык с нормальными операциями над строками. На нём написать интерпретатор было просто удовольствие после C.
     
  • 3.46, Онаним (?), 00:08, 10/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Биллинга мобильной телефонии хватит? :)
     
  • 3.47, Аноним (47), 08:04, 10/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    нормальный погромист это тот кто не ищет на реализацию микрометода готовый микропакет с единственной функцией, тот кто не "бампает" версию зависимостей не каждый визг.

    чтобы вам было понятно в нодежс очень просто любому популярному пакету заговнокодить внутрь себя уязвимости или бекдоры и всем будет пофиг ибо никто не читает изменения самого кода.

     

  • 1.2, ___ (??), 10:13, 09/09/2021 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +3 +/
     

     ....ответы скрыты (9)

  • 1.4, Аноним (5), 10:19, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Классика
     
     
  • 2.10, Аноним (1), 10:31, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    но это знать не надо
     

  • 1.16, безответственность не всё (?), 11:02, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    то ли ещё будет. и в хвалёном rust такое будет и в Go и в питонах.

    всё от моды на безответственность!

     
     
  • 2.28, Аноним (28), 12:37, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В Go, по факту, есть проверки, а если нет по какой-то причине, то там написано в комменте к функции (я о встроенных пакетах).
    А если человек разбирается только в URL, а в механизмах работы с путями ФС не шарит, то язык уже не при чем.
     
     
  • 3.33, Аноним (5), 13:37, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В Go поступили проще сделали управление зависимостми неудобным. Это предотвращает бесконечные цепочки зависимостей. Безопаснее всего работа с зависимостями в C там с зависимостями просто никак не работают. Есть одна, две любы, которые все доят.
     
     
  • 4.35, Аноним (5), 13:37, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    *либы, хотя любы даже забавнее.
     
  • 4.43, пох. (?), 19:57, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    вы услышали отровения человека, ни разу не пытавшегося собрать какой-нибудь cmake.

    Две либы, ага, щас. Весь интернет не хочешь?!

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

    Генитальным разработчикам такое ограничение полета их мыслей, конечно же, претит.

     
  • 2.53, anonymous (??), 11:48, 13/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Каким образом "такое будет" в Go?
     

  • 1.17, pashev.me (?), 11:26, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Негодяи.
     
  • 1.23, PetrG (ok), 11:56, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Проработал с этим чудом техники больше года. Это как пасти хорошо накормленых тараканов. Только сделал npm audit fix, через неделю опять развлечений насыпало. Даже зависимости разрешать не умеет.
     
     
  • 2.24, Аноним (24), 12:04, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Представил себе зубастые пасти тараканов, спасибо поблевал.
     
     
  • 3.25, And (??), 12:22, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    У нас ведущий техническую часть разработки на всю сотню кодеров разок в неделю постит мемы. Чтобы не забывали и не привыкали к недостаткам JS.

    Без этого было бы экспрессивно абсцентно плохо.

    В общем, связанное с JS означает переусложнение в разработке. Приходится управлять ненужными обстоятельтвами из-за недостатков инструмента.

     

  • 1.27, lockywolf (ok), 12:34, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Какая разница? Я ещё ни одной программы на жс запустить не смог, окромя как в доккере. А в доккере это не важно.
     
  • 1.29, JSOneLove (?), 12:40, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    ну ладно, вот вам патч:
    if (leftstr(path, 4) == '////') path = rightstr(path, -4);
    if (leftstr(path, 3) == '///') path = rightstr(path, -3);
    if (leftstr(path, 2) == '//') path = rightstr(path, -2);
    if (leftstr(path, 1) == '/') path = rightstr(path, -1);
     
     
  • 2.31, Аноним (31), 13:25, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ты опоздал, они уже запатчили - https://www.opennet.dev/opennews/pics_base/0_1553748508.jpg
     
  • 2.36, commiethebeastie (ok), 14:35, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Что за чинкод?
     
     
  • 3.41, Аноним (28), 19:53, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    индиан вообще-то
     
     
  • 4.51, sweetlao (?), 12:38, 12/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    мышееду неприятно
     
  • 2.39, OpenEcho (?), 18:08, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    s~^\s*(\/|\\)+~~g
     

  • 1.32, Ананоним (?), 13:36, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Смех Жириновского уже был? Чё не смеётесь, не смешно? Этож piece of crap самынастоящы.
     
  • 1.34, Аноним (34), 13:37, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Про tar в теме новости не указали.
     
  • 1.40, кек (?), 18:35, 09/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Надо было ставить rar!
     
     
  • 2.42, Аноним (28), 19:55, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    и паковать-распаковывать прямо в облаке владельца архиватора, вообще же достаточно JSON-чиками обменяться
     
     
  • 3.44, кек (?), 22:56, 09/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Глупость какая, он есть в репах
     
     
  • 4.48, Аноним (48), 10:47, 10/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    это ирония о вебтрендах
     

  • 1.45, Онаним (?), 00:07, 10/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хосспаде, што, о5 dependency chaos поимели?
    Ну и фиг с ним.
     
  • 1.49, Какаянахренразница (ok), 16:31, 10/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отродясь такого не бывало, и опять то же самое ©
     
  • 1.54, Аноним (54), 16:14, 13/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да вы что? А какже безопастная память?
     

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



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

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