
Identifier automatiquement les problèmes de désérialisation dans les applications Java et .NET en utilisant des scans actifs et passifs
Une extension Burp Suite pour aider à détecter et exploiter les bibliothèques/API de sérialisation.
Cette extension utile a été développée à l'origine par Nick Bloor (@nickstadb) pour NCC Group et est principalement basée sur les travaux d'Alvaro Muñoz et Oleksandr Mirosh, Friday the 13th: JSON Attacks, présentés à Black Hat USA 2017 et DEF CON 25. Dans leurs travaux, ils ont passé en revue une gamme de bibliothèques de sérialisation JSON et XML pour Java et .NET et ont découvert que beaucoup d'entre elles supportent la sérialisation d'objets runtime arbitraires, ce qui les rend vulnérables de la même manière que de nombreuses technologies de sérialisation - des fragments de code (gadgets POP) qui s'exécutent pendant ou peu après la désérialisation peuvent être contrôlés via les propriétés des objets sérialisés, ouvrant souvent la voie à une exécution de code ou de commandes arbitraire.
D'autres modules supportant plus de formats, dont YAML et AMF, sont également inclus, basés sur l'article Java Unmarshaller Security - Turning your data into code execution et l'outil marshalsec par Moritz Bechler.
Cette extension Burp Suite implémente à la fois le scan passif et actif pour identifier et exploiter les bibliothèques vulnérables.
Freddy peut détecter passivement l'utilisation de bibliothèques et API de sérialisation potentiellement dangereuses en surveillant les spécificateurs de type ou d'autres signatures dans les requêtes HTTP et en surveillant les réponses HTTP pour les exceptions émises par les bibliothèques cibles. Par exemple, la bibliothèque FastJson utilise un champ JSON $types pour spécifier le type de l'objet sérialisé.
Freddy inclut une fonctionnalité de scan actif qui tente à la fois de détecter et, lorsque c'est possible, d'exploiter les bibliothèques affectées.
Le scan actif tente de détecter l'utilisation de bibliothèques vulnérables via trois méthodes : basée sur les exceptions, basée sur le temps, et basée sur Collaborator.
Dans le scan actif basé sur les exceptions, Freddy insère des données dans la requête HTTP qui devraient déclencher une exception ou un message d'erreur spécifique à la cible. Si ce message d'erreur est observé dans la réponse de l'application, un problème est signalé.
Dans certains cas, des charges utiles basées sur le temps peuvent être utilisées pour la détection car l'exécution de commandes du système d'exploitation est déclenchée lors de la désérialisation et cette action bloque l'exécution jusqu'à ce que la commande OS soit terminée. Freddy utilise des charges utiles contenant ping [-n|-c] 21 127.0.0.1 afin d'induire un délai temporel dans ces cas.
Les charges utiles basées sur Collaborator fonctionnent soit en émettant une commande nslookup pour résoudre le nom de domaine généré par Burp Suite Collaborator, soit en tentant de charger des classes distantes depuis ce nom de domaine dans une application Java. Freddy vérifie les nouveaux problèmes Collaborator toutes les 60 secondes et les marque dans la liste des problèmes avec RCE (Collaborator).
Les cibles suivantes sont actuellement supportées (les italiques sont nouveaux dans v2.0) :
Java
.NET
Publié sous licence AGPL-3.0, voir LICENSE pour plus d'informations
Freddy utilise le système de construction gradle.
Pour construire le jar, il vous suffit d'exécuter gradle jar à la racine.
Cela lancera les tests et, si tout est correct, créera le fichier jar dans le répertoire build/libs.