В NPM е открита уязвимост, която позволява да се определи съществуването на пакети в закрити репозитории. Проблемът е причинен от различното време за реакция при запитване за съществуващ и несъществуващ пакет от страна на потребител, който няма достъп до репозитория. При липса на достъп до каквито и да било пакети в частни репозитории, сървърът registry.npmjs.org връща грешка с код „404“, но в случай на съществуване на пакет с исканото име, грешката се предоставя с осезаема забавяне. Атакуващият може да използва тази особеност, за да определи наличието на пакет, като подбира имена на пакети от речници.
Определянето на имена на пакети в закрити репозитории може да е необходимо за извършване на атака чрез смесване на зависимости, манипулиращи пресечението на имената на зависимости в публични и вътрешни репозитории. Познавайки какви вътрешни NPM пакети присъстват в корпоративните репозитории, атакуващият може да разположи пакети с идентични имена и по-нови версии в публичния репозиторий на NPM. Ако при изграждане вътрешните библиотеки не са изрично свързани в настройките си с техния репозиторий, пакетният мениджър npm ще разглежда публичния репозиторий за по-приоритетен и ще зареди подготовен пакет от атакуващия.
GitHub е уведомил за проблема през март, но е отказал да добави защита от атака, позовавайки се на архитектурни ограничения. На компаниите, използващи частни репозитории, се препоръчва периодично да проверяват за появата на пресечени имена в публичния репозиторий или да създадат от своето име проксита с имена, повтарящи имената на пакетите в частните репозитории, за да не могат злонамерени лица да разположат своите пакети с пресечени имена.
Източник: opennet.ru
