avatar
ESCalator
@ptescalator
30.06.2026 08:20
Кто-то сказал sandbox?

В очередной раз наблюдаем, как злоумышленники проводят неэтичные ресерчи.

Дано:
Исследователь по безопасности Nicholas Curran

Он опубликовал пакеты с интересными названиями:
2 пакета npm-sandbox-ping-[4 символа]
8 пакетов npm-sandbox-research-[4 символа]
postinstall-logger-7x9z
pkg-telemetry-r4f9
runtime-metrics-w7k2
event-metrics-q3x7
build-tracker-n5p1

Согласно описанию (скриншот 1), эти пакеты созданы в рамках багбаунти-программы.

Автор заявляет, что:
emojiПакеты безопасны.
emojiВсе чувствительные данные перед отправкой хэшируются — не происходит никакого разглашения секретов.
emojiПакеты не выполняют закрепления в системе, перемещения в сети и деструктивных действий.
emojiЦель исследования: изучить, изолирует ли npm-песочница небезопасные установочные скрипты.

Ресерч безопасности песочниц? Такое мы любим. Давайте посмотрим, как это реализовано.

Нагрузка стартует дважды: до и после установки пакета (скриншот 2). За Windows-логику отвечает beaconXX.js, все остальные платформы обрабатываются beacon_linux.js. Даже macOS.

Логика под Windows

beaconXX.js (скриншот 3):
emoji Эксплуатирует известный обход UAC через fodhelper.exe. Для этого, помимо запуска файла, необходимо внести изменения в реестр Windows.
emoji Дропает PowerShell-скрипт в %TEMP% и запускает его с повышенными привилегиями.

PowerShell-скрипт:
emoji Удаляет внесенные в реестр изменения.
emoji Собирает:
артефакты, специфичные для изучаемой песочницы, с диска D, в том числе файл findings.xml;
список секретов из Credential Manager;
npm config list — сюда попадают в том числе токены аутентификации для учетной записи npm;
все переменные окружения.
emoji Заметает следы, перезаписывая findings.xml следующим текстом:
<ArrayOfTaskFinding></ArrayOfTaskFinding>

emoji Собранные данные кодирует в base64 и просто отправляет на управляющий сервер... без хэширования, о котором заявлено в README.md
emoji В вечном цикле каждые 5 секунд обращается к управляющему серверу за командами на исполнение.

Учитывая, как код пытается вмешаться в работу песочницы, можно предположить, что это кастомная песочница с агентом наподобие Cuckoo Sandbox.

Логика под non-Windows

beacon_linux.js (скриншот 4):
emoji Собирает:
список имён всех переменных окружения;
значения интересных переменных окружения, связанных с GitHub, NPM, раннерами, пользователем;
список сетевых интерфейсов.
emoji Проверяет возможности для побега из контейнера, собирая:
содержимое /proc/1/cgroup (информация об ограничениях контейнера);
команду запуска процесса с PID 1;
список примонтированных томов.
набор capabilities своего процесса;
наличие /var/run/docker.sock (позволяет управлять Docker с потенциалом полностью захватить устройство);
доступ к /proc/sched_debug (позволяет разведать процессы, запущенные на хосте).
emoji Собирает артефакты, связанные с CI/CD: список файлов текущего проекта и /home/runner/work, логи GitHub.
emoji Отправляет отчет на управляющий сервер.

Заключение

Пакеты не соответствуют благим целям, о которых нам заявляли в README.md, — поэтому мы зарепортили админам NPM об этом недоразумении.

Странно видеть такое поведение от багхантера, имеющего учетную запись на HackerOne с 2017

Хотите проверить свои проекты на наличие вредоносных внешних зависимостей? Попробуйте фиды для безопасной разработки из PT Fusion.


#ti #scs #npm
@ptescalator
🔥 14
9
👍 7
1 33 3.2K

Обсуждение 1

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram

ESCalator

8K
Tips and tricks от команды экспертного центра безопасности Positive Technologies (PT ESC)
Открыть в Telegram