Кто-то сказал sandbox? 👀 В очередной раз наблюдаем, как злоумышленники проводят неэтичные ресерчи. Дано: Исс…

ESCalator (@ptescalator)

Кто-то сказал 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), эти пакеты созданы в рамках багбаунти-программы.

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

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

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

Логика под Windows

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

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

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

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

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

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

Заключение

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

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

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


#ti #scs #npm
@ptescalator
🔥149👍7
Tips and tricks от команды экспертного центра безопасности…