Les frameworks web Java s'appuient sur des langages d'expression pour déplacer les données entre la requête, le contrôleur et la vue. Un tag de page résout un chemin de propriété, un contrôleur mappe un paramètre de requête sur un graphe d'objets, une annotation nomme une règle à évaluer. Chacun de ces éléments est un moteur d'expression, et lorsque la chaîne qu'il évalue provient des données de requête, la grammaire devient une surface d'exécution à l'intérieur du processus de l'application.
Deux familles apparaissent ici. L'unified EL défini par la pile servlet et partagé par JSP et JSF (${...} en JSP, #{...} en JSF) a été conçu pour lire et écrire des attributs à portée, et à partir d'EL 2.2 il invoque des méthodes, ce qui atteint la réflexion et le runtime de l'hôte. Les moteurs de framework (SpEL dans Spring, OGNL dans Struts2 et l'ancien WebWork, MVEL dans plusieurs couches de binding et de règles) sont des langages objet complets : ils nomment des classes arbitraires, construisent des objets et appellent des méthodes, de sorte que la surface atteignable de base inclut déjà java.lang.Runtime et ProcessBuilder.
Le chemin d'une expression injectée vers l'impact est spécifique au moteur, c'est pourquoi les sous-arbres sont découpés par moteur :
- MVEL : un langage d'expression proche de Java avec un accès direct aux types Java, évalué via
MVEL.evalou une expression compilée. - JSF EL : l'unified EL
#{...}de JavaServer Faces, atteignant les objets à portée pour le contournement d'autorisation et la réflexion pour l'exécution de code. - JSP EL : l'unified EL
${...}de JavaServer Pages, couvrant le contournement d'autorisation et l'exécution de code. - OGNL : l'Object-Graph Navigation Language de Struts2, couvrant une sonde d'évaluation de listage de répertoire, l'exécution de code à distance et l'inclusion de fichier distant.
- SpEL : le Spring Expression Language, couvrant l'exécution de code et le contournement de WAF.
Outils#
- Burp Suite : Repeater et Intruder pour injecter du SpEL, de l'OGNL, du MVEL et de l'unified EL.
- J2EEScan : extension Burp avec des contrôles actifs d'injection EL et OGNL.