Он проверил тестовое задание командой tree -a. Внутри нашлась скрытая .git-папка, набитая малварью

Рекрутёр в LinkedIn предлагал 10–15 тысяч долларов в месяц за удалённую Python-роль. Тестовое пришло архивом. Привычка запускать `tree -a` перед открытием незнакомого репозитория вскрыла директорию `.git` с pre-commit-хуком, который тихо тянул трёхэтапную полезную нагрузку с голого IP-адреса.

Вкратце

Фальшивый рекрутёр Y Combinator прислал тестовое на Python со скрытым Git-хуком pre-commit, привязанным к удалённому серверу — в момент запуска `git commit` хук определял вашу ОС и тихо скачивал второй этап.

Атакующий склонировал настоящий, безобидный FastAPI-проект с GitHub и просто подменил папку `.git` на вредоносную, добавив каждой жертве уникальный идентификатор полезной нагрузки.

Финальный скрипт подтягивал `hardhat` — набор инструментов для разработки под Ethereum. Цель — не кража паролей, а крипто-кошельки.

Предложение работы с ловушкой внутри тестового

Скриншот из расследования фальшивого собеседования
Скриншот из расследования фальшивого собеседования

Рекрутёр написал в LinkedIn с предложением, рассчитанным на срочность: Python-разработчик в стартап якобы из Y Combinator, удалённо, контракт с перспективой найма, «10–15 тысяч долларов в месяц». Задание пришло через Google Drive: zip-архив и PDF с описанием: улучшить архитектуру существующего FastAPI-бэкенда. Ни само предложение, ни его упаковка не выглядели необычно для процесса найма в стартап 2026 года.

Выдала атаку привычка, а не подозрительность. Перед открытием любого незнакомого кода автор запускает tree -a, чтобы увидеть скрытые файлы, и в репозитории с заданием обнаружилась папка .git с уже настроенными Git-хуками. Обычный проект так не поставляется: хуки — это локальный инструментарий разработчика, а не то, что заранее вшивают в тестовое для незнакомца.

Три этапа в одном коммите от выполнения

Внутри хука pre-commit сидела логика определения ОС: в момент, когда жертва запускала git commit над проектом (самое естественное первое действие на любом тестовом задании) хук тихо определял, macOS перед ним, Linux или Windows, а затем через curl или wget забирал удалённую нагрузку с 45.61.164.38:5777, перенаправляя весь вывод в /dev/null, чтобы не оставить следов.

Атака разворачивалась в три этапа. Сначала хук скачивал файл tokenlinux.npl, переименовывал его в shell-скрипт и запускал в фоне через nohup без вывода. Тот скрипт устанавливал Node.js, затем подтягивал package.json и обфусцированный parser.js. Именно в сильно обфусцированном parser.js и находилась вредоносная логика. Список зависимостей в package.json рассказывал настоящую историю: доступ к буферу обмена, работа с файловой системой, криптографические библиотеки и, что важнее всего, hardhat: среда разработки смарт-контрактов Ethereum, которой нечего делать в бэкенд-тестовом для собеседования.

Обфусцированная нагрузка parser.js, найденная в фальшивом задании
Обфусцированная нагрузка parser.js, найденная в фальшивом задании
Целью были не исходники и не SSH-ключи. Целью были крипто-кошельки и браузерные расширения.

Не разовая акция, а шаблонная операция

Сам базовый репозиторий тоже не был оригинальным: атакующие просто форкнули настоящий, никак не связанный с ними FastAPI-проект разработчика по имени Bharati Gogoi с GitHub и привили к нему вредоносную папку .git. Каждая жертва получала нагрузку с уникальным параметром id, а значит, кампания шла в промышленном масштабе с индивидуальной настройкой под цель, а не как единичная приманка ручной работы. Некоторые варианты дополнительно несли папку .vscode, настроенную так, что заражение запускалось прямо при открытии проекта в VS Code, коммит даже не требовался.

Быстрое сканирование сервера атакующих через Nmap выявило нечто почти неуместное рядом с грубоватым фасадом социальной инженерии: на порту 22 крутился OpenSSH 9.6p1 на Ubuntu: свежий релиз без известных эксплуатируемых уязвимостей, свидетельство настоящей операционной дисциплины за в остальном неизощрённым механизмом доставки.

На Hacker News реакция раскололась между сдержанным уважением и дежавю. «Полагаю, такие вещи будут случаться всё чаще», написал один комментатор. «Видно, что эти ребята хорошо сделали домашнюю работу. Мерзко, но я вынужден уважать их навыки». Другой сослался на почти идентичную кампанию, попавшую на первую полосу месяцем раньше: фальшивый рекрутёр, фальшивое тестовое, скрытый Git-хук, удалённая нагрузка. Схема не нова: новым стало то, что сам процесс собеседования, вещь, которой каждый ищущий работу разработчик приучен безоговорочно доверять, теперь стал жизнеспособной поверхностью атаки в промышленном масштабе.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 4 из 18 Читать дальше
🚀Tech

Reddit назвал old.reddit.com угрозой безопасности. Логи браузера разработчика рассказали другую историю

Reddit закрыл old.reddit.com логин-стеной, сославшись на безопасность. Разработчик посчитал цифры: старый интерфейс грузится за 2 секунды, делая 33 запроса и передавая 1 МБ; новый — 3 секунды, 112 запросов и в пять раз больше данных, при этом каждые полсекунды стучится на серверы Reddit.

★ 371 · 💬 377 · cole-k.com · 4 мин