The OpenNET Project / Index page

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

Атака на NPM, позволяющая определить наличие пакетов в приватных репозиториях

14.10.2022 12:10

В NPM выявлена недоработка, позволяющая определить существование пакетов в закрытых репозиториях. Проблема вызвана разным временем реакции при запросе существующего и несуществующего пакета сторонним пользователем, не имеющего доступа к репозиторию. При отсутствии доступа для любых пакетов в приватных репозиториях сервер registry.npmjs.org возвращает ошибку с кодом "404", но в случае существования пакета с запрошенным именем ошибка выдаётся с ощутимой задержкой. Атакующий может использовать данную особенность для определения наличия пакета при подборе имён пакетов по словарям.

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

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

  1. Главная ссылка к новости (https://blog.aquasec.com/priva...)
  2. OpenNews: В NPM планируют использовать Sigstore для подтверждения подлинности пакетов
  3. OpenNews: Выпуск пакетного менеджера NPM 8.15 с поддержкой локальной проверки целостности пакетов
  4. OpenNews: GitHub раскрыл данные о взломе инфраструктуры NPM и выявлении открытых паролей в логах
  5. OpenNews: Атака на немецкие компании через NPM-пакеты
  6. OpenNews: Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компаний
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/57918-npm
Ключевые слова: npm
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (30) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 12:24, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Осталось узнать как техникой перебора узнать какие пакеты есть в приватном репозитории.
     
  • 1.2, Аноним (2), 12:26, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > сервер возвращает ошибку с кодом "404"

    Автор, какой сервер? Этих npm-серверов...

     
     
  • 2.37, Аноним (-), 18:40, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю.
     
  • 2.46, Аноним (46), 01:51, 15/10/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    https://registry.npmjs.org/

    Скопировал из первой ссылки в новости, хотя это и так было очевидно

     

  • 1.3, Аноним (3), 12:28, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Проблема вызвана разным временем реакции при запросе существующего и несуществующего пакета сторонним пользователем

    Сразу подумал, как прочитал заголовок.

     
     
  • 2.11, Аноним (11), 13:40, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Задержка - это ещё ладно. Главное - в другом:

    > пакетный менеджер npm посчитает более приоритетным публичный репозиторий и загрузит подготовленный атакующим пакет.

    О_о... Привет всяким карго!

    > GitHub был уведомлен о проблеме в марте, но отказался добавлять защиту от атаки.

    Отказался закрыть дырищщу?! Это кто же заказал её?

     
     
  • 3.24, Адмирал Майкл Роджерс (?), 16:40, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это кто же заказал её?

    Насколько я могу судить на основании своего прошлого опыта, информация такого рода, как правило, не разглашается.

     
  • 3.28, Бывалый смузихлёб (?), 17:29, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Если какой-то балда додумался ссылаться к собственным пакетам просто по именам, то очевидно что система будет по возможности лезть в сеть и тянуть последнюю актуальную версию где бы та ни находилась если в правилах к пакету указано "тянуть свежайшую версию"
    Для каких-то сильно внутренних пакетов есть много других вариантов - вплоть до просто прямой ссылки на пакет

    Это не столько баг, сколько забивание гвоздей монитором с последующим невероятным удивлением что ему пришёл конец

     
     
  • 4.29, Аноним (11), 17:32, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > очевидно что система будет по возможности лезть в сеть

    Для какой балды это очевидно?

     
     
  • 5.48, Бывалый смузихлёб (?), 08:18, 15/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Итак, есть система, заточенная на работу с глобальным репозиторием в первую очередь

    Есть «просто пакет», у него есть просто название и версия

    Где, по возможности, подобная система будет искать «просто пакет» с просто версией, тем более что названия внутренних и внешних пакетов запросто могут пересекаться ?

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

     
     
  • 6.51, Аноним (11), 05:32, 18/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А потом удивляемся дырам из-за таких смузихлёбов. Дыры by design.
     

  • 1.5, Аноним (3), 12:39, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    >GitHub был уведомлен о проблеме в марте, но отказался добавлять защиту от атаки, сославшись на архитектурные ограничения.

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

     
     
  • 2.6, Аноним (3), 12:42, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Вообще очень непросто защититься от такого.

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

     
     
  • 3.7, Аноним (3), 12:44, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Кто-нибудь, запилите фичу для популярных баз.
     
     
  • 4.34, Аноним (34), 18:29, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Thread.Sleep(Math.Random(500));
    В продакшен!
     
     
  • 5.41, Аноним (3), 20:04, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Thread.Sleep(4); // chosen by fair dice roll, guaranteed to be random
    тогда
     
  • 2.12, Аноним (11), 13:43, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Очень просто: поменять приоритет публичных и локальных репов.
     
     
  • 3.40, Аноним (3), 20:02, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Проблема в том, что само название пакета и его существование может быть коммерческой тайной.
     
  • 2.50, Аноним (50), 10:43, 15/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Вообще очень непросто защититься от такого

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

     

  • 1.10, Аноним (10), 13:38, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Просто комитить зависимости
     
  • 1.14, Аноним (14), 14:16, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Надо просто взять все популярные имена зависимостей и разместить, да и все, зачем все выяснять? :) Раз оно такое тупое, что вытянет самое новое откуда угодно.
     
     
  • 2.17, Аноним (17), 14:52, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Он упадет если нет депендесни. Надо сначала проверить.
     

  • 1.27, Аноним (27), 16:57, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Но ведь сначала должны проверяться права доступа. Как тогда доходит до проверки наличия или отсутствия файлов? 🤔
     
     
  • 2.30, Аноним (11), 17:34, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    они всё наоборот делают.
     

  • 1.32, Аноним (32), 18:04, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > В NPM выявлена недоработка...

    Да ладно, серьёзно!?

     
  • 1.33, AKTEON (?), 18:11, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А может быть просто не надо тянуть свежие версии из публичных репозиториев без аудита ??
     
  • 1.38, Igraine (ok), 19:27, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    В npm можно свой user-scope или organization-scope создать тогда никто не сможет загрузить пакеты с вашим именем.
    Или просто загрузить пакеты с тем же именем
     
     
  • 2.39, pashev.ru (?), 19:38, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Какое дело честному человеку до левых репозиториев?
     
     
  • 3.42, Аноним (42), 21:15, 14/10/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Какое дело честному человеку до репозиториев?
     

  • 1.45, darkshvein (ok), 23:33, 14/10/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    нет NPM, нет и атак
     

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



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

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