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

Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Deserialization vulns

Aleksei “GreenDog” Tiurinhttps://twitter.com/antyurin

Page 2: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Basics:

Class -> Object

PropertiesMethods

Deserialization vulns

Page 3: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 4: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Various representations of objects:- JSON- XML

- YAML

- Binary

- …

Java has ~ 30 libs (formats, speed, capabilities, size, etc)

Deserialization vulns

Page 5: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Easy, at first glance?

Deserialization vulns

Page 6: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Not so easy:

- Very Complex objects

- Constructor?

- Multiple constructors?

Deserialization vulns

Page 7: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 8: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Not so easy:

- Arbitrary objects with classes from client

- Call methods

Deserialization vulns

Page 9: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 10: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

A lot of libs with various features and implementations

Deserialization vulns

Page 11: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Python Pickle

Deserialization vulns

Page 12: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Python Pickle - do whatever you want

- Arbitrary objects

- Call methods *

Deserialization vulns

Page 13: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java XMLDecoder

Deserialization vulns

Page 14: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java XMLDecoder - XMLJAVA

- Arbitrary objects

- Call arbitrary methods

Deserialization vulns

Page 15: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Node.js node-serialize

- Arbitrary objects

- Function is an object

Deserialization vulns

Page 16: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 17: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Node.js node-serialize – How to implement it secure?

- Execute methods (insecure implemention)- Use Immediately invoked function expression (just add ())

Deserialization vulns

Page 18: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java Jackson (JSON)

- Bean-based

- Default empty constructor

Deserialization vulns

Page 19: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java Jackson

- Bean-based

- Default empty constructor

- Strict type check

=> Safe by default

Deserialization vulns

Page 20: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java Jackson

- Don’t know exact class ?

=> Not so safe if it’s too wide

Deserialization vulns

Page 21: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java Jackson

- Don’t know exact class ?

=> Not so safe if it’s too wide

- Classes with danger stuff in settershttps://github.com/mbechler/marshalsec

https://adamcaudill.com/2017/10/04/exploiting-jackson-rce-cve-2017-7525/

Deserialization vulns

Page 22: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 23: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 24: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java Native Binary

- Create then Cast

=> Any object of known classes

You can implement your own before-deserialization type checker

Deserialization vulns

Page 25: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java Native Binary

- No constructor – readObject

Deserialization vulns

Page 26: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 27: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 28: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 29: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java Native Binary

- ysoserial https://github.com/frohoff/ysoserialCommonsCollections 3.1

CommonsCollections 4.0

Jdk7u21

Spring Framework 4.1.4

Hibernate

… ~ 30 gadget chains

- https://github.com/pwntester/JRE8u20_RCE_GadgetJRE8u20

Deserialization vulns

Page 30: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Java Native Binary

- Look ahead deserialization- Type check before deserialization

- white list

- black list

Deserialization vulns

Page 31: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Deserialization vulns

Page 32: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

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

Page 33: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Conclusion

- We control serialized object

- Basic requirements- Set class/object

- Call method

- Attacks on business logic

- Language independent (Ruby, PHP, .NET, etc)

Deserialization vulns

Page 34: Deserialization vulns - Zeronights 2017 · 2017-11-27 · Various representations of objects: - JSON - XML - YAML - Binary - … Java has ~ 30 libs (formats, speed, capabilities,

Questions?

https://github.com/GrrrDog/ZeroNights-WebVillage-2017

Cheat sheet about Java Deserialization attacks:https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet

Deserialization vulns