Вразливість у NPM, що призводить до перезапису файлів у системі

Компанія 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-пакетів, що включають символічні посилання, жорсткі посилання та абсолютні шляхи.

Джерело: opennet.ru

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