В популярный NPM-модуль внедрено вредоносное ПО, копирующее параметры аутентификации
13 июля 2018 года
Администраторы репозитория NPM уведомили пользователей о компрометации пакетов eslint-scope и eslint-config-eslint, в которых поставлялся популярный анализатор JavaScript-кода, насчитывающий более 2 млн загрузок в неделю и 59 млн суммарных загрузок. В результате получения контроля за учётными данными мэйнтейнера eslint-scope злоумышленникам удалось опубликовать обновление, содержащее троянский код.
При выполнении операции установки пакета, с сайта pastebin.com загружался и запускался скрипт, который отправлял на внешний сервер содержимое файла ~/.npmrc, включающего токен для аутентификации в NPM. Данные отправлялись на серверы учёта статистики посещений "sstatic1.histats.com" и "c.statcounter.com" в составе параметра, указанного в HTTP-заголовке "Referer" (злоумышленники могли просмотреть захваченные токены через web-интерфейсы счётчиков посещений histats.com и statcounter.com).
Взлом учётной записи разработчика был произведён из-за использования одного и того же пароля на разных сайтах, на одном из которых произошла утечка базы пользователей. Сопоставив email разработчика злоумышленники смогли воспользоваться паролем для получения доступа к NPM. Троянская вставка присутствовала в версиях eslint-scope 3.7.2 и eslint-config-eslint 5.0.2.
По предварительным сведениям с момента публикации до блокировки вредоносного обновления (c 12:49 до 17:37 MSK 12 июля) злоумышленникам удалось получить токены для доступа к учётным записям примерно 4500 разработчиков. К счастью атака была оперативно пресечена и администрация NPM заблокировала все токены аутентификации, выданные до 17:30 (MSK) 12 июля. Пользователям NPM необходимо обновить свои токены повторно выполнив процедуру аутентификации на сайте npmjs.com. Для усиления защиты своих учётных записей разработчикам модулей рекомендовано включить двухфакторную аутентификацию. В промежуток времени с момента публикации вредоносного обновления до начала блокировки токенов достоверно подтверждённых попыток использования перехваченных токенов не зафиксировано.
Предполагается, что компрометация пакета eslint-scope, как правило используемого для отладки других NPM-пакетов разработчиками, была первым этапом внедрения червя, который мог использовать захваченные токены для внедрения вредоносного кода в новые модули. С учётом разветвлённой системы зависимостей в случае успеха атака могла иметь катастрофические последствия. Например, среди пользователей eslint-scope разработчики таких популярных проектов, как Yarn (48% всех загрузок в NPM), Babel (150 млн загрузок), jQuery (65 млн загрузок), CoffeeScript (50 млн загрузок). Данные пакеты используются как зависимости в тысячах других пакетов и проектов.
По счастливому стечению обстоятельств во вредоносном коде была допущена ошибка, которая приводила к сбою установки, если при определённых условиях поток для получения ответа на запрос к pastebin.com закрывался до окончания выполнения вызова eval(). Данная особенность сразу привлекла внимание пользователей пакета, которые начали разбирать код и менее чем через час после публикации вредоносного обновления отправили уведомление разработчикам.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.