{"id":1356,"date":"2021-12-16T10:59:05","date_gmt":"2021-12-16T09:59:05","guid":{"rendered":"https:\/\/siteperso.info\/?p=1356"},"modified":"2021-12-19T10:16:53","modified_gmt":"2021-12-19T09:16:53","slug":"cve-2021-44228-log4shell","status":"publish","type":"post","link":"https:\/\/siteperso.info\/index.php\/2021\/12\/16\/cve-2021-44228-log4shell\/","title":{"rendered":"CVE-2021-44228 : Log4Shell"},"content":{"rendered":"\n<div class=\"wp-block-file\"><a href=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/check_log4shell.bash\" target=\"_blank\" rel=\"noreferrer noopener\">check_log4shell.bash (version 1.1)<\/a><a href=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/check_log4shell.bash\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Impact<\/h2>\n\n\n\n<p>Tout ce qui utilise le framework de journalisation d&rsquo;Apache nomm\u00e9 Log4J est susceptible d&rsquo;\u00eatre impact\u00e9. Les applications concern\u00e9es sont g\u00e9n\u00e9ralement reconnaissables au fait qu&rsquo;elles poss\u00e8dent  le fichier log4j-core.jar.<\/p>\n\n\n\n<p>Les versions d\u00e9clar\u00e9es concern\u00e9es comme faillibles de log4j-core sont :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>De la version 2.0-beta9 \u00e0 la version 2.12.1 (Java7)<\/li><li>De la version 2.13.0 \u00e0 la version 2.15.0 (Java8)<\/li><\/ul>\n\n\n\n<p>Toutefois, je ne vous recommande pas de vous fier \u00e0 ces valeurs, car la classe r\u00e9ellement en d\u00e9faut (JndiLookup.class) est embarqu\u00e9e. J&rsquo;ai constat\u00e9 que certains \u00e9diteurs avaient repris une version de JndiLookup.class faillible dans un core non r\u00e9pertori\u00e9 comme faillible.<\/p>\n\n\n\n<p>Quelque soit la version de log4j-core que vous utilisez, je vous recommande de tester et de mitiger. De plus ne cherchez pas seulement si vous utilisez log4j-core mais aussi si vous utilisez directement JndiLookup.class.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment chercher si le fichier en d\u00e9faut est pr\u00e9sent sur votre syst\u00e8me ?<\/h2>\n\n\n\n<p>Sur un syst\u00e8me Linux, recherchez tous les .jar log4j-core et v\u00e9rifiez la pr\u00e9sence de JndiLookup.class. Cela ne vous dira pas si vous l&rsquo;utilisez, mais si vous le poss\u00e9dez. Donc si vous \u00eates susceptible de l&rsquo;utiliser.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>find \/ -type f -name \"log4j-core-*.jar\" -exec unzip -l \"{}\" \\; 2&gt;\/dev\/null | grep -i JndiLookup.class<\/code><\/pre>\n\n\n\n<p> V\u00e9rifiez aussi les fichiers .ear, ils peuvent contenir le jar  log4j-core. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>find \/ -type f -name \"*.ear\" -exec unzip -l \"{}\" \\; 2&gt;\/dev\/null | grep -i log4j-core<\/code><\/pre>\n\n\n\n<p>Les fichiers .war, :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>find \/ -type f -name \"*.war\" -exec unzip -l \"{}\" \\; 2&gt;\/dev\/null | grep -i log4j-core<\/code><\/pre>\n\n\n\n<p>Et enfin, v\u00e9rifiez la pr\u00e9sence directe de JndiLookup.class.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>find \/ type f -name \"JndiLookup.class\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">log4shell.bash<\/h2>\n\n\n\n<p class=\"has-normal-font-size\"><strong>Voici check_log4shell.bash, un script maison pour scanner vos serveurs Linux.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Inspecte les fichiers ear, war, class et jar<\/li><li>3 modes : default \/ suspicious \/ paranoid pour inspecter log4j-core*.jar, *log4j*.jar ou *.jar<\/li><li>Inspecte les fichiers jar contenus dans les fichiers war<\/li><li>Inspecte les fichiers META-INF contenus dans les fichiers ear<\/li><li>Possibilit\u00e9 de changer le chemin de la recherche<\/li><li>Filtrage des \u00e9v\u00e8nements : infos, warnings, errors, statistiques<\/li><li>Statistiques<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><a href=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/log4shell.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"555\" src=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/log4shell-1024x555.png\" alt=\"\" class=\"wp-image-1518\" srcset=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/log4shell-1024x555.png 1024w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/log4shell-300x163.png 300w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/log4shell-768x416.png 768w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/log4shell-1536x832.png 1536w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/log4shell.png 1920w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/check_log4shell.bash\" target=\"_blank\" rel=\"noreferrer noopener\">check_log4shell.bash (version 1.1)<\/a><a href=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/check_log4shell.bash\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Produits impact\u00e9s<\/h2>\n\n\n\n<p>Voici une liste non exhaustive de produits que l&rsquo;on sait impact\u00e9s par cette faille :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>RedHat, par le biais d&rsquo;Openshift et de certains JBoss<\/li><li>Jenkins, si vous utilisez le plugins Log4J<\/li><li>Apache SOLR<\/li><li>VMWare<\/li><li>Citrix<\/li><li>Atlassian<\/li><li>NetApp<\/li><li>SonarQube<\/li><\/ul>\n\n\n\n<p class=\"has-normal-font-size\"><span class=\"has-inline-color has-vivid-red-color\"><strong>Ce n&rsquo;est pas parce que vous avec un fichier log4j que vous \u00eates concern\u00e9 !!!<\/strong> <strong>Encore une fois, la faille est dans la classe JndiLookup.class.<\/strong><\/span><\/p>\n\n\n\n<p><strong>V\u00e9rifiez dans le jar la pr\u00e9sence du fichier JndiLookup.class avant de paniquer, un .jar est un .zip, utilisez votre d\u00e9compresseur pr\u00e9f\u00e9r\u00e9.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Proof of Concept (POC)<\/h2>\n\n\n\n<p>Pour comprendre comment et pourquoi mitiger, il est n\u00e9cessaire de comprendre le POC.<\/p>\n\n\n\n<p>Celui qui me semble le plus facile \u00e0 mettre en \u0153uvre et \u00e0 lire est celui-ci : <a href=\"https:\/\/github.com\/NorthwaveSecurity\/log4jcheck\/blob\/main\/nw_log4jcheck.py\">nw_log4jcheck.py<\/a><\/p>\n\n\n\n<p>Il vous faudra Python3 pour l&rsquo;ex\u00e9cuter. Vous devez changer la valeur de HOSTNAME dans le script avant de vous en servir :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized is-style-default\"><a href=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-1-1024x539.png\" alt=\"\" class=\"wp-image-1364\" width=\"674\" height=\"354\" srcset=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-1-1024x539.png 1024w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-1-300x158.png 300w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-1-768x404.png 768w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-1.png 1077w\" sizes=\"auto, (max-width: 674px) 100vw, 674px\" \/><\/a><\/figure>\n\n\n\n<p>Vous devez aussi cr\u00e9er le r\u00e9pertoire, voire le fichier dans lequel le script \u00e9crira ses logs :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/var\/log\/named\n&gt; \/var\/log\/named\/query.log<\/code><\/pre>\n\n\n\n<p>Cherchez ensuite tout les ports WEB ouverts (Java, httpd, etc.) sur votre plateforme :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>netstat -tulpn<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><a href=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"539\" src=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-2-1024x539.png\" alt=\"\" class=\"wp-image-1365\" srcset=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-2-1024x539.png 1024w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-2-300x158.png 300w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-2-768x404.png 768w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-2.png 1077w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure>\n\n\n\n<p>Dans cet exemple, l&rsquo;on peut voir diff\u00e9rents ports qui m\u00e9ritent d&rsquo;\u00eatre v\u00e9rifi\u00e9s :<\/p>\n\n\n\n<p>Les ports 8005 et 8081 (java) ainsi que le port 443 (httpd).<\/p>\n\n\n\n<p>Utilisez le script sur chacun des ports :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 .\/nw_log4jcheck.py https:\/\/siteperso.info:443<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><a href=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"539\" src=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-3-1024x539.png\" alt=\"\" class=\"wp-image-1369\" srcset=\"https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-3-1024x539.png 1024w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-3-300x158.png 300w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-3-768x404.png 768w, https:\/\/siteperso.info\/wp-content\/uploads\/2021\/12\/image-3.png 1077w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption>R\u00e9sultat du scan sur le port 443<\/figcaption><\/figure>\n\n\n\n<p>Le port 443 est d\u00e9livr\u00e9 sur ce serveur par Apache (httpd). En regardant les logs g\u00e9n\u00e9r\u00e9s par le test je peux voir ceci :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"&#91;16\/Dec\/2021:10:46:29 +0100]\" \"7499\" \"HTTP\/1.1\" \"-\" \"python-requests\/2.26.0\" \"\/${jndi:ldap:\/56549fb9-f720-455f-a0c0-c40b55693bec.siteperso.info\/test.class}\" \"15.188.192.249\" \"+\" \"<strong><span class=\"has-inline-color has-vivid-red-color\">403<\/span><\/strong>\" \"1147\" \"<strong><span class=\"has-inline-color has-vivid-red-color\">GET \/$%7Bjndi:ldap:\/\/56549fb9-f720-455f-a0c0-c40b55693bec.siteperso.info\/test.class%7D<\/span><\/strong> HTTP\/1.1\" \"siteperso.info:443\" \"GET\" \"-\" \"-\" \"-\" \"-\" \"TLSv1.3\" \"TLS_AES_256_GCM_SHA384\" \"-\"<\/code><\/pre>\n\n\n\n<p>En rouge, l&rsquo;on peut voir l&rsquo;URL appel\u00e9e par le POC, il essaie de contacter le service jndi:ldap. On peut observer que le serveur a r\u00e9pondu avec un code HTTP 403 : Forbidden.<\/p>\n\n\n\n<p>Commencez \u00e0 s\u00e9rieusement vous inqui\u00e9ter si vous avez un code HTTP 200.<\/p>\n\n\n\n<p>Les URLS attaquables ne commencent pas uniquement par $jndi:ldap, le POC est focalis\u00e9 sur ceci mais en voici la liste compl\u00e8te :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>${jndi:ldap:\/}<\/li><li>${jndi:ldaps:\/}<\/li><li>${jndi:rmi:\/}<\/li><li>${jndi:dns:\/}<\/li><li>${jndi:iiop:\/}<\/li><\/ul>\n\n\n\n<p>Evidement, selon la technologie du port ouvert, vous devrez aller dans les logs ad\u00e9quats pour voir ce r\u00e9sultat.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comment se prot\u00e9ger<\/h2>\n\n\n\n<p>L\u2019action prioritaire est de mettre \u00e0 jour Log4J vers la version 2.16.0, via les gestionnaires de paquets habituels ou via un t\u00e9l\u00e9chargement direct depuis&nbsp;<a href=\"https:\/\/logging.apache.org\/log4j\/2.x\/download.html\">https:\/\/logging.apache.org\/log4j\/2.x\/download.html<\/a>.<\/p>\n\n\n\n<p>Il est aussi possible de r\u00e9duire le degr\u00e9 d\u2019exploitabilit\u00e9 de la vuln\u00e9rabilit\u00e9 en mettant la variable d\u2019environnement&nbsp;<code>LOG4J_FORMAT_MSG_NO_LOOKUPS<\/code>&nbsp;\u00e0&nbsp;<code>true<\/code>. Cette contremesure ne fonctionne cependant que pour les versions de Log4J sup\u00e9rieures ou \u00e9gales \u00e0 2.10.<\/p>\n\n\n\n<p>Vous pouvez aussi compl\u00e8tement supprimer la classe du fichier .jar :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>zip -q -d log4j-core-*.jar org\/apache\/logging\/log4j\/core\/lookup\/JndiLookup.class\n<\/code><\/pre>\n\n\n\n<p>Il n&rsquo;y a pas de solution propre \u00e0 ce jour pour corriger si vous \u00eates en Java7. Supprimez la classe comme ci-dessus, mitigez avec l&rsquo;option JAVA, prot\u00e9gez les URLS&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La faille expliqu\u00e9e au grand complet<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-naked-security wp-block-embed-naked-security\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nakedsecurity.sophos.com\/2021\/12\/13\/log4shell-explained-how-it-works-why-you-need-to-know-and-how-to-fix-it\/\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Impact Tout ce qui utilise le framework de journalisation d&rsquo;Apache nomm\u00e9 Log4J est susceptible d&rsquo;\u00eatre impact\u00e9. Les applications concern\u00e9es sont g\u00e9n\u00e9ralement reconnaissables au fait qu&rsquo;elles poss\u00e8dent le fichier log4j-core.jar. Les versions d\u00e9clar\u00e9es concern\u00e9es comme faillibles de log4j-core sont : De la version 2.0-beta9 \u00e0 la version 2.12.1 (Java7) De la version 2.13.0 \u00e0 la version &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/siteperso.info\/index.php\/2021\/12\/16\/cve-2021-44228-log4shell\/\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;CVE-2021-44228 : Log4Shell&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1396,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,9],"tags":[],"class_list":["post-1356","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cybersecurite","category-informatique"],"_links":{"self":[{"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/posts\/1356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/comments?post=1356"}],"version-history":[{"count":126,"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/posts\/1356\/revisions"}],"predecessor-version":[{"id":1547,"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/posts\/1356\/revisions\/1547"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/media\/1396"}],"wp:attachment":[{"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/media?parent=1356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/categories?post=1356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/siteperso.info\/index.php\/wp-json\/wp\/v2\/tags?post=1356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}