Кто-то сказал 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.
Логика под WindowsbeaconXX.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-Windowsbeacon_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