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

JavaScript képekben

2009.02.12. 19:23 | buherator | Szólj hozzá!

Egy régi téma aktualizált változata jelent meg nem olyan régen a heise-online-on, most pedig végre van egy kis időm, hogy összefoglaljam nektek a cikk tartalmát. A probléma az Internet Explorer 7-es (legfrisseb stabi)l változatát, valamint néhány korábbi verziót érint, és lehetővé teszi, hogy speciális tartalmú képeken (valójában elméletileg minden HTML oldalba beágyazódó objektumra működhet a megoldás) keresztül pl. JavaScript kódot futtassunk az áldozatok böngészőjében. Ilyen módon valószínűleg sok olyan tartalommegosztó szolgáltatáson keresztül propagálhatók kártékony kódok, melyek elvileg minden elvárható szűrést elvégeznek a rájuk feltöltött tartalmakon.

Mielőtt a konkrét problémára rátérnénk, célszerű tisztába kerülni azzal a ténnyel, hogy nincs szükségszerű összefüggés egy fájl kiterjesztése és formátuma között. Amikor egy böngésző letölt valamilyen webes tartalmat, alapesetben a következő információk alapján döntheti el, hogy az érkező bitsorozatot hogyan dolgozza fel:

  • A webszerver által HTTP fejlécben visszaadott Content-type mező értéke alapján - ez a MIME típus.
  • A szintén HTTP fejlécben kapott fájlnév kiterjesztése alapján
  • A fájl (pontosabban boundary) tartalma alapján 

Az utolsó lehetőség nyilván egy igen erőforrásigényes feladat lenne, ha a fájl egészét akarnánk vizsgálni, ami rosszat tenne a felhasználói élménynek, ezért a böngészők általában csak a fájlok első néhány bájtját (az ún. aláírást) vizsgálják, ahol a szabványok amúgy is előírják bizonyos azonosítók használatát (pl. 0x89504e47... a PNG formátum esetén). Emellett az Internet Explorer 4-es verziójától kezdődően a böngésző mind az első 256 bájtot csekkolja biztos ami biztos alapon, ez a MIME sniffing.

A MIME sniffing segítségével egyrészt felül lehet kerekedni a rosszul konfigurált webszerverek hülyeségein (rossz MIME típus jön vissza stb...), másrészt ez a módszer védelmet nyújt a böngésző automatikus futtatási mániáit kihasználó támadásokkal szemben is. Ugyanakkor ez az a tulajdonság ami a mi kis bajunkat is okozza.

Hatékonygái okokból mind a 256 bájt akkor kerül ellenőrzésre, ha a Content-Type, a kiterjesztés és az első néhány bájt különböző fájltípusra utal (valamint a fájlt közvetlenül érjük el, de ez most nagyjábl mindegy). A fájltípusok közül pedig - végtére is egy webböngészőről van szó! - a HTML van előnyben részesítve. Így ha sikerül zavart okoznunk az Erőben, azaz a fenti három adat közül valamelyik kettő különbözik, és az első 256 bájt valamilyen HTML-szerű karaktersorozatot is tartalmaz, a böngésző az objektum renderelése helyett le fogja futtatni a benne rejtőző kódot.

Íme egy példa a heise-től, melyben egyszerűen lecserélték a PNG formátumú fájl kiterjesztését .jpg-re, az aláírás maradt változatlan, így viszont az állomány elején - méghozzá a szabályos PNG fejléc részeként - található rövid HTML kódot annak rendje és módja szerint lefuttatja az arra nyitott böngésző.

Az IE 8 meg fogja oldani a problémát a MIME sniffing kikapcsolásával, valamint néhány zárt header bevezetésével. Azok a fejlesztők, akik nem szeretnék hagyni, hogy ilyen úton kerüljön káros tartalom az általuk készített rendszerekbe, jó ha beraknak néhány plusz ellenőrzést a feltöltött fájlok tartalmára vonatkozóan: például a már említett aláírás és a kiterjesztés összehasonlításával, vagy az első 256 bájt HTML tartalomra való ellenőrzésével* vehetjük elejét a problémának.

Remélem tartamlasan szórakoztatok, ha midnen jól megy, lesz még hasonló nem sokára!

*Jó ötlet lehet még a fájlok automatikus konvertálása (ahogy azt az Indafotón is csinálják ;), de ez természetesen nem alkalmazható minden esetben.

Címkék: javascript internet explorer xss

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.

Nincsenek hozzászólások.