Resumo: entrega de payload ClickFix via contrato inteligente na Binance Smart Chain
- Sem host para desligar: Os takedowns são a métrica favorita do setor. O EtherHiding aposenta essa métrica. Quando o payload vive dentro de um contrato inteligente da Binance Smart Chain, não há host para notificar, não há registador para pressionar, nem servidor para desligar.
- O payload vive on-chain: O contrato Orchid em 0x8FBA1667BEF5EdA433928b220886A830488549BD entregou cinco payloads Base64+gzip através de funções getter em aproximadamente 19.800 sites comprometidos, terminando num comando de terminal ClickFix desencriptado com AES em tempo real. A cside monitoriza o que o navegador realmente executa em runtime, pelo que os payloads on-chain ficam visíveis no momento em que são renderizados.
- O runtime é o checkpoint: Se a sua estratégia de defesa depende de takedowns de domínio e de listas de reputação, abandone essa premissa este trimestre. Os atacantes migraram para hospedagem imutável e descentralizada, e o único checkpoint que lhe resta é o runtime no navegador do utilizador.
Sem tempo? Veja o bloqueio de Magecart e skimmers no navegador da cside. Cobre tudo o que se segue numa única implementação.
Há menos de duas semanas, um dos muitos contratos inteligentes dormentes alojados na Binance Smart Chain regressou subitamente à vida. O atacante atualizou as variáveis do contrato, reativou os payloads, e o ataque está agora potencialmente ativo em mais de 19.800 sites comprometidos.
O ataque é conhecido como EtherHiding e utiliza principalmente contratos inteligentes em blockchain para entregar às vítimas payloads dinâmicos de captcha no estilo ClickFix. Escrevemos inicialmente sobre ataques ClickFix direcionados ao macOS em fevereiro, mas, como acontece com todos os ataques, o método de entrega mudou desde então. Esta classe crescente de ameaças client-side é cada vez mais difícil de detetar, e ainda mais de mitigar.
Somos a cside e monitorizamos ataques client-side de JavaScript de terceiros. Só no primeiro trimestre de 2025, observámos mais de 300 mil sites comprometidos.
Porquê a Binance Smart Chain?
A Binance Smart Chain (BSC) é uma plataforma de blockchain concebida para executar aplicações baseadas em contratos inteligentes destinadas a utilizadores de criptomoedas. Ao contrário de cadeias tradicionais como a Ethereum, a BSC privilegia custos de transação baixos e um elevado rendimento, o que a torna atrativa tanto para programadores de finanças descentralizadas como para agentes de ameaça.
Usando estes contratos inteligentes, um agente de ameaça pode armazenar payloads maliciosos on-chain, o que confere ao atacante algumas vantagens em relação à infraestrutura de cloud tradicional:
- Hospedagem imutável (porque, uma vez na blockchain, existe para sempre)
- Armazenamento descentralizado sem possibilidade de remoção
- Atualização em tempo real através de funções do contrato
Nesta campanha de EtherHiding, funções getter e setter dentro destes contratos são usadas para entregar payloads JavaScript que se adaptam ao ambiente da vítima. Estes são desencriptados e descomprimidos no navegador, e depois executados.
Análise da cadeia de ataque
O ataque começa com a injeção de código malicioso na tag <head> de um site, principalmente em instalações WordPress. A nossa análise apontou para plugins vulneráveis como o provável vetor de acesso. Uma vez inserido o código malicioso no site, este desencadeia um ataque em várias etapas que obtém os seus próximos passos a partir da própria blockchain.
Etapa 1: Comprometimento inicial e configuração
O primeiro ponto de contacto deste script malicioso é uma ligação Web3 à Binance Smart Chain, e não um servidor controlado pelo atacante. O script contacta o contrato inteligente no endereço 0x9179dda8B285040Bf381AABb8a1f4a1b8c37Ed53, dando início ao ataque ao solicitar mais instruções a este contrato.
O ABI do contrato devolvido (Application Binary Interface, ou uma lista de instruções do contrato) e as respetivas informações estão codificados em Base64 e comprimidos com gzip, o que exige que o script os descomprima usando a biblioteca pako (uma implementação em JavaScript da biblioteca de compressão zlib) antes de poderem ser interpretados e utilizados.
Depois de estabelecer contacto, o script chama uma função da blockchain para obter o endereço do próximo contrato inteligente, localizado em 0x8FBA1667BEF5EdA433928b220886A830488549BD.
Etapa 2: Carregador de múltiplos payloads através da função tokyoSkytree
O contrato **0x8FBA1667BEF5EdA433928b220886A830488549BD**, internamente designado por contrato Orchid, é o contrato mais importante da cadeia de ataque.
Dentro deste contrato existem cinco funções essenciais que determinam o que acontece a seguir no ataque:
tokyoSkytreeakihabaraLightsasakusaTempleginzaLuxuryshibuyaCrossing
O núcleo do ataque é iniciado pela função **tokyoSkytree**, que funciona como um carregador e orquestrador controlado remotamente para todo o payload. Esta executa as outras quatro funções do contrato inteligente, uma após a outra, cada uma devolvendo um blob de JavaScript comprimido e codificado em Base64 para ofuscar ainda mais as suas respostas.
Cada uma destas funções do contrato inteligente devolve um payload que é decodificado e executado dinamicamente através da função **teaCeremony**:
Este pipeline (simplificado) decodifica a string Base64, descomprime-a com gzip e executa-a através da função eval. Este design torna a campanha de ataque modular e ágil, uma vez que os payloads armazenados on-chain podem ser substituídos com extrema rapidez.
Etapa 3: Fingerprinting da vítima
shibuyaCrossing: Determinar o sistema operativo
akihabaraLights: Determinar o navegador
As duas funções shibuyaCrossing e akihabaraLights são usadas para fazer o fingerprinting do ambiente da vítima, através das informações do sistema operativo e do navegador. Estas informações são usadas posteriormente para servir uma versão específica do ataque, com base no navegador ou sistema operativo utilizado.
Etapa 4: Desencriptação e injeção do payload
Depois de fazer o fingerprinting do ambiente do utilizador, **ginzaLuxury** contacta um terceiro e último contrato inteligente (localizado em 0x53fd54f55C93f9BCCA471cD0CcbaBC3Acbd3E4AA, designado por contrato Jade), que carrega ainda mais funções.
De destacar: **getRandomSkylineByBrowserAndPlatform**.
Esta função, após receber as variáveis de navegador e sistema operativo determinadas anteriormente, devolve um URL para obter o HTML encriptado a exibir. Ao descarregar este payload e desencriptá-lo com a função **pearlTower**, que contém uma chave de desencriptação AES-GCM, o ataque é finalmente injetado numa tag iframe em ecrã completo que sobrepõe a tela da vítima.
Com base na nossa investigação, o único URL atualmente ativo é **https://yie-cpj[.]pages[.]dev/mac**, que tem um payload ativo para utilizadores de Firefox, Google Chrome e Safari no macOS.
Etapa 5: Análise do HTML encriptado
Para validar a etapa final deste ataque, decodificámos e analisámos o HTML encriptado alojado em **https://yie-cpj[.]pages[.]dev/mac**. Usando um script desenvolvido durante a investigação, conseguimos recolher as transações da blockchain, decodificar cada payload enviado ao contrato e determinar a última chave de desencriptação válida utilizada.
A chave **5AcwjGp22pUrT92hKNrO7f7bsbZJPz2PpWYwnP0Muhs=** pode ser usada para desencriptar o payload HTML através da função de desencriptação **decryptScrollToText**:
O HTML resultante é um payload de phishing no estilo ClickFix, concebido para se parecer com uma página de verificação reCAPTCHA. Em vez de validar o utilizador através de imagens, instrui a vítima a:
- Abrir o terminal do macOS
- Colar e executar um comando codificado em Base64, obtido dinamicamente a partir da função
**jadeCode()**on-chain
O comando de terminal mostrado aos utilizadores usa Base64 para ofuscar o URL do payload: https://kimbeech[.]cfd/cap/verify.sh.
Embora o URL estivesse inativo no momento da análise e o script **verify[.]sh** não pudesse ser obtido para exame mais aprofundado, a estrutura e o método de entrega não deixam dúvidas quanto à verdadeira intenção do atacante.
Ao instruir a vítima a executar, no seu terminal, um comando injetado na área de transferência, o atacante tenta executar um script Bash remoto sob o pretexto de um processo familiar de verificação CAPTCHA. Esta é uma característica central da técnica de engenharia social ClickFix e representa um risco grave de comprometimento total do dispositivo.
Porque a segurança client-side importa mais do que nunca
Ataques como o EtherHiding mostram até que ponto as ameaças client-side evoluíram. São modulares, ofuscados e cada vez mais entregues através de infraestrutura descentralizada que não pode ser encerrada.
Como o payload vive dentro do navegador e reage com base no ambiente do utilizador, estes ataques conseguem passar despercebidos pelas proteções tradicionais do lado do servidor. Nem sequer precisam de explorar o próprio servidor. Tudo o que necessitam é que a vítima carregue a página.
Manter-se à frente destas ameaças significa monitorizar tanto o seu código como aquilo que o navegador realmente executa: scripts de terceiros, assets injetados e comportamentos que podem mudar em tempo real. À medida que as superfícies de ataque client-side se tornam mais complexas, também as defesas construídas para as detetar têm de evoluir.









