Атака на NPM, що дозволяє визначити наявність пакетів у приватних репозиторіях

У NPM виявлено недоробку, що дозволяє визначити існування пакетів у закритих репозиторіях. Проблема викликана різним часом реакції при запиті існуючого та неіснуючого пакета стороннім користувачем, який не має доступу до репозиторію. За відсутності доступу для будь-яких пакетів у приватних репозиторіях сервер registry.npmjs.org повертає помилку з кодом «404», але у разі існування пакета із запитаним ім'ям помилка видається із відчутною затримкою. Атакуючий може використовувати цю особливість визначення наявності пакета при доборі імен пакетів за словниками.

Визначення імен пакетів у закритих репозиторіях може знадобитися для здійснення атаки через змішування залежностей, що маніпулює перетином імен залежностей у публічних та внутрішніх репозиторіях. Знаючи, які внутрішні NPM-пакети присутні в корпоративних репозиторіях, атакуючий може розмістити пакети з тими самими іменами та новішими номерами версій у публічному репозиторії NPM. Якщо при збиранні внутрішні бібліотеки явно не прив'язані в налаштуваннях до свого репозиторію, пакетний менеджер npm вважатиме пріоритетнішим публічний репозиторій і завантажить підготовлений атакуючим пакет.

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

Джерело: opennet.ru

Додати коментар або відгук