Slide 1

Slide 1 text

Deserialization vulns Aleksei “GreenDog” Tiurin https://twitter.com/antyurin

Slide 2

Slide 2 text

Basics: Class -> Object Properties Methods Deserialization vulns

Slide 3

Slide 3 text

Serialization / Deserialization. What is it? Pic from https://www.blackhat.com/docs/us-16/materials/us-16-Kaiser-Pwning-Your-Java-Messaging-With-Deserialization-Vulnerabilities.pdf Deserialization vulns

Slide 4

Slide 4 text

Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities, size, etc) Deserialization vulns

Slide 5

Slide 5 text

Easy, at first glance? Deserialization vulns

Slide 6

Slide 6 text

Not so easy: - Very Complex objects - Constructor? - Multiple constructors? Deserialization vulns

Slide 7

Slide 7 text

Not so easy: - Don’t know exact class User webUser = objectMapper.readValue(json_str, User.class); Host webHost = objectMapper.readValue(json_str, Host.class); Deserialization vulns

Slide 8

Slide 8 text

Not so easy: - Arbitrary objects with classes from client - Call methods Deserialization vulns

Slide 9

Slide 9 text

Not so easy: - Very Complex objects object inside object inside object = Matryoshka - Constructor? Multiple constructors? - Don’t know exact class - Arbitrary objects with classes from client - Call methods - Language features and limitations - etc Deserialization vulns

Slide 10

Slide 10 text

A lot of libs with various features and implementations Deserialization vulns

Slide 11

Slide 11 text

Python Pickle Deserialization vulns

Slide 12

Slide 12 text

Python Pickle - do whatever you want - Arbitrary objects - Call methods * Deserialization vulns

Slide 13

Slide 13 text

Java XMLDecoder Deserialization vulns

Slide 14

Slide 14 text

Java XMLDecoder - XMLJAVA - Arbitrary objects - Call arbitrary methods Deserialization vulns

Slide 15

Slide 15 text

Node.js node-serialize - Arbitrary objects - Function is an object Deserialization vulns

Slide 16

Slide 16 text

Node.js node-serialize Example from: https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/ Deserialization vulns

Slide 17

Slide 17 text

Node.js node-serialize – How to implement it secure? - Execute methods (insecure implemention) - Use Immediately invoked function expression (just add ()) Deserialization vulns

Slide 18

Slide 18 text

Java Jackson (JSON) - Bean-based - Default empty constructor Deserialization vulns

Slide 19

Slide 19 text

Java Jackson - Bean-based - Default empty constructor - Strict type check => Safe by default Deserialization vulns

Slide 20

Slide 20 text

Java Jackson - Don’t know exact class ? => Not so safe if it’s too wide Deserialization vulns

Slide 21

Slide 21 text

Java Jackson - Don’t know exact class ? => Not so safe if it’s too wide - Classes with danger stuff in setters https://github.com/mbechler/marshalsec https://adamcaudill.com/2017/10/04/exploiting-jackson-rce-cve-2017-7525/ Deserialization vulns

Slide 22

Slide 22 text

Java Native Binary - Field-based/Reflection API - No method calls? • java.lang.Object->hashCode(), java.lang.Object->equals(), and • java.lang.Comparable->compareTo() Deserialization vulns

Slide 23

Slide 23 text

Java Native Binary - Field-based/Reflection API - No method calls? • java.lang.Object->hashCode() • java.lang.Object->equals() • java.lang.Comparable->compareTo() • finalize() • … Deserialization vulns

Slide 24

Slide 24 text

Java Native Binary - Create then Cast => Any object of known classes You can implement your own before-deserialization type checker Deserialization vulns

Slide 25

Slide 25 text

Java Native Binary - No constructor – readObject Deserialization vulns

Slide 26

Slide 26 text

Java Native Binary Pic from https://www.rsaconference.com/writable/presentations/file_upload/asd-f03-serial-killer-silently-pwning-your-java-endpoints.pdf Deserialization vulns

Slide 27

Slide 27 text

Java Native Binary - No constructor – readObject OJDBC lib / OraclePooledConnection: - Serialize object - Send it - readObject - SSRF - Exception in Casting Deserialization vulns SSRF via connection string IP:port:anything_here Binary_data+your Text Here …

Slide 28

Slide 28 text

Java Native Binary - Dynamic Proxy support => More gadgets (classes) Pic from https://www.rsaconference.com/writable/presentations/file_upload/asd-f03-serial-killer-silently-pwning- your-java-endpoints.pdf Deserialization vulns

Slide 29

Slide 29 text

Java Native Binary - ysoserial https://github.com/frohoff/ysoserial CommonsCollections 3.1 CommonsCollections 4.0 Jdk7u21 Spring Framework 4.1.4 Hibernate … ~ 30 gadget chains - https://github.com/pwntester/JRE8u20_RCE_Gadget JRE8u20 Deserialization vulns

Slide 30

Slide 30 text

Java Native Binary - Look ahead deserialization - Type check before deserialization - white list - black list Deserialization vulns

Slide 31

Slide 31 text

Pic from https://www.rsaconference.com/writable/presentations/file_upload/asd-f03-serial-killer-silently-pwning-your-java- endpoints.pdf Deserialization vulns

Slide 32

Slide 32 text

Java Native Binary - Everything is broken - RMI - JMX - JNDI + Won’t fix JRE DoSes - JMS + JVM langs: Scala, Groovy, Kotlin… - AFM - *Faces(ViewStates) … Deserialization vulns

Slide 33

Slide 33 text

Conclusion - We control serialized object - Basic requirements - Set class/object - Call method - Attacks on business logic - Language independent (Ruby, PHP, .NET, etc) Deserialization vulns

Slide 34

Slide 34 text

Questions? https://github.com/GrrrDog/ZeroNights-WebVillage-2017 Cheat sheet about Java Deserialization attacks: https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet Deserialization vulns