L'équipe open source de Google a déclaré avoir analysé Maven Central, le plus grand référentiel de packages Java, et a découvert que 35 863 packages Java utilisent des versions vulnérables de la bibliothèque Apache Log4j. Cela inclut les packages Java qui utilisent des versions Log4j vulnérables à l'exploit Log4Shell d'origine (CVE-2021-44228) et un deuxième bogue d'exécution de code à distance découvert dans le correctif Log4Shell (CVE-2021-45046).
Log4j est une bibliothèque de journalisation open source basée sur Java utilisée dans des millions d'applications. Il y a quelques jours, une vulnérabilité dans Log4J a été découverte. Elle permet à un attaquant de provoquer une exécution de code arbitraire à distance s'il a la capacité de soumettre une donnée à une application qui utilise la bibliothèque log4j pour journaliser l'évènement. Cette attaque peut être réalisée sans être authentifié, par exemple en tirant parti d'une page d'authentification qui journalise les erreurs d'authentification. Les entreprises spécialisées en cybersécurité ont indiqué que le nombre d'attaques profitant de cette faille se multiplient.
James Wetter et Nicky Ringland, membres de l'équipe Google Open Source Insights, ont déclaré dans un rapport que, bien souvent, lorsqu'une faille de sécurité Java majeure est détectée, elle n'affecte généralement que 2% de l'index Maven Central. Cependant, les 35 000 packages Java vulnérables à Log4Shell représentent environ 8 % du total de Maven Central d'environ 440 000, un pourcentage que les deux ont décrit en utilisant un seul mot : « énorme ».
« Plus de 35 000 packages Java, représentant plus de 8 % du référentiel Maven Central (le référentiel de packages Java le plus important), ont été touchés par les vulnérabilités log4j récemment divulguées, avec des retombées généralisées dans l'industrie du logiciel. Les vulnérabilités permettent à un attaquant d'exécuter du code à distance en exploitant la fonctionnalité de recherche JNDI non sécurisée exposée par la bibliothèque de journalisation log4j. Cette fonctionnalité exploitable était activée par défaut dans de nombreuses versions de la bibliothèque.
« Cette vulnérabilité a captivé l'écosystème de la sécurité de l'information depuis sa divulgation le 9 décembre en raison à la fois de sa gravité et de son impact généralisé. En tant qu'outil de journalisation populaire, log4j est utilisé par des dizaines de milliers de progiciels (appelés artefacts dans l'écosystème Java) et de projets dans l'ensemble de l'industrie du logiciel. Le manque de visibilité de l'utilisateur sur ses dépendances et ses dépendances transitives a rendu l'application des correctifs difficile ; cela a également rendu difficile la détermination du rayon d'explosion complet de cette vulnérabilité. En utilisant Open Source Insights, un projet pour aider à comprendre les dépendances open source, nous avons examiné toutes les versions de tous les artefacts dans le référentiel central Maven pour déterminer l'étendue du problème dans l'écosystème open source des langages basés sur JVM, et pour suivre les efforts en cours pour atténuer les paquets affectés ».
Depuis que la vulnérabilité a été divulguée, Wetter et Ringland ont déclaré que la communauté avait répondu positivement et avait déjà corrigé 4 620 des 35 863 packages qu'ils avaient initialement trouvés vulnérables. Ce nombre représente 13% de tous les packages vulnérables. « Ceci, plus que toute autre statistique, témoigne des efforts massifs déployés par les mainteneurs open source, les équipes de sécurité de l'information et les consommateurs du monde entier », ont déclaré Wetter et Ringland.
À titre de comparaison, les deux citent des statistiques similaires pour les failles de sécurité Java passées, où environ 48% des bibliothèques en amont et en aval sont mises à jour pour corriger les vulnérabilités. Cependant, les deux ne s'attendent pas à ce que le problème Log4Shell soit entièrement corrigé, du moins pour les années à venir.
La principale raison en est que Log4j n'est pas toujours inclus en tant que dépendance directe dans les packages Java, mais est également une dépendance d'une autre dépendance, également appelée dépendance indirecte.
Dans ces situations, les responsables de packages Java vulnérables doivent attendre d'autres développeurs avant de pouvoir mettre à jour leurs propres applications, prolongeant ce processus pendant des semaines et des mois, dans certains cas.
Selon Google, Log4j est une dépendance directe dans seulement 7 000 packages sur les 35 000 bibliothèques totales, et de nombreux développeurs Java devront très probablement remplacer les dépendances indirectes qui n'ont pas été mises à jour avec des alternatives sûres.
Quelle est l'étendue de la vulnérabilité log4j ?
« Au 16 décembre 2021, nous avons constaté que 35 863 des artefacts Java disponibles de Maven Central dépendent du code log4j affecté. Cela signifie que plus de 8 % de tous les packages sur Maven Central ont au moins une version impactée par cette vulnérabilité. (Ces chiffres n'incluent pas tous les packages Java, tels que les binaires directement distribués, mais Maven Central est un puissant indicateur de l'état de l'écosystème.) En ce qui concerne l'impact sur l'écosystème, 8 %, c'est énorme. L'impact moyen sur l'écosystème des avis affectant Maven Central est de 2 %, avec une médiane inférieure à 0,1 %.
« Les dépendances directes représentent environ 7 000 des artefacts affectés, ce qui signifie que l'une de ses versions dépend d'une version affectée de log4j-core ou log4j-api, comme décrit dans les CVE. La majorité des artefacts affectés proviennent de dépendances indirectes (c'est-à-dire les dépendances de ses propres dépendances), ce qui signifie que log4j n'est pas explicitement défini comme une dépendance de l'artefact, mais est intégré comme une dépendance transitive ».
Quels sont les progrès actuels dans la réparation de l'écosystème JVM open source ?
« Nous avons compté un artefact comme corrigé si l'artefact avait au moins une version affectée et a publié une version plus stable (selon la gestion sémantique des versions) qui n'est pas affectée. Un artefact affecté par log4j est considéré comme corrigé s'il a été mis à jour vers 2.16.0 ou s'il a complètement supprimé sa dépendance à log4j.
« Au moment de la rédaction de cet article, près de cinq mille des artefacts concernés ont été corrigés. Cela représente une réponse rapide et un effort colossal à la fois de la part des mainteneurs de log4j et de la communauté plus large des consommateurs open source.
« Cela laisse plus de 30 000 artefacts affectés, dont beaucoup dépendent d'un autre artefact à corriger (la dépendance transitive) et sont probablement bloqués ».
Pourquoi est-il difficile de réparer l'écosystème JVM ?
« La plupart des artefacts qui dépendent de log4j le font indirectement. Plus la vulnérabilité est profonde dans une chaîne de dépendances, plus il faut d'étapes pour qu'elle soit corrigée. Le diagramme suivant montre un histogramme de la profondeur avec laquelle un package log4j affecté (core ou api) apparaît pour la première fois dans les graphiques de dépendance des consommateurs. Pour plus de 80 % des packages, la vulnérabilité est profonde de plus d'un niveau, avec une majorité affectée à cinq niveaux (et certains jusqu'à neuf niveaux). Ces packages nécessiteront des correctifs dans toutes les parties de l'arborescence, en commençant par les dépendances les plus profondes.
« Une autre difficulté est causée par les choix au niveau de l'écosystème dans l'algorithme de résolution des dépendances et les conventions de spécification des exigences.
« Dans l'écosystème Java, il est courant de spécifier les exigences de version "soft" - les versions exactes qui sont utilisées par l'algorithme de résolution si aucune autre version du même package n'apparaît plus tôt dans le graphique de dépendance. La propagation d'un correctif nécessite souvent une action explicite de la part des responsables pour mettre à jour les exigences de dépendance vers une version corrigée.
« Cette pratique contraste avec d'autres écosystèmes, tels que npm, où il est courant pour les développeurs de spécifier des plages ouvertes pour les exigences de dépendance. Les plages ouvertes permettent à l'algorithme de résolution de sélectionner la version la plus récemment publiée qui répond aux exigences de dépendance, introduisant ainsi de nouveaux correctifs. Les consommateurs peuvent obtenir une version corrigée lors de la prochaine version une fois le correctif disponible, ce qui propage rapidement les dépendances. (Cette approche n'est pas sans inconvénients*; l'ajout de nouveaux correctifs peut également entraîner de nouveaux problèmes.) »
Combien de temps faudra-t-il pour que cette vulnérabilité soit corrigée dans l'ensemble de l'écosystème ?
« C'est difficile à dire. Nous avons examiné tous les avis critiques publiés concernant les packages Maven pour avoir une idée de la rapidité avec laquelle les autres vulnérabilités ont été entièrement corrigées. Moins de la moitié (48 %) des artefacts affectés par une vulnérabilité ont été corrigés, nous pourrions donc devoir attendre longtemps, probablement des années.
« Mais les choses semblent prometteuses sur le front de log4j. Après moins d'une semaine, 4 620 artefacts affectés (~ 13 %) ont été corrigés. Ceci, plus que toute autre statistique, témoigne de l'effort massif des mainteneurs open source, des équipes de sécurité de l'information et des consommateurs à travers le monde ».
Le rapport a été publié avant la découverte d'une vulnérabilité sur le deuxième correctif, conduisant à la publication de la version 2.17.0 de Log4j
Les membres de l’Apache Software Fondation ont développé un patch en catastrophe pour corriger la vulnérabilité, la version 2.15.0. Des contournements sont également possibles pour réduire les risques.
Mais les chercheurs ont signalé qu'il existe au moins deux vulnérabilités dans le correctif, publié sous le nom de Log4J 2.15.0, et que les attaquants exploitent activement l'une d'entre elles ou les deux contre des cibles du monde réel qui ont déjà appliqué la mise à jour. Les chercheurs ont exhorté les organisations à installer un nouveau correctif, publié en tant que version 2.16.0, dès que possible pour corriger la vulnérabilité, qui est suivie comme CVE-2021-45046.
Le correctif précédent, ont déclaré les chercheurs mardi soir, « était incomplet dans certaines configurations autres que celles par défaut » et permettait aux attaquants d'effectuer des attaques par déni de service, ce qui facilite généralement la mise hors ligne des services vulnérables jusqu'à ce que les victimes redémarrent leur serveurs ou prennent d'autres mesures. La version 2.16.0 « résout ce problème en supprimant la prise en charge des modèles de recherche de messages et en désactivant la fonctionnalité JNDI par défaut », selon l'avis de vulnérabilité lié ci-dessus.
La version 2.15.0 ne résolvait pas un autre problème - CVE-2021-45046 - qui permettait à un attaquant distant contrôlant le Thread Context Map (MDC) de préparer une entrée malveillante à l'aide d'un modèle de recherche JNDI. Le résultat pourrait être l'exécution de code à distance, heureusement pas dans tous les environnements.
La version 2.16.0 a résolu ce problème. Mais elle n'a pas corrigé CVE-2021-45105, que l'Apache Software Foundation décrit comme suit :
« Les versions 2.0-alpha1 à 2.16.0 d'Apache Log4j2 ne protégeaient pas contre la récursivité incontrôlée des recherches auto-référentielles. Lorsque la configuration de la journalisation utilise une disposition de modèle autre que celle par défaut avec une recherche de contexte (par exemple, $${ctx:loginId}), les attaquants contrôlant les données d'entrée de Thread Context Map (MDC) peuvent créer des données d'entrée malveillantes contenant une recherche récursive, ce qui entraîne une StackOverflowError qui mettra fin au processus. Ceci est également connu sous le nom d'attaque DOS (Denial of Service) ».
Source : Google
Plus de 35 000 packages Java impactés par les vulnérabilités Log4j, selon un rapport de l'équipe open source de Google
Plus de 35 000 packages Java impactés par les vulnérabilités Log4j, selon un rapport de l'équipe open source de Google
Le , par Stéphane le calme
Une erreur dans cette actualité ? Signalez-nous-la !