- Caso de ataque de engenharia social em que uma recrutadora abordou por mensagem no LinkedIn e pediu revisão de um repositório público no GitHub sob o pretexto de contratar um engenheiro líder
- No código enviado para revisão havia um backdoor disfarçado de suíte de testes, e o pedido para "verificar um problema com módulos Node depreciados" era uma isca para induzir a execução de
npm install - Ao desconfiar, em vez de analisar localmente, o código foi inspecionado em um VPS descartável com um agente em modo somente leitura, e o arquivo problemático foi detectado em poucos segundos
- Tanto os commits do repositório quanto o perfil da recrutadora usavam indevidamente a identidade de pessoas reais, se passando respectivamente por um desenvolvedor real e uma jornalista da área de artes
- O caso traz lições práticas de defesa: desconfiança, higiene de segurança (security hygiene) e o uso de agentes somente leitura se mostraram mais eficazes do que ler o código manualmente
Como aconteceu a abordagem
- Na semana passada, chegou uma mensagem no LinkedIn de uma recrutadora de uma pequena startup de cripto
- Houve algumas trocas de mensagens ao longo de alguns dias, explicando um proof-of-concept quebrado que precisava de um engenheiro líder
- Ela enviou um repositório público no GitHub para revisão e pediu para "verificar um problema com módulos Node depreciados"
- Pedidos para revisar codebases já existentes são comuns, mas havia algo estranho, o que aumentou a cautela
Como a verificação foi feita
- Em vez de clonar e instalar dependências localmente, foi criado um VPS descartável na Hetzner e o repositório foi clonado lá
- O Pi foi configurado em modo somente leitura, com apenas ferramentas de leitura de arquivos ativadas
- Comando usado:
pi --tools read,grep,find,ls
- Comando usado:
- Ao pedir ao agente que revisasse a codebase e apontasse itens suspeitos, ele praticamente parou na hora em
app/test/index.js
Estrutura do backdoor
- O repositório tinha a forma de frontend React + backend Node
- A armadilha estava em
app/test/index.js, com cerca de 250 linhas, disfarçada de suíte de testes - Por dentro, a URL era montada em partes para ficar oculta
- Variáveis como protocol, domain, separator, path, token e subdomain eram combinadas para formar
https://rest-icon-handler.store/icons/77
- Variáveis como protocol, domain, separator, path, token e subdomain eram combinadas para formar
- O payload estava escondido entre testes fictícios comentados e fazia com que qualquer coisa enviada pelo servidor fosse executada na máquina da vítima
- O payload ficava na linha 225
Mecanismo de disparo
- O arquivo não esperava a execução dos testes
app/index.jsexecutavaconst test = require('./test'), carregando e rodandoapp/test/index.js
- O
package.jsonconectavaapp/index.jsà etapa de inicialização - O ponto central era o script
prepare, que o npm executa automaticamente apósnpm install- Ou seja, só instalar as dependências já disparava o backdoor
- A instrução para "verificar o problema com módulos Node depreciados" era, no fim, uma isca para induzir a execução de
npm install - Até daria para executar o payload em sandbox e observar uma carga útil de segundo estágio, mas a análise foi interrompida assim que ficou provado que o servidor faria a máquina executar código entregue por ele
A primeira identidade roubada
- Os commits foram feitos com o nome e e-mail de um desenvolvedor full stack real
- Ele tinha um perfil normal no LinkedIn, site pessoal e uma conta no GitHub com histórico antigo
- Fingindo ter herdado a codebase, foi feito contato com esse desenvolvedor
- Ele respondeu que nunca trabalhou para aquela empresa, que já havia sido personificado antes no GitHub e que repositórios já tinham sido derrubados por isso, além de não ter qualquer relação com este repositório
- Também disse que estava denunciando esses repositórios por conta própria
- Todo o histórico de commits, 39 commits ao todo, estava atribuído a um desenvolvedor que nunca tocou naquele repositório
A segunda identidade roubada
- O perfil da recrutadora pertencia a uma jornalista real da área de artes, com histórico apenas no setor cultural e nenhum elemento técnico
- Quando foi dito que a instalação não funcionava, a jornalista de uma área não técnica virou instantaneamente especialista em npm e versões do Node e passou a pressionar pela execução de
npm install
Isso pode acontecer com qualquer pessoa
- Já se ouvia falar desse tipo de ataque e até havia relatos no HN, mas ser alvo direto ainda assim pegou de surpresa
- Havia desconfiança desde a primeira mensagem, mas em um dia de cansaço ou pressa, daria facilmente para executar
npm installsem pensar muito
- Havia desconfiança desde a primeira mensagem, mas em um dia de cansaço ou pressa, daria facilmente para executar
- Mensagens no LinkedIn pedindo revisão de repositório exigem um pouco de cautela e higiene de segurança
- Revisar o código com um agente somente leitura foi mais eficaz do que ler tudo manualmente
- O backdoor estava disfarçado de código amador e malfeito, mas o agente o detectou em segundos
- O repositório foi denunciado no GitHub e a recrutadora no LinkedIn, mas até agora nada mudou e o código continua publicado
1 comentários
Comentários no Hacker News
Um recrutador de uma pequena startup de cripto enviou um repositório público no GitHub pedindo para revisar uma prova de conceito quebrada e verificar um “deprecated Node modules issue”, e isso acabou sendo um phishing para induzir
npm installO script
prepareera executado automaticamente apósnpm installe funcionava como um backdoor que rodava código arbitrário servido pelo servidor na máquina local; é assustadoramente grave que esse tipo de phishing possa acontecer pelo LinkedIn$company, e basta isso estar no perfil para a pessoa aparecer na página oficial da empresaNossa empresa também teve falsos recrutadores aplicando o mesmo golpe, com perfis falsos bastante convincentes e até muitas postagens relacionadas ao LinkedIn Premium, mas não eram funcionários reais
Por mais que denunciássemos, os perfis não saíam do ar; no fim, resolvemos porque pagamos uma bebida para um conhecido que trabalhava no LinkedIn, mas nem toda startup tem esse tipo de contato
Vendo as pessoas sendo comprometidas assim repetidamente, não dá para entender por que não se usa uma ferramenta como PNPM e por que não se fecha essa brecha tão óbvia e tão explorada de executar código arbitrário no processo de baixar código
Ferramentas que executam código arbitrário no momento em que você tenta baixar código precisam acabar
A última coisa de que me lembro eram downloads disfarçados de arquivos de proteção de tela
.scrdo Windows, e ter chegado ao LinkedIn é uma etapa ainda piorA plataforma provavelmente não vai se importar muito, já que isso aparenta ser “crescimento de vagas”, parecido com como redes de anúncios como Google ou Meta não parecem se importar muito com anúncios fraudulentos
bullshitpowershellladendoucument.pdf.docx, mas enviar direto por DM do LinkedIn é uma estratégia bem ousadaIsso certamente deveria ser crime, mas não entendo por que não existe um canal bem conhecido, tipo um 911 para cibercrime, onde se possa denunciar isso e conseguir ajuda
A sociedade precisa alcançar os riscos reais e criar rapidamente uma rede de apoio, porque crime organizado exige defesa organizada
Você provavelmente não vai receber resposta, mas para cidadãos americanos, e talvez para qualquer pessoa, é o lugar mais próximo de um 911 da internet que eu conheço
O segundo problema é a assimetria: o esforço para criar esse tipo de golpe é praticamente zero, enquanto capturar e processar os responsáveis exige grande esforço e custos astronômicos
Fica numa categoria parecida com ligações de golpe fingindo ser o suporte da Microsoft para enganar idosos, e é quase impossível capturar suspeitos
Ou porque escondem muito bem os rastros, ou, mais frequentemente, porque vivem em países cujo governo não liga — ou até tolera — golpes contra ocidentais
Mesmo que você denuncie o crime, é bem provável que não recebam seu caso nem entrem em contato
Isso hoje em dia está desconfortavelmente próximo de uma tarefa comum de entrevista
Alguém mandar um repositório dizendo que a instalação está quebrada e pedir para você dar uma olhada é algo natural, e muitos desenvolvedores, cansados ou procurando emprego, podem rodar
npm installsem pensar muitoVocê não quer parecer lento, então acaba pulando a etapa de perguntar se aquilo sequer deveria ser executado
“Denunciei o repositório ao GitHub e o recrutador ao LinkedIn, mas nada mudou e o código continua no ar”, ah, Microsoft
Levava para um vídeo falso do primeiro-ministro canadense anunciando um plano de investimento em cripto para todos os canadenses, com link para cadastro; quando denunciei, responderam que após investigação não encontraram violação de política
Os três têm problemas de segurança ou confiabilidade, e quanto mais a Microsoft se aprofunda em IA, mais parece piorar em vez de melhorar
Não faço ideia para onde está indo toda aquela produtividade interna com IA, aquela produtividade “10x”, como alguns dizem
Aí teria saído do ar imediatamente
Parece que usam o mesmo domínio para vários alvos
Há um tópico parecido no Reddit de 3 meses atrás: https://www.reddit.com/r/openclaw/comments/1rlet0h/someone_t...
Não consigo entender por que todos os sistemas operacionais do mundo ainda não bloquearam o npm
Essa gente aparentemente nunca vai aprender
Esse tipo de golpe seria possível com várias tecnologias, e poderia até funcionar com um Makefile
Seria bom se o Mac finalmente tivesse um framework de virtualização realmente decente
Já cansou bastante essa história de baixar scripts aleatórios da internet sem proteção, como se ainda estivéssemos em 1995
Ao encontrar desconhecidos e colocar as coisas deles no fundo do seu computador, não se pode esquecer de usar equipamento de proteção
curl | bashvindos do GitHub, AUR ou NPM é igualmente ruim, mas muitos desenvolvedores aqui ainda têm suposições duvidosas sobre essa má práticaVários pequenos incidentes do tipo Shai-Hulud nas últimas semanas mostram como isso é ruim
No IntelliJ, dá para configurar os comandos npm para rodarem dentro de um container Docker
Todas as propostas de vaga que recebi no LinkedIn pareciam suspeitas demais
Eram coisas como pedir para se candidatar por uma plataforma, gravar um vídeo de apresentação, ou fazer um teste de programação de triagem atrás de uma plataforma de código
Pediram que ele emitisse um cheque como depósito de garantia para um notebook da empresa; mesmo parecendo absurdo à primeira vista, ele estava desesperado depois de tanto tempo procurando trabalho e ficou genuinamente feliz por finalmente ter conseguido uma vaga
Quem está desempregado há muito tempo muitas vezes fica tão desesperado que ignora sinais de alerta gravíssimos, sinais nos quais alguém com poupança suficiente ou já empregado buscando trocar de trabalho jamais cairia
Não é assim que a maioria dos autores de pacotes NPM acaba sendo hackeada hoje em dia?
Parece que o responsável pelo axios também caiu em uma abordagem parecida via LinkedIn
Eu só uso o LinkedIn por causa das vagas, mas nos últimos meses apareceu anúncio inútil demais
Tem um monte de vagas de empresas parecidas com Ladders, Swooped, e parece que chegou a hora de abandonar o LinkedIn de vez