Российский программист спас сообщество JavaScript от массовых взломов
Десятки тысяч разработчиков JavaScript поставили под угрозу около половины аккаунтов в системе управления пакетами npm. Фактически это означает, что злоумышленники получили возможность внедрять вредоносный код в библиотеки и инструменты, используемые для разработки легитимных приложений.
Прямая и косвенная угрозы
По итогам изысканий российского программиста компания Npm Inc., занимающаяся развитием платформы Node.js для трансляции JavaScript в машинный код, запустила массовую смену паролей участников проекта. Накануне выяснилось, что около 52% аккаунтов в системе управления пакетами Node.js — npm — находятся под прямой или косвенной угрозой компрометации со стороны злоумышленников. Источником проблемы стала слабая защита самих аккаунтов, в частности, примитивные, интегрированные в код или ранее украденные пароли.
На данный момент Npm Inc. внедрены новые средства проверки паролей. Так что если пароль слишком слабый или совпадает с ранее утекшим, владельца попросят оперативно его сменить.
Заслуга россиянина
Российский программист, член технического комитета проекта Node.js Никита Сковорода исследовал утечки паролей к npm с мая 2017 г., хотя еще в 2015 г. обратил внимание на то, что беззаботные разработчики небрежно хранят свои пароли, оставляя их либо прямо в коде своих приложений, или в другом легкодоступном месте.
«Изначально я работал над совсем другой темой, — рассказал Сковорода. — Я хотел создать грубый сканер кода для всех пакетов npm, чтобы проверить, как часто и где используются API Node.js — для нужд самого проекта [Node.js]... Тогда же я обратил внимание на логины и пароли в самих пакетах. Я сообщил о проблеме в Npm Inc.». В ответ Npm Inc. добавили в свою платформу функцию, позволяющую выявлять логины и пароли внутри пакетов и отзывать их.
«Последняя проверка стартовала в начале мая на саммите разработчиков Node.js... в основном в свободное время, с использованием инструмента, который собирал опубликованные на GitHub регистрационные данные и автоматически сравнивал их с данными из npm», — пояснил разработчик. Впоследствии он усовершенствовал этот инструмент так, чтобы обнаруживать самые популярные пароли, такие как «123456» или «password», а затем добавил функцию сопоставления с базами паролей, ранее украденных из таких ресурсов как Adobe, Last.fm и т. д.
«Я занимался всем этим довольно неторопливо, в свободное время, пока в результате сканирования утекших паролей не обнаружил множество регистрационных данных к действующим аккаунтам [npm], — заявил Сковорода. — Изначально я ничего подобного не ожидал».
Удручающая картина
Всего Сковороде удалось найти 15,6 тыс. случаев действующих регистрационных данных для 15,5 тыс. аккаунтов. По данным разработчика, злоумышленник мог бы получить доступ на публикацию к 66,9 тыс. пакетам npm, что составляет примерно 13% всей экосистемы JavaScript npm. И это очень крупная проблема. Дело в том, что разработчики давно уже не загружают библиотеки JavaScript в свой код вручную: в основном они используют для этого npm и его систему управления зависимыми объектами. Это означает, что если разработчик загружает себе пакет A, то с ним он загружает и все зависимые объекты — пакеты B, C, D, E и так далее.
Таким образом, через зависимые объекты вредоносный код, попавший в один пакет, может распространиться на большое количество других. Тем самым, по подсчетам Сковороды, под угрозой оказываются около половины всех пакетов npm.
Дополнительные подробности
По словам Сковороды, он обнаружил среди утекших регистрационных данных 15 568 логинов и паролей, которые по-прежнему подходили к 15 495 активным аккаунтам. С большей их части (15 343) что-то публиковалось. Всего Скворода насчитал 125 665 аккаунтов в системе npm со слабыми или утекшими паролями, — 12% от общего числа учетных записей.
Среди них были 40 разработчиков, у каждого из которых насчитывалось более 10 млн скачиваний в месяц и 13 разработчиков с 50 млн скачиваний. Один разработчик с 20 млн скачиваний после принудительной смены пароля ограничился добавлением к старой комбинации восклицательного знака.
Среди уязвимых оказались аккаунты четырех разработчиков из верхней двадцатки. Один из них после принудительной смены пароля вернулся к прежнему, уже давно утекшему паролю (и снова получил принудительную смену).
1409 пользователей использовали в качестве пароля свой логин, 10% использовали пароли, которые уже применяли где-то в других местах.
«Нарушение базовых правил работы с паролями перестает быть личным делом пользователей, находящихся в тесно интегрированной системе, такой как npm, — отмечает Георгий Лагода, генеральный директор компании SEC-Consult Services. — Это тот самый случай, когда несоблюдение информационной гигиены подвергает серьезной опасности работу множества других людей. Жаль, что проблема была поднята только сейчас, определенно появилась она далеко не вчера».