html Les escrocs démasqués : analyse de quatre infrastructures…
Retour aux actualités
ENQUÊTE SUR PLUSIEURS AFFAIRES

Les escrocs ne sont pas des pirates informatiques : analyse de quatre backends, tous facilement compromis

Firebase · Supabase · Express.js · Drainer-as-a-Service · Février 2026

Scam Infrastructure Exposed
Plus de 19 000
Vol de phrases de récupération (1 campagne)
4
Accès complet aux backends
0
Authentification requise
267 et plus
Domaines associés au phishing

 Avertissement : il s'agit d'une analyse, et non d'une attaque

Tout ce qui est présenté dans cet article est le résultat de analyse passive et données accessibles au public. Aucun système n'a été piraté. Aucune procédure d'authentification n'a été contournée. Dans chaque cas, ce sont les propres erreurs de configuration des escrocs qui ont exposé leur infrastructure, les données des victimes et leurs identités opérationnelles à quiconque daignait y jeter un œil. Toutes les clés API se trouvaient dans des paquets JavaScript publics. Toutes les bases de données étaient grand ouvertes, conformément à la conception même des opérateurs. Nous rapportons ces faits non pas pour attaquer, mais pour démontrer que les personnes qui volent vos cryptomonnaies ne parviennent même pas à mettre leurs propres outils en sécurité.

 Thèse centrale : des « script kiddies » armés d'outils volés

Il existe un mythe tenace dans l'esprit du grand public selon lequel les escrocs en ligne seraient des « hackers », c'est-à-dire des génies de l'informatique capables de s'introduire dans des systèmes avec habileté et sophistication. Ce n'est pas vrai.

Les escrocs spécialisés dans les cryptomonnaies d'aujourd'hui sont des « script kiddies » utilisant des kits d'outils achetés. Ils achètent des packs « Drainer-as-a-Service » pour 200 à 500 dollars, les déploient sur des hébergements gratuits ou bon marché, et prient pour que leurs victimes ne s'en aperçoivent pas. Ils n'écrivent pas de code. Ils ne comprennent rien aux réseaux. Et ils ne comprennent certainement rien à la sécurité.

Nous le savons car, en février 2026, PhishDestroy a analysé 4 réseaux frauduleux indépendants — et dans chaque cas, nous aurions pu :

Pas besoin d'exploits. Pas de failles « zero-day ». Pas de « piratage ». Juste en ouvrant la porte d'entrée qu'ils avaient laissée ouverte.

 Cas n° 1 : L'API fantôme — server0002.mn19indexpre.xyz

 Express.js sur Apache : aucune sécurité réelle

AUCUNE AUTHENTIFICATION AUCUNE VALIDATION DES DONNÉES SAISIES AUCUNE LIMITATION DE DÉBIT Cours : *
ParamètresValeur
Domaineserver0002.mn19indexpre.xyz
Adresse IP108.181.185.225
Pile serveurApache/2.4.58 (Ubuntu) → Express.js (Node.js)
Bannière SSHSSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.11
Émetteur TLSLet's Encrypt (E7), valable de janvier à avril 2026
Registre DNSGoDaddy (ns39/ns40.domaincontrol.com)
Courriel (MX)mn19indexpre-xyz.mail.protection.outlook.com
Microsoft TenantNETORGFT19090185.onmicrosoft.com
Ports ouverts22 (SSH), 80 (HTTP→301), 443 (HTTPS)

 « L'authentification » — Une plaisanterie

L'API est fournie avec un jeton Bearer prédéfini : thisisakeyforsecureserver. Mais voici le clou de l'histoire — le jeton n'est en réalité pas vérifié:

// Pas d'en-tête d'authentification → accepté POST / HTTP/1.1 Content-Type: application/json {"subject":"test","domain":"test","messages":["ping"]} → {"success":true} // Jeton incorrect → également accepté Autorisation : porteur « wrong_token_completely » → {"success":true} // Tout type de contenu → également accepté Type de contenu : text/xml, text/plain, multipart/form-data → {"success":true}

 Validation sans entrée

