La bibliothèque standard de Java cache un compilateur JIT pour traiter les programmes XSLT non fiables. Cette vulnérabilité, CVE-2022-34169, était causée par une erreur de troncature d'entier dans le compilateur JIT. Elle permet l'exécution de code arbitraire dans les applications web et les fournisseurs d'identité basés sur Java qui prennent en charge l'authentification unique SAML.
Les signatures XML sont largement utilisées dans SAML, un standard pour l'authentification des utilisateurs dans les applications web. SAML implique l'échange de documents XML entre le fournisseur de services (application) et le fournisseur d'identité (IdP). Les signatures XML garantissent l'intégrité de ces documents.
Pour vérifier les signatures XML, l'application doit exécuter des transformations contrôlées par l'attaquant sur des entrées contrôlées par l'attaquant. L'une de ces transformations est XSLT, un langage de programmation XML puissant.
L'implémentation de XSLT en Java utilise un compilateur JIT pour exécuter les programmes XSLT. Cependant, ce compilateur JIT avait une erreur de troncature d'entier qui pouvait être exploitée pour obtenir l'exécution de code arbitraire.
La vulnérabilité a été corrigée en juillet 2022 pour OpenJDK et en septembre 2022 pour Apache BCEL. Bien que cette vulnérabilité spécifique soit résolue, les chercheurs s'attendent à de nouvelles vulnérabilités similaires dans SAML en raison de la complexité inhérente de la validation des signatures XML.
Cette vulnérabilité met en évidence l'existence de vulnérabilités de langage sécurisé en mémoire malgré leur fréquence plus faible par rapport aux problèmes de sécurité en mémoire dans les bases de code C ou C++.
Le processus de validation des signatures XML se compose de deux étapes : la validation de la référence et la validation de la signature. Dans Java, la validation de la signature est effectuée avant la validation de la référence, permettant aux attaquants de contourner les exigences de validation de la signature.
Les transformations XSLT peuvent être intégrées dans les signatures XML, nécessitant au vérificateur d'exécuter le programme XSLT sur les données XML de référence. Cela ouvre une surface d'attaque potentielle pour les attaquants externes.
L'implémentation de la validation XSLT en Java appelle la bibliothèque Apache BCEL, qui contient le compilateur JIT vulnérable. Cette vulnérabilité aurait pu être exploitée dans les applications Java qui s'appuient sur SAML pour l'authentification.
googleprojectzero.blogspot.com
Gregor Samsa: Exploiting Java's XML Signature Verification
