
Outil d'exploitation des vulnérabilités de désérialisation Java avec des générateurs de charges utiles pour plusieurs marshallers (Jackson, XStream, SnakeYAML) et indirection de référence JNDI pour l'exécution de code à distance.
Si vous êtes ici pour Log4Shell/CVE-2021-44228, vous voudrez peut-être en savoir plus sur les vecteurs d'exploitation et les versions des environnements d'exécution Java concernées : https://mbechler.github.io/2021/12/10/PSA_Log4Shell_JNDI_Injection/
Cela fait plus de deux ans que Chris Frohoff et Garbriel Lawrence ont présenté leurs recherches sur les vulnérabilités de désérialisation d'objets Java, qui ont finalement abouti à ce que l'on peut aisément décrire comme la plus grande vague de bugs d'exécution de code à distance de l'histoire de Java.
Les recherches sur ce sujet ont indiqué que ces vulnérabilités ne sont pas exclusives à des mécanismes aussi expressifs que la sérialisation Java ou XStream, mais que certaines pourraient éventuellement s'appliquer à d'autres mécanismes également.
Cet article présente une analyse, incluant des détails d'exploitation, de diverses bibliothèques de marshalling Java open source qui permettent (ou permettaient) l'unmarshalling de types arbitraires, fournis par l'attaquant, et montre que, quelle que soit la manière dont ce processus est effectué et quelles que soient les contraintes implicites en place, il est sujet à des techniques d'exploitation similaires.
L'article complet est disponible sur marshalsec.pdf
Toutes les informations et tous les codes sont fournis uniquement à des fins éducatives et/ou pour tester vos propres systèmes contre ces vulnérabilités.
Java 8 requis. Compilez avec maven mvn clean package -DskipTests. Exécutez comme suit
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]
où
Les générateurs de payloads pour les marshallers suivants sont inclus :
| Marshaller | Impact du gadget |
|---|---|
| BlazeDSAMF(0|3|X) | escalade JDK uniquement vers la sérialisation Java RCEs de diverses bibliothèques tierces |
| Hessian|Burlap | RCEs de diverses bibliothèques tierces |
| Castor | RCE de la bibliothèque dépendante |
| Jackson | RCE JDK uniquement possible, RCEs de diverses bibliothèques tierces |
| Java | encore une RCE de bibliothèque tierce |
| JsonIO | RCE JDK uniquement |
| JYAML | RCE JDK uniquement |
| Kryo | RCEs de bibliothèques tierces |
| KryoAltStrategy | RCE JDK uniquement |
| Red5AMF(0|3) | RCE JDK uniquement |
| SnakeYAML | RCEs JDK uniquement |
| XStream | RCEs JDK uniquement |
| YAMLBeans | RCE de bibliothèque tierce |
Aucun prérequis.
Prérequis :
Le service à charger est actuellement codé en dur sur javax.script.ScriptEngineFactory.
Prérequis :
Prérequis :
java -cp target/marshalsec-[VERSION]-SNAPSHOT-all.jar marshalsec.jndi.(LDAP|RMI)RefServer <codebase>#<class> [<port>]
Il existe quelques propriétés système qui contrôlent les arguments lors de l'exécution des tests (via maven ou lors de l'utilisation de -a)
Les tests s'exécutent avec un SecurityManager installé qui vérifie l'exécution de commandes système ainsi que l'exécution de code provenant de codebases distantes. Pour que cela fonctionne, la classe chargée en cours d'utilisation doit déclencher une vérification du security manager.