Pesquisadores encontraram uma falha no Opera GX, a versão voltada para jogos do navegador Opera, que permitia a um site malicioso instalar silenciosamente uma extensão e usá-la para extrair dados específicos das páginas que uma vítima visitava.
Em uma prova de conceito, eles reconstruíram o endereço completo do Gmail de um usuário logado a partir de uma única visita, sem nenhum clique. A Opera corrigiu a falha e afirma que não encontrou evidências de que ela tenha sido explorada em ataques reais.
A correção foi disponibilizada na versão 130.0.5847.89 do Opera GX, então quem estiver com uma build atualizada já está protegido; é possível conferir a sua em opera://about. Não há um CVE (Vulnerabilidades e Exposições Comuns) associado.
Como o ataque não exigia cliques nem aprovações, não havia alternativa além da correção. A equipe do programa de recompensa por bugs (bug bounty) da Opera classificou o problema como P1, sua gravidade máxima, e pagou o valor máximo de 5 mil dólares por um bug crítico.
Como o ataque funciona
Os GX Mods permitem personalizar a aparência do Opera GX com sons, temas, papéis de parede e CSS (Folhas de Estilo em Cascata) que mudam o visual dos sites que você visita. Eles são distribuídos como arquivos .crx, como extensões de navegador, mas não executam JavaScript nem possuem permissões.
A fragilidade está na forma como eles são instalados: o pipeline de mods da Opera baixa e ativa um mod automaticamente, sem prompt de aprovação. Assim, uma página maliciosa pode instalar um mod em silêncio, por exemplo, ao carregar um iframe oculto apontando para um arquivo .crx.
O único sinal é uma barra de notificação abaixo da barra de endereço informando que um mod foi adicionado, com um botão "Remover".
Esse comportamento de instalação automática não é novo. O pesquisador Renwa o identificou em 2023 e, ao transformar um mod instalado em uma extensão completa, usou a falha para falsificar a barra de endereço do navegador. A Opera corrigiu aquele ataque específico em março de 2023, mas manteve a instalação automática de base, que é o que sustenta esta nova pesquisa.
Um mod de aparência silencioso parece inofensivo por si só. Porém, o CSS de um mod é aplicado a todas as páginas que você visita, não apenas a uma. A injeção de CSS comum fica confinada à página em que cai; aqui, a estilização do atacante alcança cada site aberto no navegador, uma técnica que os pesquisadores chamam de injeção universal de CSS.
O CSS não consegue ler uma página e enviá-la por conta própria. Mas é possível induzi-lo a vazar um valor, um pedaço de cada vez. O truque se apoia em seletores de atributo: uma regra pode testar se o valor de um atributo de um elemento, como um e-mail escondido em um campo oculto, começa com determinada letra, e buscar uma imagem de fundo no servidor do atacante somente se isso for verdade. Disparando regras suficientes, descobre-se o valor caractere por caractere.
Pesquisadores chamam isso de XS-Leak, abreviação de cross-site leak (vazamento entre sites). Para extrair um endereço do Gmail, os pesquisadores miraram uma página de conta do Google, myaccount.google.com/contactemail, que carrega o endereço dentro de três de seus atributos HTML (Linguagem de Marcação de Hipertexto).
Eles embalaram um mod com cerca de 150 mil regras de CSS, um conjunto para cada combinação possível de três letras do endereço, e deixaram um script de reconstrução remontar as correspondências. Primeiro tentaram pedaços de quatro letras, que exigiriam 5,6 milhões de regras e cerca de 880 MB de CSS. O navegador travou, então reduziram para blocos de três letras que se sobrepõem o suficiente para reconstruir o valor.
Encadear tudo exigiu apenas um empurrão. A vítima acessa a página do atacante, o mod é instalado em segundos, e algumas linhas de JavaScript redirecionam o navegador para a página da conta do Google. O CSS do mod já está carregado lá, então dispara as requisições e vaza o endereço conforme a página é renderizada, antes que a vítima consiga alcançar o botão "Remover" da notificação.
O endereço do Gmail foi apenas a prova de conceito; a mesma abordagem pode extrair outros valores que uma página expõe em sua marcação, como um nome de usuário.
O mesmo caminho de instalação automática tem um segundo uso, mais grosseiro, documentado pelos pesquisadores: carregar um .crx no modo anônimo (Incognito) trava o navegador e despeja todas as abas abertas. Esse afeta também a versão regular do Opera, não apenas o Opera GX, já que qualquer .crx aciona o pipeline de instalação de extensões, independentemente do conteúdo. O aviso da Opera trata da correção do roubo de dados e não menciona a falha de travamento.
Gravidade e o quadro geral
O relatório quase não recebeu o crédito devido. A Opera opera seu programa de recompensas no Bugcrowd, e os analistas de triagem tiveram dificuldade para entender o que o bug fazia, classificando-o inicialmente como um P3 mediano.
Os pesquisadores defenderam seu ponto de forma incomumente direta: enquanto um analista reproduzia o ataque, eles capturaram os próprios trigramas do analista, reconstruíram o endereço de Gmail dele e colaram no relatório. A equipe da Opera então elevou a gravidade para P1 e pagou o valor máximo de 5 mil dólares do nível crítico.
A versão da própria Opera é mais comedida. Em seu comunicado, a empresa diz estar "bem confiante" de que a falha nunca foi explorada na prática e descreve o ataque como difícil de executar: a vítima teria que acessar um site malicioso, receber um mod novo e ignorar a notificação de remoção por tempo suficiente para o redirecionamento ser disparado.
A demonstração dos pesquisadores serve de contraponto. O redirecionamento ocorre nos segundos antes que o usuário consiga sequer ler a notificação, quanto mais clicar em "Remover". Foi um ataque estreito e delicado, do qual a Opera não encontrou nenhum vestígio na prática, e mesmo assim funcionou sem nenhum clique depois de montado.
O risco aqui nunca foi o recurso cosmético em si. Foi o alcance. Uma vez que o CSS de um mod pôde acompanhar o usuário de um site para o outro, "apenas estilizar" se revelou mais do que suficiente.
Essa é a reviravolta em uma ideia conhecida: o roubo feito apenas com CSS geralmente fica preso à página em que é injetado, como na pesquisa Blind CSS Exfiltration (Exfiltração Cega por CSS) da PortSwigger, mas aqui ele viajou para todo site que a vítima abriu.
Esta também não é a primeira funcionalidade do Opera usada contra seus usuários; o The Hacker News cobriu o bug MyFlaw de 2024 no My Flow da Opera, e a empresa já tinha sido alertada sobre esse mesmo comportamento de instalação automática desde 2023.