Dans le cadre de la vulnérabilité Log4Shell, le principal danger correspondait à la combinaison des différents facteurs de risque. Nous allons passer en revue les plus importants d’entre eux :
1. Cette faille de sécurité Java vient de la bibliothèque de journalisation.
À première vue, une bibliothèque de journalisation telle que Log4J peut paraître plutôt inoffensive. Tout comme une bibliothèque d’authentification ou de chiffrement, il convient toutefois de ne pas la négliger.
2. Java est très populaire.
Fait unique pour un langage et un environnement, Java peut fonctionner sur pratiquement toutes les plateformes. De ce fait, la vulnérabilité Log4Shell concerne donc un très grand nombre de programmes et de services. De plus, Java est parfois intégré à des systèmes embarqués (routeurs, appareils issus de l’Internet des objets, etc.), c’est-à-dire qu’il peut être présent sur des caméras privées et autres appareils domotiques.
3. Tout un ensemble de technologies est concerné.
Cette problématique de sécurité est liée à la concaténation de plusieurs technologies. La combinaison entre Log4J, JNDI, un serveur LDAP et des substitutions de chaînes est favorable à cette vulnérabilité et permet aux pirates informatiques d’attaquer.
4. Les exploits s’infiltrent jusqu’à des niveaux plus profonds.
Dans le meilleur des cas, si une vulnérabilité touche uniquement le système pris pour cible, les dégâts peuvent rester localisés. Imaginez toutefois qu’une interface Web reçoive et journalise une chaîne d’exploits. Cette chaîne d’exploits peut alors être communiquée à d’autres systèmes sous-jacents, sans s’activer avant d’y être évaluée.
5. Les chaînes d’exploits sont difficilement détectables.
Les substitutions possibles étant très complexes, de nombreuses options s’offrent aux pirates informatiques souhaitant dissimuler un code malveillant. Pour cette raison, il est possible d’imbriquer certaines substitutions. La chaîne ${${lower:j}ndi} ne contient pas directement la chaîne de caractères jndi et ne peut donc pas être filtrée de manière automatique. La chaîne ${jndi} n’est créée qu’au moment de la résolution. De plus, il est possible de dissimuler certaines parties du code à l’aide d’un codage en Base64. La chaîne ${base64:SGVsbG8gV29ybGQhCg==} correspond donc à « Hello World! ».