Toutes les charges utiles d'injection que nous avons testées ont été acceptées sans avertissement :

// SQL injection Objet : « » OU 1=1-- » → accepté Objet : "'; DROP TABLE messages;--" → accepté // SSTI (injection de modèles côté serveur) Objet : « {{7*7}} » → accepté Objet : "{{config}}" → accepté Objet : « {{self.__class__}} » → accepté // SSRF (falsification de requêtes côté serveur) domaine : « http://169.254.169.254/latest/meta-data/ » → accepté domaine : « file:///etc/passwd » → accepté // Charge utile stockée XSS Objet : « <script>alert(1)</script> » → accepté

 Empreinte de performance

Temps de réponse constant d'environ 7,5 secondes pour les requêtes POST, quelle que soit la taille de la charge utile (acceptation de 10 octets à 10 Mo), ce qui laisse supposer un transfert d'e-mails ou un relais de webhooks en arrière-plan. Les requêtes GET sont traitées en 0,6 seconde. Dix requêtes parallèles sont traitées en 9,1 secondes — aucune limitation de débit n'est appliquée.

 Risque de désanonymisation

Microsoft 365 tenant ID NETORGFT19090185 est un lien direct vers le compte de l'organisation qui a enregistré ce domaine. Si l'on ajoute à cela les enregistrements d'enregistrement GoDaddy et une adresse IP dédiée (non masquée par un CDN), cet opérateur est facilement identifiable par la voie judiciaire. L'enregistrement SPF (include:secureserver.net) confirme que, dans le cadre de l'hébergement de messagerie GoDaddy, toutes les métadonnées des e-mails sont accessibles sur présentation d'une assignation à comparaître.

 Cas n° 2 : Firebase à la merci de tous — web3ledgar.com

 Firestore sans aucune règle de sécurité

RÈGLES DE FIRESTORE : OUVERT TOUTES LES DONNÉES RELATIVES AUX VICTIMES SONT LISIBLES CLÉ API DANS JS PUBLIC 12 VICTIMES EXPOSÉES
ParamètresValeur
Domaine de phishingweb3ledgar.com (typosquat de « Ledger »)
Domaine alternatifweb3.ledgerscore.ltd
Projet Firebaseweb3ledger-210ab
Clé APIAIzaSyCv8e-Gl7nK1RPpfNkJt-WjSZiaoe4AsL8
Identifiant de l'application1:1054258933515:web:9fb193fcd0093023f7fc0e
Ensemble JS/static/js/main.7a5ec2fa.js
Règles FirestoreAccès libre — lecture/écriture sans authentification
Nombre total de victimes12 enregistrements dans users collection
Collections trouvéesusers, transactions

 Données sur les victimes — Accessibles à tous

Une seule requête GET non authentifiée adressée à l'API REST de Firestore a renvoyé chaque phrase de récupération volée:

GET /v1/projects/web3ledger-210ab/databases/(default)/documents/users?pageSize=300 → 200 OK → Total documents: 12 // Exemple de fiche de victime (phrase de récupération masquée pour des raisons de sécurité) { « walletId »: W3L-65285520, « walletType »: « WalletConnect », « e-mail »: « [SUPPRIMÉ]@gmail.com », « phrase de récupération »: « ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ », « createdAt »: 15 février 2026 à 00 h 14 min 52 s 804 ms, « statut »: « actif » }

