Фальшивые coding interviews стали проблемой безопасности разработчиков
Свежий кейс с malware-laced take-home assignment показывает, почему чужой код нельзя запускать на машине с рабочими токенами.
Фальшивое интервью сегодня может выглядеть как обычная работа разработчика. Именно поэтому свежий кейс важен.
Сообщение от рекрутера в LinkedIn, удалённая роль, хорошая оплата, затем take-home assignment в ZIP-архиве. Внутри вроде бы обычный backend-проект. Зависимости не выглядят откровенно вредоносными. Кандидат торопится, открывает проект, запускает установку, может сделать commit перед отправкой решения. В разборе Citizen Dot именно этот привычный ритм и оказался ловушкой.

В архиве лежала готовая .git-директория с hooks. pre-commit выбирал payload под Linux, macOS или Windows и запускал удалённую команду без заметного вывода. Дальше цепочка скачивала дополнительные скрипты, ставила Node.js dependencies и запускала обфусцированный parser. Набор пакетов выглядел подозрительно для theft of credentials, tokens and wallets.
HN-тред набрал около 408 points и 112 comments. Важнее цифр — практический тон обсуждения: disposable VM, devcontainers, Git hooks, VS Code Workspace Trust, проверка рекрутера через официальный канал. Один участник написал, что после статьи понял: похожая схема уже сработала против него после вполне убедительного Google Meet с человеком, выдававшим себя за CTO.
Это не один странный архив
Proofpoint, The Hacker News, DomainTools и OpenSourceMalware весь год описывали recruitment-themed campaigns против разработчиков. В отчётах встречаются Contagious Interview, Famous Chollima, Void Dokkaebi, UNK_DeadDrop, BeaverTail, InvisibleFerret, OtterCookie. Меняются названия и детали, но схема похожа: fake role, GitHub repo или ZIP, developer tooling as execution surface, затем theft of credentials, wallets, tokens or source access.
Нельзя без подтверждения приписывать свежий личный кейс конкретной группе. Но его точно стоит рассматривать как часть зрелого класса атак. Машина разработчика часто хранит SSH keys, GitHub tokens, npm/PyPI credentials, cloud sessions, .env files, browser sessions, VPN access and source code. Для maintainer популярного пакета один украденный токен может стать supply-chain incident.
Где именно риск
Проблема не в Git как таковом. Обычный git clone не переносит remote hooks автоматически в локальную .git/hooks. Риск резко выше, когда кандидат получает ZIP с уже готовой .git-директорией, когда в проекте есть core.hooksPath, package scripts, .vscode/tasks.json, launch configs, devcontainer setup или инструкции вроде «сделайте commit / запустите setup / откройте workspace and trust it».
Все эти механизмы полезны в доверенном проекте. В чужом тестовом задании они становятся execution surface. Поэтому первый принцип простой: код от незнакомого рекрутера — untrusted code, пока не доказано обратное.
Практическая защита
Распакуйте задание во временную директорию и посмотрите hidden files: .git, .git/hooks, .vscode, .devcontainer, package.json, pyproject.toml, Makefile, Dockerfile, install scripts. Ищите postinstall, hooks, tasks, remote URLs, raw IP addresses, encoded blobs and suspicious launch commands. Не нужно полностью реверсить malware, чтобы решить: на основной машине это запускать нельзя.
Работайте в disposable VM, cloud VM или devcontainer, который вы создали сами. Не монтируйте home directory, SSH keys, password manager, browser profile, GitHub/npm/PyPI/cloud tokens и реальные .env. Контейнер с mounted host filesystem или Docker socket — не песочница. VM, где вы залогинились в основной браузер и менеджер паролей, тоже слабая защита.
Если уже запускали подозрительное задание: остановитесь, не продолжайте анализ на той же машине, отключите сеть при явном риске, сохраните evidence для security team, с чистого устройства revoke sessions and rotate credentials. Особое внимание — SSH keys, GitHub tokens, package registry tokens, cloud keys, wallets, startup items and browser extensions.
Что должны изменить компании
Работодатели и рекрутеры не должны требовать «скачай приватный архив и запусти». Безопаснее давать spec, чистый public template, официальный домен, проверяемую страницу вакансии и понятный канал подтверждения рекрутера. Кандидат не должен выглядеть подозрительным только потому, что запускает задание в isolated environment.
Лучшая защита здесь не паранойя. Это новая норма: чужой код живёт в disposable environment, а не на ноутбуке с ключами от работы.
Comments
Sign in to comment.
No comments yet.