TL, д-р
В период с 6 по 7 мая 2026 года один издатель npm, pelavelleбыло загружено восемь пакетов без зависимостей, имена которых соответствовали одному и тому же внутреннему шаблону: 24712-pl*.
В пакеты входили 24712-pl3469, 24712-pl4712, 24712-pl5006, 24712-plv2 и 24712-plv3. Цифровая префиксация убедительно указывает на атака, вызывающая путаницу с зависимостями npm в соответствии с внутренним пространством имен пакета или схемой идентификаторов пакетов.
Все восемь родственных пакетов уже были удалены из npm издателем в период между 2026-05-06T21:52Z и 2026-05-07T00:31ZМетаданные прямого реестра подтвердили, что архивы tar теперь возвращают HTTP-код 404.
Однако кластер по-прежнему имеет значение.
Канонический образец, 24712-pl5006:0.0.1, содержит postinstall.js скрипт, который запускается во время npm installВместо того чтобы красть общие переменные окружения, он специально ищет AWS_LAMBDA_RUNTIME_API, переменная среды, используемая средой выполнения AWS Lambda.
Если скрипт обнаружит AWS_LAMBDA_RUNTIME_APIВ этом случае вызывается конечная точка API среды выполнения Lambda:
Этот вызов пытается обработать следующее ожидающее событие вызова Lambda до того, как его сможет обработать легитимный обработчик Lambda.
Захваченное событие, включая заголовки, идентификатор запроса, контекст учетной записи и до 8 КБ тела запроса, затем отправляется на контролируемую злоумышленником конечную точку для отправки данных через скрипт. phoneHome() функции.
Система раннего предупреждения о вредоносных программах (MEW) компании Xygeni классифицировала канонический образец как предположительно вредоносный с оценкой . 91.3/100.
Мы отслеживаем это как атака, вызывающая путаницу с зависимостями npm с поведением, приводящим к перехвату выполнения AWS Lambda.
Кластер: восемь пакетов, один издатель
Учётная запись издателя pelavelle использовал адрес электронной почты:
У аккаунта был неподтвержденный адрес электронной почты, нет SCM проверка и низкий рейтинг репутации — 5.
Издатель выпустил восемь связанных между собой пакетов в течение короткого промежутка времени между 20:45 и 22:36 06.05.2026. Названия всех пакетов имеют одинаковую структуру:
Этот шаблон является ключевым сигналом. Он не похож на общедоступную утилиту для разработчиков. Вместо этого он выглядит как внутренняя схема именования пакетов.
| # | Упаковка | Вредоносная версия | Создано, UTC | Неопубликовано, UTC | Полезная нагрузка подтверждена | Установите крюк |
|---|---|---|---|---|---|---|
| 1 | космос-исследователь | 1.1.3 | 2026-05-01T18:26Z | 2026-05-01T19:01Z | Предположительно, тот же издатель/кластер | предварительная установка, предполагается |
| 2 | signalsdk-web | 1.0.0, 10.0.0 | 2026-05-04T13:57Z | 2026-05-04T18:51Z | Предполагаемые | предварительная установка, предполагается |
| 3 | ms.analytics-web | 99.0.0, 99.9.13 | 2026-05-04T18:47Z | 2026-05-05T10:07Z | Предполагаемые | предварительная установка, предполагается |
| 4 | иконки.сгенерированные | 99.9.13 | 2026-05-05T10:02Z | 2026-05-05T12:57Z | Предполагаемые | предварительная установка, предполагается |
| 5 | отслеживание задержки | 99.9.0 | 2026-05-05T11:57Z | 2026-05-05T12:57Z | Предполагаемые | предварительная установка, предполагается |
| 6 | latency-tracking-internal | Версии удалены из записи реестра | 2026-05-06T06:02Z | 2026-05-06T08:35Z | Предполагаемые | предварительная установка, предполагается |
| 7 | carboniteapp | 99.9.0 | 2026-05-06T05:49Z | 2026-05-06T08:35Z | Да, полный поток кода сканера. | preinstall: node index.js |
| 8 | карбонит-внутренний | 99.9.0 | 2026-05-06T06:14Z | 2026-05-06T08:36Z | Да, полный поток кода сканера. | preinstall: node index.js |
Общее количество версий в кластере: 19 кортежей версия-пакет.
Канонический образец, 24712-pl5006:0.0.1Опубликовано 06.05.2026 в 22:36:34 и отсканировано пользователем МЭВ Ксигени pipeline перед событием снятия публикации.
В нем содержалось четыре файла, в том числе package/postinstall.js, с общим объемом исходного кода 3,335 байт.
Канонический commit Хэш был:
Почему важен шаблон имени
Названия пакетов являются наиболее убедительным индикатором намерений.
Все они начинаются с одного и того же префикса:
Затем они добавляют числовые или иные суффиксы:
Это не похоже на обычную систему именования в публичных проектах npm. Похоже на внутренний префикс пространства имен или внутреннюю схему идентификаторов пакетов.
Это делает кластер соответствующим атака, вызывающая путаницу с зависимостями npm.
При атаке, основанной на путанице зависимостей, злоумышленник публикует публичный пакет с именем, которое совпадает или, по-видимому, совпадает с внутренней зависимостью. Если менеджер пакетов или среда сборки целевой системы разрешает публичный пакет вместо частного, то контролируемый злоумышленником код выполняется внутри целевой среды.
OWASP описывает путаницу зависимостей как вектор атаки, который обманывает менеджеры пакетов и прокси-серверы, заставляя их загружать вредоносный общедоступный пакет вместо нужного внутреннего пакета с тем же именем.
Для более подробного понимания принципов работы этого типа атак, ознакомьтесь с руководством Xygeni. Отсутствие фиксации версий и путаница с зависимостями и наш пост на выявление и управление атаками, связанными с зависимостями программного обеспечения.
Что происходит во время установки?
В каноническом пакете объявляется postinstall крюк:
postinstall Lifecycle является частью системы скриптов пакетов npm. В документации npm поясняется, что пакеты могут определять скрипты жизненного цикла в package.jsonвключая встроенные события жизненного цикла установки.
|| true это важно.
Он подавляет ошибки, поэтому установка всё равно проходит успешно, даже если попытка взлома не удаётся. Это помогает избежать сбоев в сборке пакета и снижает вероятность того, что разработчики или системы CI обнаружат вредоносное поведение из-за неудачной установки.
Полезная нагрузка работает во время npm installИмпорт для разработчиков не требуется. Путь к приложению не должен вызывать этот пакет.
Самой установки вполне достаточно.
Поведение полезной нагрузки: Перехват среды выполнения Lambda
postinstall.js Скрипт выполняет целевую последовательность действий.
Сначала он считывает окружение родительского процесса из Linux. /proc:
Затем он извлекает конечную точку среды выполнения AWS Lambda:
Если API среды выполнения найден, скрипт сохраняет его:
Затем он посылает первый сигнал. phoneHome():
Первый сигнал раскрывает адрес конечной точки API среды выполнения Lambda.
Затем скрипт анализирует хост и порт API среды выполнения:
Наконец, вызывается путь к API среды выполнения AWS Lambda, используемый для получения следующего вызова:
В этом и заключается суть атаки.
Скрипт пытается обработать следующее событие вызова Lambda до того, как его сможет обработать легитимный обработчик Lambda. В руководстве AWS по пользовательским средам выполнения шаг «получить событие» также описывается как вызов API следующего вызова.
Что вывозится
Если скрипт перехватывает вызов, он отправляет результат на контролируемый злоумышленником конечный пункт для отправки данных.
К числу экспортируемых месторождений относятся:
| Поиск | Смысл |
|---|---|
step | Этап выполнения, например: waiting, next_error или captured |
runtimeApi | Конечная точка API среды выполнения Lambda |
accountSid | Контекст учетной записи AWS, полученный в результате захвата |
requestId | Идентификатор запроса на вызов функции Lambda |
isOwnAccount | Логическое сравнение со значением учетной записи, заданным в скрипте. |
statusCode | статус ответа API во время выполнения |
headers | Заголовки ответа на вызов |
body | Захваченное тело вызова, разрезанное на 8,000 символов. |
Ключевой звонок для эвакуации — это... phoneHome(data) функция, которая кодирует данные в формате JSON и отправляет их через HTTP POST.
Точный URL-адрес назначения для отправки данных на сервер не был сохранен в имеющихся усеченных данных. Поэтому npm должен сохранять неопубликованный архив внутри себя, чтобы можно было извлечь адрес хоста C2 до завершения удаления.
Почему это опасно
Это не универсальный npm-маяк.
Полезная нагрузка разработана с учетом следующих принципов: AWS Lambda модель исполнения.
Если уязвимый пакет установлен внутри среды выполнения Lambda, например, во время сборки образа развертывания, установки слоя Lambda или процесса инициализации, эта среда может стать уязвимой. AWS_LAMBDA_RUNTIME_API.
Получив это значение, скрипт может вызвать:
Эта конечная точка возвращает следующее ожидающее событие вызова.
В результате злоумышленник может получить доступ к следующим данным:
- Запросы к органам власти
- Заголовки
- Идентификаторы запросов
- Контекст учетной записи AWS
- Подписанные данные запроса
- PII клиента
- данные событий S3
- Полезные нагрузки, специфичные для конкретного приложения
- Внутренний контекст обслуживания
Обработчик, которому принадлежит дело, может так и не увидеть обработанное событие.
Это превращает скрипт `npm install` в примитив перехвата событий Lambda.
Даже если пакет никогда не попадёт в реальную среду Lambda, его поведение всё равно может привести к утечке полезной информации из систем разработки или CI. /proc/<pid>/environ может раскрывать переменные среды, присутствующие в родительских процессах, которые могут включать ключи AWS, URL-адреса баз данных, токены CI или учетные данные развертывания.
Именно поэтому сканирование зависимостей не может ограничиваться известными уязвимостями CVE. Командам также необходимы обнаружение вредоносных пакетов, анализ скриптов установки и обеспечение соблюдения политик реестра. Для получения дополнительной информации см. Почему сканирование зависимостей важно для команд DevOps и Защита от вредоносных программ: почему антивирус не может остановить атаки на цепочки поставок.
Классификация Xygeni MEW
Компания Xygeni MEW провела сканирование канонического образца. 24712-pl5006:0.0.1 перед событием снятия публикации.
Сканер выдал следующий результат:
В число доказательств вошли три критических и один критических пункта, подтверждающих перехват потока данных в среде выполнения Lambda.
| Строгость | Доказательства | Смысл |
|---|---|---|
| критический | /proc/<pid>/environ читать | Считывает окружение родительского процесса |
| критический | AWS_LAMBDA_RUNTIME_API добыча | Целевая конечная точка среды выполнения Lambda |
| критический | /runtime/invocation/next запросить | Попытки обработать реальное событие вызова функции Lambda. |
| Высокий | postinstall скрипт | Выполняется во время выполнения команды npm install. |
Данное поведение носит сугубо специфический и весьма существенный характер. Пакету не требуются широкие возможности вредоносного ПО, поскольку конечная точка среды выполнения Lambda уже является мощной целью.
Xygeni MEW разработан именно для таких случаев: обнаружения подозрительного и вредоносного поведения пакетов до того, как это приведет к инциденту в системе. Для более подробного ознакомления с текущими угрозами npm и PyPI см. Более подробный обзор атак на цепочки поставок программного обеспечения в 2025 году.
Почему важна модель самоотмены публикации
Все восемь издательских пакетов были сняты с публикации в короткий промежуток времени.
В данном контексте такое поведение вызывает подозрение.
Кластер появлялся, запускался, если его выбирал уязвимый путь разрешения зависимостей, а затем исчезал. Это соответствует действиям злоумышленника по устранению последствий после успешного или неудачного подтверждения концепции, или после того, как целевая организация обнаружила проблему.
Скрытие публикации создает пробел в видимости для защитников.
В общедоступных данных npm могут отсутствовать архивы tar. Некоторые версии пакетов невозможно загрузить повторно. Однако в затронутых средах могут по-прежнему храниться кэшированные копии, ссылки на файлы блокировки, журналы CI или артефакты менеджера пакетов.
Вот почему сохранение данных на стороне реестра имеет значение.
npm должен сохранять неопубликованные архивы tar достаточно долго, чтобы извлечь точный URL-адрес для отправки запроса на сервер, подтвердить идентичность сопутствующих файлов и обеспечить реагирование на инциденты.
Индикаторы компрометации и обнаружения
Издатель и аккаунт
| Поиск | Значение |
|---|---|
| имя пользователя npm | pelavelle |
| npm publisher email | pelavelle@clovercode.com |
| Адрес электронной почты подтвержден | Нет |
| SCM проверено | Нет |
| Рейтинг репутации издателя | 5 |
| шаблон именования пакетов | ^24712-pl[0-9a-z]+$ |
| Внутренний префикс пространства имен | 24712-pl |
Названия затронутых пакетов
Канонический образец
| Поиск | Значение |
|---|---|
| Упаковка | 24712-pl5006 |
| Версия | 0.0.1 |
| опубликованный | 2026-05-06T22:36:34Z |
| Commit хэш | 83e0efbfd110abb2398a06196fb698565a3f6cc6 |
| UUID сканирования Xygeni | f80e4244-86d2-4a58-be59-7c56988a0f9f |
| Счет | 91.3 / 100 |
| Вердикт | probablyMalicious |
Установите крюк
Индикаторы выполнения лямбда-функций
Поля эксфильтрованного полезного груза
Текст текста разбит на 8,000 символов.
Заметки об обнаружении
Это можно обнаружить с помощью нескольких правил. атака, вызывающая путаницу с зависимостями npm и вероятные варианты.
Во-первых, отметьте скрипты npm install, которые считывают окружение родительского процесса из /proc:
Такое поведение редко бывает допустимым для зависимостей npm во время установки.
Во-вторых, следует выдавать предупреждения о скриптах установки пакетов, которые ссылаются на:
Эта переменная окружения не должна использоваться сторонними npm-пакетами во время установки.
В-третьих, заблокируйте или проверьте скрипты установки, которые вызывают:
Это конечная точка API среды выполнения AWS Lambda для получения следующего вызова. Скрипт установки зависимостей не имеет законных оснований для её использования.
В-четвертых, найдите в файлах блокировки ссылки на имена затронутых пакетов:
Любое совпадение должно инициировать проверку на наличие ошибок, связанных с зависимостями.
В-пятых, предупреждение о регулярном выражении имени пакета:
особенно когда издатель является публичным, имеет низкую репутацию, не проверен или находится вне ожидаемого внутреннего реестра.
Наконец, добавьте CI/CD guardrails Это особенно важно для скриптов установки. Скрипты жизненного цикла npm могут выполняться во время установки пакета, до того, как разработчики что-либо импортируют. Подробнее об этом можно узнать здесь. CI/CD Схемы обнаружения см. в Xygeni. 10 главных признаков компрометации CI/CD Pipelines и Безопасность. Guardrails для CI/CD Pipelines.
Рекомендуемые действия в реестре
Информация об этом кластере уже была скрыта на момент составления отчета, но скрытие не устраняет риск.
Рекомендуемые действия на стороне npm:
- Уточните, были ли отмены публикаций инициированы злоумышленниками в рамках очистки, а не являлись законными действиями сопровождающего проекта.
- Приостановить или заблокировать аккаунт издателя.
pelavelle. - Добавить
pelavelle@clovercode.comназвания пакетов и регулярное выражение для названий пакетов в списки блокировки npm по злоупотреблениям и в цепочке поставок. - Сохраните неопубликованные архивы в хранилище для проведения экспертизы.
- Извлеките точный
phoneHome()URL-адрес назначения из сохраненных архивов пакетов. - Убедитесь, что все соседние пакеты содержат одинаковую полезную нагрузку.
- Уведомите затронутые организации, если данные телеметрии при загрузке или установке пакета указывают на уязвимость.
Контрольный список для реагирования на компромисс
Если какой-либо затронутый пакет был обнаружен в файлах блокировки, журналах CI, кэшах пакетов, слоях Lambda, образах развертывания или артефактах сборки, рассматривайте это как потенциальное событие выполнения, приводящее к путанице зависимостей.
Рекомендуемый ответ:
- Укажите место установки пакета: локальная рабочая станция, средство запуска CI, сборка слоя Lambda, образ развертывания или среда выполнения.
- Сохраняйте файлы блокировок, кэш npm, журналы сборки, артефакты развертывания и слои образов контейнеров.
- Проверьте, производилась ли установка в среде, где
AWS_LAMBDA_RUNTIME_APIбыл установлен. - Просмотрите исходящие HTTP-журналы на предмет неизвестных событий.
phoneHome()места назначения в течение периода установки. - Проверяйте журналы вызовов Lambda на предмет пропущенных, отсутствующих или аномальных событий.
- Необходимо регулярно обновлять секретные данные, доступные в среде установки, особенно ключи AWS, токены CI, учетные данные развертывания и URL-адреса баз данных.
- Проверьте слои Lambda и образы развертывания на наличие кэшированных копий пакета.
- Обеспечить привязку внутренних префиксов пакетов к частному реестру.
- Заблокировать публичное разрешение имен пакетов npm для имен, которые выглядят как внутренние имена пакетов.
- Добавить guardrails для
preinstall,installиpostinstallскриптов.
Как препарат Xygeni помогает выявить это на ранней стадии
Эта кампания как раз относится к тому типу случаев, когда командам по обеспечению безопасности требуется нечто большее, чем просто традиционное сканирование уязвимостей.
Там может быть нет CVEВозможно, не существует известной уязвимой версии. Возможно, после очистки, проведенной издателем, не останется долгоживущего пакета для проверки.
Вместо этого командам необходима информация о поведении пакетов в режиме реального времени.
Xygeni помогает, сочетая в себе:
- Раннее обнаружение вредоносных программ в общедоступных реестрах.
- Выявление подозрительных зависимостей, таких как путаница зависимостей и тайпсквоттинг.
- Анализ установочного скрипта для
preinstall,installиpostinstallповедения. - CI/CD guardrails блокировать опасные пакеты до того, как они попадут в среды сборки или развертывания.
- Прозрачность цепочки поставок программного обеспечения по всем зависимостям, pipelineи артефакты.
- Применение политик к внутренним именам пакетов и ненадежным публичным пакетам.
Это важно, потому что влияние атака, вызывающая путаницу с зависимостями npm Это решение не ограничивается ноутбуками разработчиков. Оно может использоваться для доступа к средствам непрерывной интеграции, образам сборки, слоям Lambda, контейнерам развертывания и средам, смежным с средой выполнения.
Для получения более подробной информации о безопасности приложений и цепочке поставок см. Вне SCA: Обеспечение безопасности вашей цепочки поставок программного обеспечения и Software Supply Chain Security Автоматизация .
Что должны усвоить защитники
Эта кампания демонстрирует, как путаница с зависимостями может выходить за рамки простых маяков подтверждения выполнения.
Полезная нагрузка не просто подтверждает это. npm install Запущено. Программа пытается взаимодействовать с API среды выполнения AWS Lambda и зафиксировать реальное событие вызова.
Это существенная эскалация.
Для команд, использующих бессерверные вычисления, разрешение зависимостей является частью модели угроз во время выполнения. Общедоступный пакет npm с именем, похожим на внутреннее имя, может стать путем к контексту выполнения Lambda, данным запроса и метаданным облачной учетной записи.
Главный вывод очевиден: внутренние префиксы пакетов должны быть защищены, иметь ограниченную область действия и привязаны к доверенным реестрам. Скрипты установки следует рассматривать как поверхность атаки в виде исполняемых файлов, особенно в CI/CDсборка контейнеров, слои Lambda и развертывание. pipelines.
CISВ рекомендациях компании A по управлению цепочкой поставок программного обеспечения подчеркивается необходимость защиты программного обеспечения, применения проверок безопасности и непрерывного реагирования на уязвимости на протяжении всего процесса разработки. В данном случае это означает рассмотрение разрешения пакетов, скриптов пакетов и бессерверных сред сборки как первоклассных средств контроля безопасности.
Сообщение отправлено в npm для обеспечения контроля на уровне учетных записей, внесения в черный список и сохранения неопубликованных архивов tarball.





