Кто-то сказал 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 следующим текстом:
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