Hlavní navigace

Názor ke zprávičce Bezpečnostní díra v Java knihovně ohrožuje stovky aplikací od Filip Jirsák - Uživatel se k serializovaným datům vůbec nemá dostat! V...

  • 9. 11. 2015 14:02

    Filip Jirsák

    Uživatel se k serializovaným datům vůbec nemá dostat!
    V tom případě ale nemůžete spouštět aplikaci na počítači uživatele. Nebo-li tu aplikaci nebude moci nijak používat. Třeba i webová stránka jsou serializovaná data uživatele. Je potřeba rozlišovat mezi obecným termínem serializace, a standardní Java serializací založenou na rozhraních java.io.Seria­lizable a java.io.Exter­nalizable. Podobnou chybu samozřejmě mohou mít i jiné způsoby serializace, ale serializace do webových stránek a formulářů takovouhle chybu nemá.

    Problém ve skutečnosti není v tom, že jsou serializovaná data u uživatele, ale v tom, co se s nimi při deserializaci provádí. Pokud deserializujete jenom hodnoty datových entit, problém v tom není a musíte na serveru hlídat akorát to, že je datový typ správný, má správný rozsah a případně splňuje další požadavky (rozsah hodnot apod.). Problém je, že při standardní Java serializaci se serializuje i jméno třídy, takže útočník může podstrčit instanci jiné třídy se stejným rozhraním, která je k dispozici na classpath, a pokud se pak provede na té deserializované instanci kód, provede se na té neočekávané třídě (tedy pořád je to kód, který je na serveru, nemůže si útočník podstrčit svůj – ale může to být kód, který v daném kontetxu nikdy neměl být volán). Další možnost je, že by se serializovaná data načítala přímo jako bajtkód, ale to snad nikdo soudný neudělá (už jenom proto, že vnutit do JVM přímo z aplikace svůj bajtkód není úplně triviální, a pokud to někdo dělá, tak snad ví, co dělá).