Speaker: Brian Vermeer
For more see the table of contents
Star Trek
- Everything in Star Trek could be real. And some tech surpassed
- Teleportation would be awesome
- Already have, but for data
Serialization
- Turn object into data stream.
- Send to another system or save on disk
Deseriaization
- Basic serialization is easy. Just implement Serializable
- On deserialization, skips constructor and sets fields directly
- No hash/checksum. Can change in a hex editor.
- Man in the middle attack can change data
- If error reading, get a class cast exception
Libraries
- Anything in classpath could be in memory. Such as library code that will run code for you
- HashMap provides custom implementation for read object
- ysoserial – gadgets for unsafe deserialization.
- examples of issues with frequent issues: jackson, ehcache
- patching to latest helps fix known things
log4j
- 17K packages affected
- 800K attacks in first 72 hours
- 57% have has transitive dependencies
- JNDI looks up and retrieves object
- If own LDAP server can return any object
- Then logger calls
- So passng in the JNDI lookup string can have app do anything
- Showed getting an interactive shell to docker container (which is root)
records
- Does call constructor on serialization
- Opt in – need to implement serializable
- Still call read object
How to improve when writing custom serialization code
- ValidatingObjectInputStream – call accept() with expected type before reading
- ObjectInputFilter.Config.createFilter – allow specific type and deny everything else
- Setting filter on streams overrides global one.
- JEP-415 – OjectInputFilter.Config.setSeriialFilterFactory – let’s you merge the global and local ones
- See blog post
JSON and Jackson
- ObjectMapper has default typing off unless set it to enabled
- With enabled can inject a malicious gadget
YAML
- Deserialization product, but can read
- Can create variables (same problem from XML – billion laughs attack). Reference as *myVarName. Keeps expanding until run out of heap
XML
- Doc type references to read other files and reference has &var;
- On by default on XML Parsers
- Need to explicitly turn it off
Lessons
- Do not deserialize data from unkown soures
- Prevent custom serialization
- Use filters if still need to do so
- Understand settings for JSON/XML/YAML
- Check for insuecre defaults
- Update insecure libraries
Other notes
- Gadget chain – string of side effects
My take
Good intro to serialization. Sad there is no try with resources in the initial write and read examples. The examples were great. Good mix of slides and demos. I’m surprised I’ve gotten this far without seeing a live log4j demo.