Parmi ces 12 enregistrements, il y avait une entrée révélatrice : quelqu'un avait déjà testé le système avec fbi@fbi.gov comme l'indique l'e-mail. Soit l'escroc a testé son propre système (ce qui est utile pour l'identifier), soit quelqu'un d'autre l'avait déjà sondé.

 Le déroulement de l'attaque

Le site de phishing imite l'interface du portefeuille Ledger. La victime clique sur « Connecter le portefeuille » → saisit sa phrase de récupération → l'interface React envoie directement les données à Firestore → l'escroc récupère ces informations dans la même base de données accessible. Pas de serveur backend du tout. L'ensemble du système fonctionne grâce à l'offre gratuite de Google.

 Risque de désanonymisation

ID du projet Firebase web3ledger-210ab et l'identifiant de l'application 1:1054258933515 sont associé à un compte Google. Google conserve les relevés de facturation, les journaux d'adresses IP et les données de création de compte pour tous les projets Firebase. Une simple demande des forces de l'ordre adressée à Google permet de révéler l'identité de l'opérateur. De plus, le fait que les règles Firestore soient totalement ouvertes signifie que nous aurions pu enregistrer ces données dans leur base de données, a averti les victimes en temps réel ou a effacé l'intégralité de la collection.

 Cas n° 3 : Supabase Full CRUD — web3safe-pal.com

 Sécurité au niveau des lignes désactivée, GraphQL entièrement accessible

RLS désactivé ACCÈS COMPLET AUX OPÉRATIONS CRUD COMPATIBLE AVEC GRAPHQL FONCTIONS DE LA PERIPHÉRIE ADAPTATION EN RUSSE
ParamètresValeur
Domaine de phishingweb3safe-pal.com (typosquat de « SafePal »)
Projet Supabasegzqsadraigchwdhblavp
Quelle est la clé ?Publié dans /assets/index-b025f4a6.js (748 Ko)
Table de base de donnéesseeds — ouvrir, lire, insérer, mettre à jour, supprimer
GraphQLIntrospection complète + mutations activées
Fonctions en périphériesend-wallet-import-email, send-email
Service de messagerie électroniqueRéenvoyer l'API (RESEND_API_KEY dans l'environnement)
Dossiers des victimesN° 130-131 (le n° 129 ayant été supprimé précédemment)
Langue de l'interface utilisateurFrançais (« Portefeuille principal », « Votre portefeuille est en cours de chargement... »)

 Accès complet à la base de données — Lecture, écriture, suppression

La clé « anon » de Supabase, qui se trouve dans le fichier JavaScript minifié, permet accès complet aux fonctions CRUD vers le seeds table:

// LIRE — récupérer toutes les phrases de récupération volées GET /rest/v1/seeds?select=*ℴ=id.asc → 200 OK [ {identité:130, "phrase":« ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ », « nom »:« Portefeuille principal »}, {identité:131, "phrase":« ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ », « nom »:« Portefeuille principal »} ] // INSERT — nous pouvons écrire dans la base de données de l'escroc POST /rest/v1/seeds {"phrase":"PHISHDESTROY_WAS_HERE","name":"test"} → 201 Créé {identité:132} Mise à jour via GraphQL mutation { updateseedsCollection(filter:{id:{eq:131}}, set:{name:"PhishDestroy was here"}) { affectedCount } } → {"nombre de personnes concernées" : 1} Supprimer via GraphQL mutation { deleteFromseedsCollection(filter:{id:{eq:131}}, atMost:1) { affectedCount } } → {"nombre de personnes concernées" : 1}

Les identifiants commencent à 130 — ce qui signifie que les enregistrements 1 à 129 ont été précédemment supprimés par l'opérateur. Au moins 131 phrases de récupération sont passées par ce système.

 Fonctions Edge : la traçabilité des e-mails

Deux fonctions Edge de Supabase sont actives. Nous avons procédé à une ingénierie inverse du send-email le format d'entrée attendu de la fonction en testant différentes charges utiles :

// Test du point de terminaison « send-email » {"seed":"phrase de test","name":"test"} → 200 OK {"id":"f2749592-..."} {"phrase_de_sémence" : "...","nom_du_portefeuille" : "..."} → 400 « Aucune donnée de graine fournie. » {"phrase":"...","name":"..."} → 400 « Aucune donnée de graine fournie. » // La fonction accepte {seed, name} et les transmet à l'attaquant via l'API Resend // Source de la fonction Edge (reconstituée à partir du bundle JS) : // NB.functions.invoke("send-wallet-import-email", // {body: {nom_du_portefeuille, phrase_secrète, adresse_IP}})

La clé API de renvoi (RESEND_API_KEY) est stockée dans les variables d'environnement de Supabase. Resend conserve les enregistrements de vérification de l'expéditeur et les données de facturation — un autre moyen direct d'accéder à l'identité de l'opérateur.

 Risque de désanonymisation

