Никита Сковорода, входящий в управляющий технический комитет проекта Node.js, опубликовал результаты анализа надёжности паролей для доступа к учётным записям в репозитории NPM. Результат оказался более чем печальным — в ходе проверки удалось получить доступ к 12% аккаунтов (13% пакетов) из-за использования в них предсказуемых и тривиальных паролей, таких как «123456» Среди подобных учётных записей есть и популярные модули, которые находятся в зависимостях у других пакетов. С учётом загрузки других модулей по цепочке зависимостей, компрометация ненадёжных учётных записей может поразить в сумме до 52% от всех модулей в NPM.

Всего удалось получить доступ к 15495 учётным записям, используемым для управления 66876 пакетами. В том числе был получен доступ к 4 учётным записям пользователей из Top20 самых популярных пакетов. Также был получен контроль над 13 пользователями, пакеты которых загружают более 50 млн раз в месяц, 40 пользователями с более 10 млн загрузок в месяц и 282 с более 1 млн загрузок в месяц. Компания NPM Inc приняла исследование во внимание и инициировала процесс смены паролей для ненадёжных учётных записей. Для усиления защиты NPM запрещено использование словарных и коротких паролей, скоро будет ограничена поддержка «HTTP Basic auth», в более отдалённых планах внедрение двухфакторной аутентификации.

Контроль над 2545 учётными записями (5470 пакетов) был получен в ходе проведения Bruteforce-атаки по подбору типовых паролей. Данные об 12150 учётных записях (57112 пакетов) были получены путём сопоставления сведений из крупных публичных утечек баз паролей (когда пользователь использовал идентичные пароли на NPM и взломанных сайтах, базы паролей которых были выложены в открытый доступ). Допуск к 732 учётным записям (4786 пакетов) удалось получить путём варьирования пароля из публичных утечек (например, добавление цифр, замена имени на npm и т.п.). Контроль над оставшимися 120 проблемными учётными записями (582 пакета) был получен через поиск утечек параметров входа в файлах, опубликованных на GitHub (например, вместе с другими файлами загружены .npmrc, config.json, .gitconfig и т.п.).

Некоторые интересные факты:

  • В учётной записи для доступа к модулю koa, который в прошлом месяце был загружен 300 тысяч раз, использовался пароль «password»;
  • Один из пользователей, контролирующий более 20 млн загрузок в месяц, в ответ на отзыв скомпрометированного пароля, установил в качестве нового пароля содержимое старого, добавив к нему символ «!»;
  • Пользователь, входящий в top-20, после сброса скомпрометированного пароля опять вернул свой старый пароль через некоторое время;
  • У 662 пользователей был установлен пароль «123456», у 168 — «123», у 115 — «password»;
  • 1409 пользователей (1%) указали в качестве пароля свой логин;
  • После сброса паролей 9.7% пользователей сразу вернули свой старый заведомо скомпрометированный пароль, а 0.6% вернули старый пароль, но внеся в него незначительное изменение;
  • Трафик всех пакетов, к которым был получен доступ в ходе исследования, составляет почти два миллиарда (1 946 302 172) загрузок в месяц, что примерно 20% от общего объёма загрузок.