Quand 20minutes.fr utilise l'ordinateur de madame Michu pour miner des cryptomonnaies pendant son sudoku ou mots-fléchés quotidien, risquant au passage de dégrader son matériel. Retour sur un petit audit réalisé pendant la fièvre du Bitcoin en 2018. La rédaction de 20 Minutes a été bien évidemment contactée à l'époque avec un mail synthétisant cet article mais aucune réponse n'a été obtenue en retour. À bon entendeur.
Sommaire
Mail d'alerte resté sans réponse
Madame, Monsieur, je souhaite porter à votre connaissance que le prestataire rcijeux.fr auquel vous faites appel pour gérer votre rubrique de jeux en ligne a intégré, et intègre peut-être encore, dans ces pages un code malicieux visant à générer des revenus par minage de cryptomonnaie.
Vous trouverez dans ce mail les preuves et détails de cette constatation datant du 21 avril 2018. Je note par ailleurs qu'en ce jour du 2 mai 2018, le code malicieux a été retiré de l'unique page que j'ai auditée, et qu'il était absent en février 2018 d'après web.archive.org (https://web.archive.org/web/20180201084253/https://rcijeux.fr/game/20minutes/mfleches/menu).
C'était mignon et plein de bonnes intentions non ?
Constat d'un usage anormal des ressources
Tout commence par la constatation d'une utilisation CPU anormale lors de la visite de la page https://www.20minutes.fr/services/mots-fleches
(voir image ci-dessous).
J'ai alors décidé d'étudier le code source de la dite page web, étant donné que ce phénomène de gaspillage de ressources est anormal sur ma machine. Notons qu'une configuration correcte de Firefox (voir chapitre plus bas) fait apparaître une erreur dans la console (voir ci-dessous).
wss://webminerpool.com:8181/
et échoue en retournant le nom du fichier contenant le code malveillant.
Audit de la page du site 20minutes.fr
20minutes.fr fait appel à un prestataire nommé rcijeux.fr pour proposer des grilles de jeux. L'intégration se fait via une balise iframe
incluant le contenu de l'url https://rcijeux.fr/game/20minutes/mfleches/menu
(voir le code d'intégration ci-dessous).
<div class="mb1">
<div class="game game-mots-fleches">
<iframe src="https://rcijeux.fr/game/20minutes/mfleches/menu" width="320" height="320" frameborder="no" scrolling="no"></iframe>
</div>
</div>
Cette url contient la grille de mots-fléchés et son système de jeu. Parmi le code développé en JavaScript destiné à la gestion du jeu, se trouve un script abritant des données d'internationalisation (traduction) de l'application (mis en évidence sur l'image suivante).
Code html :
<script src="https://rcijeux.fr/sites/default/files/languages/fr_bSppugUSdqE_alQ26NI78GfzZz5bNg19TdpfVg5EuNY.js?p7n94l"></script>
En lisant le script, on constate qu'un fragment conséquent a été rajouté à la fin :
Il s'agit d'un mineur de cryptomonnaie dont nous pouvons trouver la source sur la plateforme de partage de code GitHub : notgiven688/Webminerpool. On y constate que le programme participe à des calculs cryptographiques produisant du Monero ; une des quelques cryptomonnaies dont l'opacité interdit le traçage des échanges financiers (voir Wikipédia - Monero ).
D'après la documentation, on identifie rapidement les quelques options modifiées par rcijeux (voir image ci-après) :
- The startMining function can take additional arguments
startMining(pool, address, password, numThreads, userid);
- pool, this has to be a pool registered at the server.
- address, a valid XMR address you want to mine to.
- password, password for your pool. Often not needed.
- numThreads, the number of threads the miner uses. Use "-1" for auto-config.
- userid, allows you to identify the number of hashes calculated by a user.
Can be any string with a length < 200 characters.
- To throttle the miner just use the global variable "throttleMiner".
If you set this value to 20, the cpu workload will be approx. 80% (for 1 thread / CPU).
Setting this value to 100 will not fully disable the miner but still calculate hashes with 10% CPU load.
Le mineur est configuré pour utiliser 100% des ressources CPU du visiteur. Une telle configuration sur une machine bien gérée et puissante ne sera perceptible qu'en prenant en compte les températures et vitesses de rotation des ventilateurs. Toutefois une machine d'un utilisateur lambda avec un système d'exploitation où les programmes sont peu respectueux des ressources matérielles, sera vite rendue inutilisable. Dans les cas extrêmes (mais loin d'être rares), une surchauffe prolongée pourrait même endommager l'ordinateur.
Le programme contacte un serveur de minage via le protocole WebSocket pour obtenir de nouveaux challenges à résoudre et renvoyer les résultats des calculs effectués. L'adresse du serveur est visible dans les journaux de connexion du navigateur (voir plus haut) : wss://webminerpool.com:8181/
.
La chaîne de caractères 46jzXCKBqKHCuGogZbhJGfW84mb7rAWCZbACHAWDjKs7RDChaULHL2BHcpfwNMXCvyV8hbyR67ZAXgJEY3cL94WtVGgnzHC
est l'adresse du portefeuille sur lequel sont crédités les bénéfices générés par l'activité de minage. Il est toutefois impossible de connaître les gains générés par ce genre de pratique puisque comme l'indique la capture suivante, la blockchain de Monero l'interdit :
Comment s'en protéger ?
Les mineurs de cryptomonnaies embarqués sont une nouveauté apparue vers 2016, avec un pic en 2017 puis en 2021.
Elle coïncide avec l'intérêt porté à ce domaine, Google trends en est assez représentatif :
En bref, la pratique est là pour longtemps.
Les sites d'information font partie des pires poubelles à régies publicitaires du web (je ferai un article à ce sujet ultérieurement). Sur Marianne.net pour ne prendre qu'un exemple au hasard, avec uBlock Origin plusieurs dizaines de requêtes tierces sont bloquées (~30% des requêtes de cette page).
Un navigateur configuré et équipé bloque ainsi plusieurs millions de requêtes par an qui sont autant de fuites de votre identité numérique.
L'extension Lightbeam dont la distribution par la fondation Mozilla s'est malheureusement arrêtée en 2019 [1] mettait très clairement en évidence ce fait en affichant un graphe des relations entre les sites visités et les régies tierces contactées au même moment.
Elle est dorénavant remplacée par l'onglet about:protections
de Firefox, à mon avis bien moins parlant.
Se protéger passe a minima par l'usage de bloqueurs de publicités et de codes intrusifs (uBlock Origin, uMatrix), par le bannissement sans condition d'outils comme Adblock, uBlock (même développeur qu'Adblock et incluant des listes blanches de régies), ainsi que des navigateurs comme Chrome ou Edge.
Notons que Firefox est doté par défaut d'un bloqueur de mineur accessible depuis l'onglet "Vie Privée" :
Conclusion
Il s'agit d'une diffusion d'un programme malveillant volontairement masquée par une insertion dans un code légitime, visant à utiliser le matériel des visiteurs sans leur consentement éclairé en vue de réaliser un gain financier.
Je suis toutefois convaincu que la perception de revenus par minage de cryptomonnaies est une nouvelle voie qu'il convient de prendre en compte pour le financement des sites sur Internet. Pourtant, ce nouveau modèle économique devrait au moins être exploité dans un souci de transparence en avertissant les utilisateurs, et en leur donnant le choix d'accepter ou de refuser l'exécution de tels programmes en arrière-plan sur leurs machines. Aussi, l'activité ne devrait pas occasionner de désagréments dus à la consommation excessive de ressources matérielles, ni risquer une détérioration du matériel.
En l'état, la manœuvre est de facto malhonnête et éthiquement discutable. Nous sommes par conséquent en droit de nous interroger sur le niveau d'implication de 20minutes.fr dans la diffusion de ce code pendant plusieurs jours (voire semaines) via rcijeux.fr. Notons également que de nombreux sites font aussi appel à ce sous-traitant.
Dans le contexte actuel et devant le cumul des mauvaises pratiques de la presse en ligne en matière de mise à disposition du contenu (cela fera l'objet d'un article ultérieur), il est fortement recommandé d'inciter les utilisateurs à adopter de bonnes pratiques de navigation.
C'est-à-dire de les inciter à utiliser de manière systématique des outils garantissant le respect de leur vie privée ainsi que le bon fonctionnement de leurs machines.