abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 03:11 | Nová verze

    Program pro generování 3D lidských postav MakeHuman (Wikipedie, GitHub) byl vydán ve verzi 1.3.0. Hlavní novinkou je výběr tvaru těla (body shapes).

    Ladislav Hagara | Komentářů: 0
    včera 23:11 | Bezpečnostní upozornění

    Intel vydal 41 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20240514 mikrokódů pro své procesory řešící INTEL-SA-01051, INTEL-SA-01052 a INTEL-SA-01036.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | IT novinky

    Společnost Raspberry Pi patřící nadaci Raspberry Pi chystá IPO a vstup na Londýnskou burzu.

    Ladislav Hagara | Komentářů: 0
    včera 13:22 | IT novinky

    Google na své vývojářské konferenci Google I/O 2024 představil řadu novinek. Keynote byl věnován umělé inteligenci (DeepMind, Gemini, Responsible AI).

    Ladislav Hagara | Komentářů: 1
    včera 12:33 | Bezpečnostní upozornění

    V Gitu bylo nalezeno 5 zranitelností. Opraveny jsou ve verzích 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 a 2.39.4. Útočník může připravit repozitář tak, že při jeho klonování (git clone) může dojít ke spuštění libovolného kódu.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | IT novinky

    Virtualizační softwary VMware Workstation Pro a VMware Fusion Pro jsou nově pro osobní použití zdarma. Softwary VMware Workstation Player a VMware Fusion Player končí.

    Ladislav Hagara | Komentářů: 2
    včera 02:11 | Nová verze

    Linuxová distribuce Endless OS (Wikipedie) byla vydána ve verzi 6.0.0. Přehled novinek i s náhledy v příspěvku na blogu, poznámkách k vydání a také na YouTube.

    Ladislav Hagara | Komentářů: 0
    14.5. 15:44 | Nová verze

    Byl vydán Mozilla Firefox 126.0. Přehled novinek v poznámkách k vydání, poznámkách k vydání pro firmy a na stránce věnované vývojářům. Vylepšena byla funkce "Zkopírovat odkaz bez sledovacích prvků". Přidána byla podpora zstd (Zstandard). Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 126 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    14.5. 15:22 | Nová verze

    Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 11.0. Přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    14.5. 14:55 | Nová verze

    Byla vydána nová verze 24.0 linuxové distribuce Manjaro (Wikipedie). Její kódové jméno je Wynsdey. Ke stažení je v edicích GNOME, KDE PLASMA a XFCE.

    Ladislav Hagara | Komentářů: 2
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (74%)
     (5%)
     (10%)
     (10%)
    Celkem 279 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    Rozcestník

    Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací

    Několik oblíbených aplikací založených na Javě je zasaženo závažnou zranitelností, která může být využita útočníkem ke vzdálenému spuštění libovolného kódu. Chyba v oblíbené Java knihovně Apache Commons Collections se týká mimo jiné i produktů Oracle WebLogic, IBM WebSphere, Red Hat JBoss, Jenkins, nebo OpenNMS. [CSIRT.CZ]

    9.11.2015 22:33 | Ladislav Hagara | Bezpečnostní upozornění


    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    10.11.2015 08:27 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Ta chyba ve skutečnosti není v knihovně Apache Commons Collections, ta je pouze jedním z možných nástrojů k provedení té chyby. Chyba je především v aplikacích, které používají serializaci java.io.Serializable na data, která může útočník změnit. A největší podíl na té chybě pak má asi třída sun.reflect.an­notation.Anno­tationInvocati­onHandler, která při deserializaci volá kód deserializovaných tříd. Princip té chyby je vysvětlený např. v diskusi na Rootu – ten originální popis zranitelnosti odkazovaný ve zprávičce je zmatený a velmi neúplný.
    10.11.2015 09:26 sid
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Ono skor mi to pride ako reklama na tu firmu co to nasla ako nejaky naozaj realny problem. Navyse stupidne preskenovat github na vyskyt kniznice co s tym nemam nic spolocne mi pride ako naozaj seriozne vyrabanie poplasnej spravy. Nabuduce niekto napise, ze ssh obshauje zavazny bezpecnosty problem a potom malym pismom tam napise, ze sa dostali na stroj lebo uzivatel zvolil heslo 1234.
    11.11.2015 13:40 kukacka
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Tak to uplne pravda neni, ta knihovna minimalne obsahuje prostredky, ktere maji potencial k temto utokum. Viz ten priklad s LazyMap, kde lze dodavat transformer "rizeny daty", ktery na vyzadani vytvori hodnotu. Pochopitelne pokud takova mapa ma byt serializovana, tak se ten popis musi serializovat a lze ho zmenit. Knihovna to tezko muze resit jinak, pokud chce dosahnout takove funkcionality, z meho pohledu je ale problem v tom, ze takovou funkcionalitu vubec poskytuje, je to prasarna a domyslet dusledky (zde bezpecnostni) nemusi byt vubec snadne - programator nemusi vubec sam tu pochybnou variantu LazyMap pouzivat, ale deserializaci se mu tam dostane jen na zaklade toho, ze v knihovne je k dispozici.
    11.11.2015 16:51 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Tříd, které je možné takhle zneužít, najdete ve všech možných knihovnách spoustu, i v samotné runtime knihovně (tam jich možná bude nejvíc). To, že takovou funkcionalitu ta knihovna obsahuje, je v pořádku – nemůžete navrhovat knihovny s tím, že by se při špatném použití mohla nějaká třída zneužít. To byste skončil s prázdnou knihovnou.
    10.11.2015 15:42 Petr Holik
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Cela ta domnela chyba je nesmyslna, a proto neni a podle me ani nebude opravena. Kdyz ponecham nejaky kanal bez hesla, tak se celkem nelze divit, ze ho lze pouzit ke spusteni kodu. Jde to i jednoduseji, serializace v Jave umoznuje serializovat cele klasy a ty muzou implemetovat DefaultReadObject, kde muzu provadet libovolne brikule(proto se tam take nastavuje autentifikace, ze?). Je to asi jako by autor testoval, ze kdyz v popularnich databazich necham pristup po siti bez hesla, tak ze dokaze vytvorit na fileystemu soubor. A pak hrde psal expoloity ve stylu:

    select * from student; exec('touch /tmp/hacked')

    10.11.2015 18:09 Matlák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Asi tak nějak. Ale cvičení je to hezké... asi jako když někdo demonstroval, jak dokáže pomocí MITM cpát humus do statických bloků tříd v JARech přenášených Mavenem po nešifrovaném HTTP.
    11.11.2015 10:38 andrej
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    to mi pride ako fajn ukazka, hlavne pre klientov slovenskeho danoveho systemu kde pre vykazovanie dph musia ludia pouzivat software ktory robi java webstart a taha jnlp cez http spojenie.

    niekolko krat som to reportoval ako bug, jedinym "vylepsenim" bolo ze ten jnlp webstart sa chvilu stahuval zo selfsigned https stranky (!), ale v jnlp subore bolo a je codebase="http://edane.drsr.sk/install/java/" a stale su teda pouzivane tie iste http linky na binarky.
    10.11.2015 18:19 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    serializace v Jave umoznuje serializovat cele klasy
    Jste si tím jist? Samozřejmě pokud vynecháme různé triky s classloadery – což je ale vlastnost těch classloaderů a ne serializace.
    10.11.2015 21:27 Petr Holik
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Abych byl uplne presny, tak dynamicky download class je az vlastnost RMI. viz Dynamic code downloading using Java RMI . Tzn pres RMI(ktere pouziva java serializaci) muzu uplne klidne invokovat runnable, ktere vytvorim na klientu stahne se classa na server a tam se provede a vysledek se vrati zpatky.

    Nic to ale nemeni na tom, ze RMI potazmo serializace je protokol, ktery urcen pro komunikaci pro v ramci interni site(napr. uz jenom proto ze RMI zabaluje do stubu IP adresy serveru(i pokud je za NATem)). Mezi duveryhodnymy klienty. Pokud tedy ale necham bez hesla administracni konzoli, tak se nemusim patlat s timto "exploitem" a rovnou pouziju ofiko klient, kde s vetsinou aplikacu udelam, co budu chtit s nepomerne vetsim komfortem.

    Jedina situace, kde je to zneuzitelne(IMO) je tedy pokud se zmocnim stroje, kde bezi klient(coz je typicky jiny aplikac, pripadne jenkins slave). Ale pokudu jsem na slavu nebo na jinem aplikaci, tak uz jsem stejne ukradl zdrojaky, pripadne ziskal heslo do db. Takze nazyvat to exploitem je podle me delani z komara velblouda.

    Mozna to je take duvod pro to nikdo "neopravuje".

    Necet jsem ten clanek uplne do superpodrobnosti, ackoliv se v uvodu chvastaji 'pre-authentication, remote code execution exploits' tak mi MITM s BURPEM do SSL sifrovaneho spojeni IMO neprijde pre-authentication v pravem slovasmyslu.

    Opravte me pokud se mylim. :)
    11.11.2015 00:03 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    RMI potazmo serializace je protokol, ktery urcen pro komunikaci pro v ramci interni site
    Opravdu je dobré rozlišovat serializace (obecnou) a serializaci Java objektů definovanou ve specifikaci jazyka a reprezentovanou rozhraním java.io.Serializable. Potenciálně nebezpečná je každá deserializace, ale udělat bezpečně tu Java-deserializaci je skoro nemožné, zatímco udělat bezpečně deserializaci dat odesílaných klasicky z webového formuláře zvládne skoro každý, pokud není úplný hlupák nebo programátor PHP redakčních systémů.
    pokud se zmocnim stroje, kde bezi klient
    V případě aplikace s tlustým klientem to může být kdokoli s tím tlustým klientem, případně další lidé, kteří jsou třeba ve stejné síti. No a k těm aplikačním serverům často bývají tlustí klienti, což je přesně ten postup, kterým ty aplikační servery napadli. Takže zas tak bezzubé to není.
    Mozna to je take duvod pro to nikdo "neopravuje".
    On „to“ nikdo neopravuje především proto, že příčina je úplně někde jinde, než plyne z toho oznámení. A skutečná oprava bude nejspíš znamenat použít jiný protokol, což není záležitost na pár dní.
    Necet jsem ten clanek uplne do superpodrobnosti
    Podle mne o nic nepřijdete, když ho číst nebudete – přečtěte si radši ten komentář na Rootu, který jsem odkazoval. Tam je podstata problému vysvětlená, na rozdíl od toho oznámení od FoxGlove, kde se vysvětlení podstaty problému úspěšně vyhnuli a ze tří postupně navazujících podmínek, které musí být splněny, aby bylo možné útok provést, jmenují jenom jeden konkrétní případ té třetí (knihovna Apache Commons Collections), přičemž podobné útoky půjde udělat i s jinými třídami.
    11.11.2015 05:29 Matlák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    udělat bezpečně tu Java-deserializaci je skoro nemožné

    I při deserializaci Java objektů jde předem stanovit, jaké datové typy smí deserializer použít a ostatní prohlásit za zapovězené. Deserializace objektů v Javě není jen ObjectInputStream. To je jen pohodlnost vývojářů těch zmiňovaných projektů, že pro kanál, předem prohlášený za "administrační" a bezpečný, používají takovéhle zkratky (opravdu by mě nenapadlo vyrobit z živého objektu binární blob, ten převést do base64 a poslat po veřejné síti na Java-based server, ale chápu ten "přínos" ve zjednodušení vývoje).
    little.owl avatar 11.11.2015 21:51 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    pokud není úplný hlupák nebo programátor PHP redakčních systémů.
    Nebo ucitel telocviku :-).
    A former Red Hat freeloader.
    11.11.2015 14:05 kukacka
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    To je ovsem prehnane - serializace v jave neumoznuje vzdalene podstrcit tridu, ktera neni na classpath. Takze pokud nemam tridu, umoznujici "spusteni" ciziho kodu, tak se mi tam prostou deserializaci podstrceneho obsahu rozhodne nespusti. Problemem te zminovane knihovny je, ze takovou tridu obsahuje - neni asi jedina, ale v tomto smyslu opravdu je nebezpecna.
    11.11.2015 16:56 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Ne, ta knihovna Apache Commons Collections pokud vím neobsahuje třídu, která by umožnila spustit třídu, která je na classpath. Takové třídy najdete jinde, třeba v runtime knihovně. Ta třída z ACC umožňuje „jen“ spouštět kód, která je na classpath – i to ale je dost velký průšvih (z nejprofláklejších třeba System.exit() nebo Runtime.exec(), z aplikačního kontextu může jít vyzvednout libovolný objekt, třeba databázové spojení…).
    12.11.2015 09:12 kukacka
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Problem te knihovny je, ze volani nebezpecnych funkci typu Runtime.exec sestavuje "textove", tzn. nikde v aplikaci zadny kod, ktery by to volal, nemam, ale utocnik mi ho muze zavolat, pokud pouzivam serializaci - viz ta ukazka. Neni pravda, ze, jak se pise vyse, bych bez takove pochybne funcionality skoncil s prazdnou knihovnou - osobne by me nenapadlo, ze v knihovne pro kolekce podobna zalezitost vubec bude. Pokud si takovou funkcionalitu do knihovny zavedu, tak se moznosti jejiho zneuziti posouvaji radove. U normalni knihovny pro kolekce bych mohl maximalne podhodit vadna data, coz by vadilo jen do te miry, jak je ta aplikace dulezita a co realne dela. Tedy napr. aplikaci pro hrani piskvorek bych mohl napadnout treba tak, ze by svindlovala, ale ne tak, ze by mi smazala disk. Tzn. z meho pohledu se jedna o navrhovou chybu v knihovne, to ze jde zneuzit jen ve spojitosti s dalsimi chybami (nezabezpecne spojeni, moznost podvrzeni te serializovane formy) na tom nic nemeni.
    12.11.2015 10:18 sid
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    A ako inac by to asi zostavovala ked sa jedna o reflection??? Ked chcete vytvorit nejaku triedu pomocou reflection tak asi tazko sa vyhnete textovemu zostaveniu. Ci mate nejaky postup ako ma vytvorit cudzie triedy bez reflection alebo keby sme chceli to dohnat do extremu bez classloadingu a byte code manipulation (co ale tiez je dynamicky robene ako reflection)?
    12.11.2015 12:21 kukacka
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    No ano, co ja tvrdim je, ze takova vec nema v te knihovne co delat, je to obecne bezpecnosti riziko a realne to "nikdo" nepotrebuje. Pokud to potrebuje, melo by to byt samostatne.
    12.11.2015 12:53 sid
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    stale podla mna si zamienate pricinu a nasledok. To je ako skuhrat na to co robi rm -rf / ked pritom primarny problem je v tom, ze heslo na shell je nejake legendarne ako "nbusr123". Podla vasej teorie je ale rm bezpecnostne riziko. Ked je programator blbec tak ho tazko dokazete izolovat od vsetkych nebezpecnych veci ktore mozu nastat.
    12.11.2015 16:40 kukacka
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    rm v shellu byt rekneme musi vzhledem k tomu, co se od nej bezne ocekava za funcionalitu. Zatimco trida, reprezentujici kolekci, ktera pri vraceni prvku vola v principu libovolne metody na zaklade textoveho vstupu, v java aplikaci byt rozhodne nemusi, alespon ja jsem nikdy takovou nepotreboval. A ano, jestlize mi operace s kolekci umoznuje zavolat rm, tak to povazuji za vazne bezpecnostni riziko. A jiste se muzeme bavit o tom, ze kdyby aplikace bezela ve spravne nastavenem sandboxu, tak to rm nemuze napachat velkou skodu, na principu problemu to ale nic nemeni. Nemam problem s reflexi, ale toto je opravdu misto, kde bych ji neocekaval, a uvedeny priklad ilustruje, jak lze podobnou vec zneuzit, jisteze pri soubehu s dalsimi okolnostmi - to je ovsem pro bezpecnostni problemy typicke.

    V jave, ktera nema buffer overflow, je i pro programatora uplneho blbce obtizne naprogramovat kod, umoznujici pozmenenim nejakeho vstupu spusteni OS prikazu. Kazdy programator dela chyby a cim mene prostredku pro jejich zneuziti existuje, tim lepe. Spise nez analogie se shellem se zde nabizi treba dynamicke generovani selectu z uzivatelskych vstupu. Mohu si na to treba navrhnout knihovnu, ktera osetri "vsechny" mozne problemy, aby nemohlo dojit k SQL injection, a pak ji pouzivat. Nebo to mohu udelat zcela bez dynamickeho sestavovani dotazu. Ktera z variant bude vuci SQL injection principialne odolnejsi? Az spravce spatne nakonfiguruje webserver a pusti ho na http, utocnik pozmeni obsah requestu a smaze to celou databazi, bude na vine pouze ten spravce, nebo i junior, kdo spatne implementoval osetreni vstupu v te me knihovne, nebo i ja, ktery jsem takovou architekturu navrhl do reseni?
    12.11.2015 17:47 Sid
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Takze ked budete mat volanie api ktore nema byt smerom von publikovane a niekto ho publikuje a to volanie vymaze vsetko tak asi budete idiot vy? Ta kniznica robi to co ma a chyba je uplne inde. Stale ma zaujima ako chcete ochranit reflection v obecnej kniznici, skuste s tym najprv robit a potom filozofovat. Nabuduce skuste zrusit common lang lebo dokaze menit property. Hroza
    12.11.2015 14:55 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Textově si volání Runtime.exec můžete sestavit z Class.forName(), Class.getMethod() a Method.invoke(). Tyhle třídy jsou dostupné dokonce v runtime knihovně. Ty by se také měly odstranit? Takhle můžeme pokračovat dál, musel byste odstranit celou reflexi a vše týkající se classloaderů. Minimálně.
    osobne by me nenapadlo, ze v knihovne pro kolekce podobna zalezitost vubec bude
    Podobné věci najdete ve spoustě dalších knihoven. Chyba není v těch knihovnách, ale ve vaší domněnce, že je to nějak výjimečný kód.
    Tzn. z meho pohledu se jedna o navrhovou chybu v knihovne
    To je ale váš chybný pohled, Java nikde nezaručuje, že budete mít běhové prostředí, ve kterém můžete zavolat libovolný kód a bude to bezpečné. Obrovské množství nebezpečných tříd máte přímo v běhové knihovně (rt.jar). Pro zajištění bezpečného prostředí v Javě můžete použít bezpečnostní politiku (java.lang.SecurityManager), ta vám umožní to bezpečné běhové prostředí vytvořit. Používá se to třeba v Java Pluginu (applety a Web Start). Používají to i aplikační servery, ale obvykle k ochraně aplikačního serveru před nainstalovanými aplikacemi – tato chyba ukázala, že by by měl být aplikační server chráněn i před vlastní administrací…
    12.11.2015 16:54 kukacka
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Vubec se nedomnivam, ze jde o vyjimecny kod, setkavam se s takovym denne. Ovsem obvykle tam, kde ma smysl. Coz podle meho nazoru naprosto neni v nejake LazyMap - to je ale samozrejme vec nazoru, nekdo si treba na podobne srandicky potrpi. Ovsem pak musi domyslet, co tomuze mit za dopady, a to enni lehke - viz tento priklad, kde se ve vysledku zavola OS prikaz. Ano, jsou tam dalsi podminky, ale opravdu tezko sestavite podobny exploit aplikace jen na zaklade toho, ze existuje Runtime.exec - nebo ano?
    12.11.2015 18:15 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Tak si nejprve zjistěte, jak ten exploit vlastně vypadá a jaké třídy používá. Odkaz jsem sem už dával. LazyMap funguje tak, že dostane klíč, zavolá na něm příslušný transformer a jeho výsledek vrátí jako hodnotu k tomu klíči. Co vám na tom připadá nesmyslného, co jiného by měla dělat LazyMap? Ta samé dělá třeba metoda Stream.map() v Javě 8. InvokerTransformer funguje tak, že má zadán název nějaké metody, a transformaci provádí tak, že na vstupu dostane nějaký objekt, přes reflexi na něm zavolá tu zadanou metodu, a její výstup vrátí jako výstup transformace. Co je na tomhle transformeru nesmyslného?
    Ovsem pak musi domyslet, co tomuze mit za dopady, a to enni lehke
    Ten transformer je v podstatě jen omáčka okolo Class.getMethod().invoke(). Takže pokud by se někdo měl zamýšlet nad dopady, museli by to být autoři tříd Class a Method. Přičemž takovéhle dopady mají třeba desítky nebo stovky metod jenom z runtime knihovny. Co byste s tím chtěl dělat? Redukovat celou Jav na dvě bezpečné třídy Integer a Long?
    opravdu tezko sestavite podobny exploit aplikace jen na zaklade toho, ze existuje Runtime.exec - nebo ano?
    Základem toho exploitu je třída sun.reflect.an­notation.Anno­tationInvocati­onHandler, která při deserializaci volá metodu get() deserializovaných objektů. To je to klíčové místo, kde se z deserializace stane vykonávání kódu. Ty třídy z ACC jsou pak už jenom nástrojem, jak z volání Map.get() udělat volání jiné metody. Ale implementací různých map, které půjde zneužít podobným způsobem, bude spousta.

    A spousta bude i tříd jako Anno­tationInvocati­onHandler, které při deserializaci volají nějaký kód. Potenciálně nebezpečná je každá třída, která implementuje některé z rozšiřujících metod pro deserializaci, protože každá z nich může vyvolávat nějaký kód – a většina z nich to nejspíš dělá, jinak by nebyly potřeba.
    12.11.2015 20:46 kukacka
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Opravdu si nemyslim, ze "bude spousta" implementaci map, ktere by sly zneuzit podobnym zpusobem. Nebo mate nejakou jako priklad? LazyMap lze obecne realizovat klasickymi callbacky a tam vam svuj kod nikdo nepodstrci, protoze se nikam neserializuje. Coz je zde podstata problemu - pro exploit je vedle jineho potreba mit k dispozici tridu, ktera je "ochotna" zavolat reflexi kod, ktery se ji pripravi v serializovane forme, tzn. nikdy nebyl v zadne forme pritomen v puvodni aplikaci. Ani v tom prikladu to neni uplne trivialni, ale lze to podstracit, jak tam ukazuji. Znate jine tridy, jejichz metoda get() ma podobne vlastnosti?
    13.11.2015 06:33 Matlák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Z mého pohledu je celý problém tohohle exploitu jenom a pouze v kontrole vstupů. Když dělám protokol na komunikaci mezi klientem a serverem (masterem a slavem, čímkoli), nekontrolovat vstupy mi připadá jako absolutní hazard. A to je přesně to co zmiňované aplikace dělají. Těžko se mi chce uvěřit, že téměř doslova webservice (třeba to jenkins-cli) potřebuje použít na serializaci během neautorizovaných operací něco obecnějšího než třeba JAXB.

    To co předvádějí ty aplikace je srovnatelné s tím, že mám třeba node.js nebo PHP server a v něm přijímám požadavky tak že si předem nekontroluju nic, na data co přijdou od (neautorizovaného) klienta volám eval() a očekávám že mi přijdou jen "nějaké" (nikde viditelně zdokumentované) vstupy. Třešničkou na dortu jsou ukázky na foxglove kde je moc hezky vidět jak nechutně to ten královsky placený vývojář z oraclu odflákl a do celkem přehledného protokolu začal cpát obecné objekty narvané do base64 (!), když by měl mít přesně definované komunikační API z jehož tcpdumpu by alespoň v případě problémů bylo na pohled poznat co se posílalo.

    Řekl bych že drtivá většina frameworků, na kterých se staví v Javě webservices stojí a padá s tím, že při deserializaci rovnou řeknu co chci aby na výstupu bylo a když se to do toho boundary nevejde tak to spadne. Není to ani moc práce navíc pro aplikačního vývojáře, když už byl dost líný na to aby mezi klientem a serverem sdílel nějaké package (což při použití ObjectInputStream nakonec musí taky). Ve většině případů by ale nic sdílet nemusel a použil by SOAP který velmi přesně definuje co se po síti bude posílat, a jak ten protokol funguje z toho WSDL pak pozná i polodementní opice.
    13.11.2015 08:41 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Když dělám protokol na komunikaci mezi klientem a serverem (masterem a slavem, čímkoli), nekontrolovat vstupy mi připadá jako absolutní hazard. A to je přesně to co zmiňované aplikace dělají.
    Podle mne jsou ty chyby způsobené tím, že si autoři toho kódu neuvědomili, že jim útočník může do vstupu vložit jinou třídu, která napáchá škody už během deserializace. Útočníkovi už pak může být jedno, že celá deserializace nakonec skončí ClassCastException (pokud se ta deserializace vůbec dokončí).

    Jinak ta Java serializace se většinou používá v případech, kdy těch serializovaných typů může být spousta a jejich množina je předem neznámá (RMI, JMX). Takže si moc nedovedu představit, že by se tam dělal nějaký white-list povolených tříd. I když asi by bylo možné kontrolovat, zda načítaná třída neimplementuje rozšířené metody pro deserializaci, a udělat white-list teprve těch tříd, které ty rozšířené metody implementují a přesto je jejich deserializace za všech okolností bezpečná. Ale upřímně řečeno, takovouhle implementaci měl mít už ObjectInputStream, a ten současný ObjectInputStream měl být jeho předek pojmenovaný UnsafeObjectInputStream. Nebo něco takového. Protože se nedá očekávat, že každého napadne, že aby to bylo bezpečné, musí správně přetížit metody resolveClass() a resolveProxyClass(). Navíc ty metody ani neumožňují vyhodit SecurityException, takže s jejich použitím pro kontrolu vstupu nejspíš nepočítali ani sami autoři Javy.
    13.11.2015 07:08 Filip Jirsák
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    LazyMap lze obecne realizovat klasickymi callbacky a tam vam svuj kod nikdo nepodstrci, protoze se nikam neserializuje.
    LazyMap z ACC je realizováno klasickými callbacky a nikam se neserializuje.
    Coz je zde podstata problemu
    Opravdu nemá smysl bavit se o tom konkrétním exploitu a třídách z ACC, když nevíte ani základní princip fungování toho exploitu ani jste se nepodíval na zdrojáky těch tříd z ACC.
    pro exploit je vedle jineho potreba mit k dispozici tridu, ktera je "ochotna" zavolat reflexi kod, ktery se ji pripravi v serializovane forme, tzn. nikdy nebyl v zadne forme pritomen v puvodni aplikaci.
    Třeba třídy java.lang.Class a java.lang.Method. Už jsem se vás ptal, co chcete dělat s nimi.
    Znate jine tridy, jejichz metoda get() ma podobne vlastnosti?
    Vím, že metoda LazyMap.get() tyhle vlastnosti nemá. Tady máte její kód, abyste se na něj konečně podíval:
    protected final Transformer factory;
    
    @Override
    public V get(final Object key) {
        // create value for key if key is not currently in the map
        if (map.containsKey(key) == false) {
            @SuppressWarnings("unchecked")
            final K castKey = (K) key;
            final V value = factory.transform(castKey);
            map.put(castKey, value);
            return value;
        }
        return map.get(key);
    }
    11.11.2015 14:31 tom
    Rozbalit Rozbalit vše Re: Chyba umožňující vzdálené spuštění kódu byla nalezena v serverových částech Java aplikací
    Kdyz jsem nekdy pred 15 lety delal stranky v Perlu, tak tam byl taint rezim, kterej znemoznil nacpat vstup programu do potencialne nebezpecnejch funkci. To v ty Jave neni nic podobnyho, co by proste zabranilo spustit data, co pritecou ze site?

    Založit nové vláknoNahoru


    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.