← На главную

Разработчик едва не подцепил RAT PinpinRAT через тестовое задание

27.06.2026 02:41 · hackernews

На прошлой неделе автор статьи чуть не попался на удочку мошенников. Ему пришло письмо от вымышленного венчурного фонда Lua Ventures с предложением о работе. После короткого созвона с человеком с немецким акцентом автору прислали «тестовое задание» — репозиторий на TypeScript под названием Ticket Harbor. Внутри были инструкции запустить сборку и проверить типы. Это и была ловушка.

К счастью, автор проявил осторожность и скормил репозиторий Claude, который быстро нашёл аномалии. В файле typescript+5.9.2.patch оказался вредоносный код. Он использовал base64-строку с XOR-шифрованием (ключ 73), которая декодировалась и запускалась через new Function(...). Это срабатывало каждый раз, когда выполнялся tsc или импортировался typescript.js.

Цепочка атаки была хитрой. Четыре postinstall-хука запускали patch-package, а заодно прятали патчи от git status. После инжекции в TypeScript загрузчик извлекал скрытый кусок из файла operators/3.png, запускал встроенный WASM-модуль и порождал фоновый процесс Node.js со вторым этапом весом 1.68 MB. Троян умел чистить за собой следы — переписывал патчи, удалял временные каталоги.

Настоящая начинка — PinpinRAT. Это полноценный RAT, собранный профессионалом. Он генерирует RSA-2048 и AES-256 сессионный ключ, шифрует весь трафик AES-256-CBC с HMAC-SHA256. При запуске собирает и отсылает фингерпринт: IP, имя пользователя, хост, OS, версию Node, PID. Команды: чтение переменных окружения, загрузка/выгрузка файлов, запуск процессов, работа с файловой системой, DNS-резолвинг и самоликвидация.

C2-сервер располагался по адресу 89.124.107.161:80. На Windows маскировался под задачу PinpinWrappedJs, на macOS — под процесс com.apple.WebKit.Networking. Среди индикаторов — строки 12ff4b51 и ticket-harbor-tsc-shim-anchor в typescript.js, артефакты в ~/Library/Caches/runtime-cache/.cache-<hex> и переменные окружения NODT_PAYLOAD_PATH и NODT_PAYLOAD_ARGS. Вирус не детектится на VirusTotal.

Автор признаётся: если бы это был Rust-репозиторий с ловушкой в build.rs, он бы, скорее всего, повёлся. Он уже связался с канадскими агентствами (CCCS).

Читать оригинал →