Les utilisateurs du célèbre SGBD Apache Cassandra feraient bien de se méfier. Une vulnérabilté découverte par les chercheurs en sécurité de JFrog peut déboucher sur de l'exécution de code malveillant à distance. Référencée en tant que CVE-2021-44521, cette faille d'un score CVSS 8.4 doit donc être comblée dès que possible pour éviter un exploit. Disponible en open source, Cassandra est très répandue dans le monde des bases de données distribuées NoSQL, étant notamment utilisée chez Netflix, Reddit ou encore Twitter. « Cette vulnérabilité de sécurité Apache est facile à exploiter et a le potentiel de faire des ravages sur les systèmes, mais heureusement, elle ne se manifeste que dans des configurations autres que celles par défaut de Cassandra », a expliqué Omer Kaspi, chercheur en sécurité chez JFrog.

Cette faille a été découverte par JFrog dans le cadre de ses travaux d'implémentation de la fonction user-defined (UDF) dans une sand box Cassandra. « Les UDF de Cassandra peuvent être écrites par défaut en Java et JavaScript. En JavaScript, elles utilisent le moteur Nashorn dans l'environnement d'exécution Java (JRE), qui est un moteur JavaScript qui s'exécute au-dessus de la machine virtuelle Java (JVM) [...] Nous avons réalisé qu'un mélange d'options de configuration spécifiques (non par défaut) pouvait nous permettre d'abuser du moteur Nashorn, d'échapper au bac à sable et d'exécuter du code à distance », précise JFrog qui a réalisé par ailleurs un PoC d'exploit.

Une configuration d'exploit particulière

Les déploiements vulnérables à la CVE-2021-44521 doivent contenir dans le fichier de configuration cassandra.yaml les paramètres suivants : 

enable_user_defined_functions: true
enable_scripted_user_defined_functions: true
enable_user_defined_functions_threads: false

Afin de remédier à ce risque d'exploit, les utilisateurs d'Apache Cassandra doivent dès que possible migrer vers les versions suivantes : pour ceux qui ont une 3.0.x il faut installer la 3.0.26, pour ceux qui ont une 3.11.x mettre à jour vers la 3.11.12 et enfin concernant les implémentations 4.0.x il faudra se diriger vers la 4.0.2.

Une solution de contournement possible sans mise à jour

Pour les utilisateurs qui ne pourraient pas appliquer la dernière mise à jour de sécurité, JFrog a poussé les recommandations suivantes. Tout d'abord si les UDF ne sont pas activement utilisées, elles peuvent être complètement désactivées en définissant enable_user_defined_functions sur false (qui est la valeur par défaut). Si des UDF sont nécessaires, définissez enable_user_defined_functions_threads sur true (qui est la valeur par défaut). Enfin, les chercheurs de JFrog préconisent de supprimer les autorisations de création, de modification et d'exécution de fonctions pour les utilisateurs non approuvés en supprimant les autorisations suivantes : ALL FUNCTIONS, ALL FUNCTIONS IN KEYSPACE et FUNCTION pour les requêtes CREATE, ALTER et EXECUTE. Cela peut être fait à l'aide des requêtes suivantes en remplaçant le role_name par le rôle souhaité.