
Entrevista de emprego Python escondia malware em projeto para candidato
O golpe
Um engenheiro de software indiano (Appaji C.) recebeu uma abordagem via LinkedIn para uma vaga remota de desenvolvedor Python, com salário entre US$ 10.000 e US$ 15.000 mensais. O suposto recrutador enviou um take-home assignment via Google Drive contendo um arquivo zip e um PDF com instruções aparentemente legítimas sobre melhorias de arquitetura e operações Git.
A descoberta
O projeto zipado era um backend FastAPI com SQLAlchemy - código limpo e sem pacotes suspeitos no requirements.txt. Porém, ao rodar tree -a (hábito de quem faz CTFs), o autor encontrou uma pasta .git/hooks repleta de hooks pré-configurados. O hook pre-commit continha um script que detectava o sistema operacional da vítima (macOS, Linux ou Windows) e baixava/executava silenciosamente um payload remoto a partir de um IP bruto (45.61.164.38:5777).
A cadeia de infecção
- Estágio 1 (pre-commit hook): baixa um script do servidor remoto com um parâmetro
idúnico por candidato. - Estágio 2 (tokenlinux.sh): instala Node.js silenciosamente, baixa um
parser.jse umpackage.json, instala dependências e executa o parser em background vianohup. - Estágio 3 (parser.js): código fortemente ofuscado. O
package.jsonrevelava dependências comoclipboardy(acesso à área de transferência),hardhat(ambiente de desenvolvimento Ethereum),axios,basic-ftpejsonwebtoken- indicando provável roubo de carteiras cripto ou interação com extensões de navegador.
O parâmetro id servia para rastrear cada vítima individualmente e servir payloads personalizados.
Variantes do ataque
Outras vítimas relataram variações: uma delas recebeu um zip com uma pasta .vscode contendo comandos configurados para executar automaticamente ao abrir o diretório no VSCode - sem necessidade de rodar nenhum comando Git.
Origem do projeto
O repositório era um clone de um projeto público de FastAPI no GitHub (personal-finance-service), com os hooks maliciosos adicionados por cima. A empresa citada (Zavopay, supostamente uma startup Y Combinator) não tinha relação com o golpe.
Desfecho
O autor tentou escanear a infraestrutura dos atacantes com Nmap: encontrou três portas abertas, incluindo SSH com OpenSSH 9.6p1 (versão recente, sem CVEs conhecidos). O "recrutador" deletou a conta no LinkedIn logo após ser confrontado. O autor destaca que o PDF de instruções incluía tarefas de Git justamente para garantir que o candidato executasse ao menos um comando que disparasse os hooks.