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

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

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

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

Источник: opennet.ru

Добавить комментарий