[QUOTE=ionutbaiu]Wie handhabt das eigentlich Hazelcast?
Dort müssen ja auch die einzelnen Knoten miteinander Daten austauschen und diese in irgend einer Art und Weise serialisieren.
Das Gefahrenpotential dürfte da ja ähnlich aussehen.[/QUOTE]
Eine interessante Frage und die Antwort ist etwas länger. Nach Aufkommen der letzten Ergebnisse, und das sich alle darauf gestürzt haben, gab es natürlich intern Diskussion. Leider nicht soviel wie ich gerne gesehen habe, aber vermutlich habe ich die Diskussion einfach im Keim erstickt.
Also gut, etwas ausholen:
Wir haben tatsächlich Kunden, man glaube es kaum aus der Finanzwelt heul, die fragen allen Ernstes nach einem Distributed Classloader, weil Classes deployen auf Servern ja immer so lästig ist, besonders in Zeiten von Docker und fertigen Appliances. Wäre es nicht cool man könnte Klassen einfach von irgendwo laden? HOLY C… wer will das schon in einer Bank? Außer den Entwicklern dort?
So also diskutiere ich seit Jahren gegen Distributed Classloadern und erkläre / indoktriniere Entwickler wieso man das nicht will.
Soweit so gut, mit der De-Serialization wäre das Problem noch größer - obviously
Das Problem ist aber wie gesagt nicht neu, schon vor mind. 3 Jahren habe ich gezeigt wie ich mit etwas Langeweile und Bytecode Enhancement/Runtime Generation (das ist was der Transformer ja auch tut) lustige Spielchen treiben kann. Dank Runtime Javascript Engine, ASM oder BCEL (IBM) embedded in der JVM und einigen anderen Tricks (z.B. sun.misc.Unsafe, der SUN Http Client Lib usw) kann man ähnliche Effekte erzielen. Der aktuelle Case zeigt nur wie gefährlich es ist Code UND Daten aus unbekannter Quelle zu vertrauen.
Soviel dazu, zurück zu Hazelcast: Hazelcast kann Java Serialization nutzen, trotzdem - aufgrund der Größe des resultierenden Streams und der Geschwindigkeit … sorry Langsamkeit, raten wir grundsätzlich davon ab. Ich erwähne meistens auch beiläufig die Sicherheitsprobleme, glaube aber nicht, dass die jemand wirklich wahrnimmt - Performance ist ja das Totschlagargument. Ok heißt: Leute sollten keine Java Serialization nutzen, dann eben Kryo - ähnliches Problem - nicht aber soooooo tragisch.
Hazelcast bietet eigene Serialisierungsmechanism an, die erstens auf die beiden Probleme Stream-Größe und Geschwindigkeit optimiert sind aber andererseits (ohne Distributed Classloader) auch keinen unbekannten Code einschleusen können (wenn richtig eingesetzt und ohne Fallback auf Java Serialization). Tradeoff: man schreibt den Serialization Code selber (ähnlich java.io.Externalizable) oder lässt ihn mit Tools generieren (hoffentlich). Aus dem Grund von unbeabsichtigter Java Serialization haben wir in einer der früheren Versionen bewusst das Interface DataSerializable nicht mehr von Serializable abgeleitet. Davor wurde nämlich ein Hazelcast DataSerializable Object mit Java Serialization serialisiert, sobald es in ein Serializable Object gewrapped war. Jetzt fliegt eine NotSerializableException.
Also Conclusion: Hazelcast hat einen eigenen Mechanismus, nicht unbedingt entwickelt für Sicherheit aber spielt dem Ganzen zu. Hazelcast hat weiterhin keinen Distributed Classloader (wie z.B. Apache Ignite/Gridgain und andere) for reasons. Allerdings kann immer noch JavaScript Code eingeschleust werden mit den entsprechenden Vorarbeiten auf Seiten des Entwicklerteams, da man ja „erweiterbar“ sein möchte
Also hat ein Team die Möglichkeit JS Code auf der Serverseite auszuführen hab ich jede Sicherheit verloren und wir sind zurück auf „Never trust any external Code / Data“!
*** Edit ***
[QUOTE=SlaterB;125674]beziehst du dich speziell hier auf commons-collections, also das mit InvokerTransformer?
in der Heise-Meldung freilich genauso, nicht gerade Jahre, aber fast schon ein Jahr:[/QUOTE]
Generell, siehe vorherige Antwort