La localisation russe de l'interface utilisateur (« Portefeuille principal », « Votre portefeuille est en cours de chargement... ») indique un Opérateur parlant russe. Le projet Supabase (gzqsadraigchwdhblavp) est associé à un compte comportant des relevés de facturation. Le service de renvoi d'e-mails dispose de l'adresse e-mail du destinataire. L'introspection GraphQL révèle le schéma complet de la base de données. Nous avons démontré un accès en écriture complet — nous aurions pu remplacer chaque phrase de récupération volée par un message d'avertissement destiné aux victimes, ou supprimé l'intégralité de la table. L'opérateur n'aurait alors aucun moyen de récupérer les données.

 Cas n° 4 : Système de drainage à l'échelle industrielle — aipolypredictor.xyz

 19 000 phrases de récupération en 5,8 jours

Plus de 19 000 graines volées NUMÉROS D'IDENTIFICATION SÉQUENTIELS DES TÂCHES AUCUNE RESTRICTION CORS Kit DaaS (defex.cc) 11 DOMAINES CONFIRMÉS
ParamètresValeur
Domaine front-endaipolypredictor.xyz (« PolySniper | Les paris d'initiés de Frontrun »)
API C2api.yfhikblkhghdyteiuyf54.run
Adresses IP C2172.67.168.147, 104.21.26.231 (Cloudflare)
Back-endExpress.js (Node.js) v1.0.0
S'inscrire (Interface utilisateur)NiceNIC International Group Co.
S'inscrire (C2)PDR Ltd. (PublicDomainRegistry.com)
Temps de disponibilitéEnviron 139 heures (débuté vers le 10 février 2026 à 21 h 00 UTC)
Drainer Kit CDNrenderer-postcard.defex.cc (601 Ko de code JS obfusqué)
Bot TelegramActif, intégré pour les notifications
Limite de débit10 requêtes/60 s (seule limite détectée)

 Échelle mise en évidence par des identifiants séquentiels

L'erreur la plus grave : numéros d'identification séquentiels des tâches. Chaque soumission d'une phrase de récupération génère un identifiant incrémental, ce qui permet à quiconque de calculer le volume total :

POST /api/check-seed-full { « phrase de récupération »: « phrase de test ici », « bundleId »: 88ef78f56e0837dd0339e40a882bf563, « profondeur »: 100, « domaine »: Aipolypredictor.xyz, "sourceInfo": {« walletName »:MetaMask, isBot:faux} } → {"success":true, "message":"Vérification en attente", "jobId":"19358"} // Demande suivante : jobId 19359, puis 19360... // Environ 19 000 phrases de récupération en environ 139 heures = environ 137 par heure

 Architecture multi-chaînes

Le serveur C2 génère des clés sur l'ensemble des principales chaînes en utilisant des chemins de dérivation d'une profondeur de 100 :

⛓️
Chaînes visées
Ethereum / Bitcoin / Solana / Monero
🔑
Profondeur de dérivation
100
🌐
Domaines confirmés
11
🕸️
Lien vers defex.cc
255 et plus

 Infrastructure de campagne

11 domaines confirmés répartis entre 2 groupes d'opérateurs, identifiés par leurs identifiants de bundle :

Identifiant du bundleDomainesStatut
88ef78f5...Aipolypredictor.xyzEN DIRECT
4446ea5d...solana.onspace.app, solxjup.onspace.appEN DIRECT
Kit defex.ccjup-v2.com, events-charizard.fun, events-llquid.fun, events-blackswan.fun, soljup.onspace.buildMixte

 Analyse des charges utiles JavaScript

Trois charges utiles JavaScript obfusquées alimentent le drainer :

  • wallet-connect.js (46 Ko) — Gère l'interface utilisateur de connexion au portefeuille, intercepte la saisie de la graine. Obscurcissement par rotation de tableaux de chaînes de caractères.
  • wallet-specific-modals.js (134 Ko) — Contient Liste complète des mots anglais BIP39 et Liste de mots pour Monero (1 626 mots). Protection contre le débogage via le remplacement des appels console.log/trace. Prise en charge des fenêtres modales multi-portefeuilles.
  • defex.cc/index.js (601 Ko) — Code obfusqué en Unicode avec des noms de variables en chinois. Logique de drainer spécifique à Solana. Encodeur Base58, primitives de dérivation de clés cryptographiques. Version 3.0.0.

 Risque de désanonymisation

Le CORS: * l'en-tête et l'absence de moyens d'authentification Tout le monde peut soumettre des demandes et suivre l'évolution des numéros d'identification des tâches en temps réel. Grâce à l'intégration du bot Telegram, le compte Telegram de l'opérateur reçoit des notifications — et les métadonnées de Telegram peuvent faire l'objet d'une assignation à comparaître. NiceNIC (bureau d'enregistrement pour l'interface utilisateur) est un bureau d'enregistrement réputé pour sa sécurité que nous avons déjà examiné, mais PDR Ltd. (bureau d'enregistrement de domaines .C2) répond aux demandes des forces de l'ordre. Le defex.cc Le kit de drainage dessert plus de 255 domaines — une compromission de defex.cc mettrait à nu l'ensemble de l'opération DaaS et tous ses clients.

 Comparaison : 4 opérations, même modèle

Système métrique mn19indexpre
Express.js
web3ledgar
Firebase
Web3SafePal
Supabase
aipolypredictor
Drainer C2
AuthentificationAucun (jeton ignoré)AucunClé anonyme en JavaScriptAucun (CORS : *)
Données lisiblesMessages/relaisToutes les phrases de récupérationToutes les phrases de récupérationRéférences de poste / échelle
Données modifiablesOui (illimité)OuiOui (CRUD complet)Oui (envoyer)
Validation des données saisiesZéroZéroZéroAu minimum
Limitation du débitAucunAucunAucun10 répétitions en 60 secondes
Non anonymisableMS365 tenantCompte GoogleRenvoyer + Facturation SupabasePDR + Telegram
Nombre estimé de victimesInconnu12131+Plus de 19 000
Langue de l'opérateurInconnuAnglaisRusseInconnu

 Pourquoi les escrocs ne sont pas des pirates informatiques

Les preuves sont accablantes. Dans les quatre opérations, on observe le même schéma :

 Ce que font les escrocs
  • Acheter des kits de égouttoirs prêts à l'emploi (200 à 500 $)
  • Déployer sur des offres gratuites (Firebase, Supabase)
  • Ne modifiez pas les configurations par défaut
  • Utilisez des jetons codés en dur qu'ils ne vérifient pas
  • N'activez jamais RLS, ne restreignez jamais CORS
  • Révéler leur identité dans les métadonnées
  • Utilisez des identifiants séquentiels qui reflètent leur échelle
 Ce que feraient les pirates informatiques
  • Créer des outils d'exfiltration personnalisés
  • Utilisez des canaux cryptés et authentifiés
  • Générer des identifiants aléatoires, alterner les infrastructures
  • Mettre en place un contrôle d'accès adéquat
  • Utiliser Tor ou des chaînes de proxys, effectuer des paiements anonymes
  • Distinguer l'identité opérationnelle de l'hébergement
  • Mettre en œuvre des techniques anti-forensiques

Le client type de Drainer-as-a-Service est un un escroc spécialisé dans l'ingénierie sociale muni d'une carte de crédit, et non des techniciens. Ils savent comment enregistrer un nom de domaine et insérer du code dans un panneau d'hébergement. En revanche, ils ne savent pas :

Ce ne sont pas des adversaires sophistiqués. Ce sont des personnes qui ne savent pas configurer une base de données.

 Indicateurs de compromission (IOC)

Domaines

# Case 1: Express.js API server0002.mn19indexpre.xyz # Case 2: Firebase Stealer web3ledgar.com web3.ledgerscore.ltd # Case 3: Supabase Stealer web3safe-pal.com # Case 4: Drainer Campaign aipolypredictor.xyz api.yfhikblkhghdyteiuyf54.run yfhikblkhghdyteiuyf54.run renderer-postcard.defex.cc solana.onspace.app solxjup.onspace.app jupag.onspace.app jupiverse.onspace.app stakepayment.icu jup-v2.com events-charizard.fun events-llquid.fun events-blackswan.fun soljup.onspace.build

Adresses IP

108.181.185.225 # Cas n° 1 — Express.js (dédié) 172.67.168.147 / 104.21.26.231 # Cas 4 — API C2 (Cloudflare) 172.67.178.251 / 104.21.67.171 # Cas n° 4 — Front-end (Cloudflare) 172.67.209.39 / 104.21.37.139 # Cas n° 4 — defex.cc (Cloudflare) 43.130.171.152 / 43.130.171.225 # Cas n° 4 — Domaines onspace (Tencent)

Clés API et identifiants de projet

# Firebase (Case 2) Projet : web3ledger-210ab Clé API : AIzaSyCv8e-Gl7nK1RPpfNkJt-WjSZiaoe4AsL8 ID d'application : 1:1054258933515:web:9fb193fcd0093023f7fc0e # Supabase (Case 3) Projet : gzqsadraigchwdhblavp Clé anonyme : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... # Campaign Tracking (Case 4) Ensemble 1 : 88ef78f56e0837dd0339e40a882bf563 Ensemble 2 : 4446ea5ddb308b2494db8ad4b12196c3 # Microsoft Tenant (Case 1) NETORGFT19090185.onmicrosoft.com

 Conclusion : L'Empereur est nu

 En résumé

Toutes les opérations frauduleuses que nous avons analysées pourraient être entièrement compromis, désanonymisés et mis hors service en utilisant simplement un navigateur web, curl et la documentation accessible au public. Dans tous les cas, les pirates ont laissé leurs bases de données grand ouvertes, leurs clés API dans des fichiers JavaScript publics, leurs identités dans les métadonnées, et les données de leurs victimes accessibles à quiconque prenait la peine de les consulter.

La leçon est simple : Les escrocs ne sont pas des pirates informatiques. Ce sont des voleurs à l'étalage qui ont acheté un kit de crochetage sur AliExpress et ont oublié de fermer leur porte d'entrée à clé. Les outils qu'ils utilisent sont sophistiqués… parce que quelqu'un d'autre les a conçus. Les auteurs de ces actes sont eux-mêmes des amateurs qui exposent systématiquement leur propre infrastructure, les données de leurs victimes et leur propre identité à quiconque possède des connaissances techniques de base.

Si vous avez saisi votre phrase de récupération sur l'un de ces sites, partez du principe que votre portefeuille a été piraté et transférez immédiatement vos fonds.

Toutes les constatations ont été signalées aux prestataires de services concernés (Google/Firebase, Supabase, Cloudflare, bureaux d'enregistrement de noms de domaine) et consignées à l'intention des autorités chargées de l'application de la loi. Les indicateurs de compromission (IOC) ci-dessus ont été ajoutés à la PhishDestroy : liste des sites à supprimer.

Partager cette enquête

X / Twitter Telegram Reddit LinkedIn

Enquêtes connexes

BUYTRX Exposed: 55 Domains & TRON Approval Drainer
ENQUÊTE
BUYTRX démasqué : 55 domaines et un programme de détournement d'approbations TRON
Crypto Drainer Toolkit: Angel Drainer Resellers Exposed
ENQUÊTE APPROFONDIE
Kit d'outils Crypto Drainer : les revendeurs d'Angel Drainer démasqués
Keitaro TDS: 1,500 Panels Exposed, Zero Legit Uses
ENQUÊTE
Keitaro TDS : 1 500 panneaux exposés, aucune utilisation légitime
Avis de transparence. PhishDestroy est un projet à but non lucratif mené par des bénévoles. Nos recherches peuvent refléter un parti pris inhérent à l'encontre des infrastructures d'escroquerie et des services qui les rendent possibles. Nous encourageons les lecteurs à évaluer l'ensemble de ces informations de manière critique et indépendante. Lire notre déclaration de transparence complète →