В популярный NPM-модуль внедрено вредоносное ПО, копирующее параметры аутентификации

Администраторы репозитория 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(). Данная особенность сразу привлекла внимание пользователей пакета, которые начали разбирать код и менее чем через час после публикации вредоносного обновления отправили уведомление разработчикам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.