Skoči na vsebino

SI-CERT 2021-06 / Kritična ranljivost Java knjižnice Apache Log4j

Objavljeno: 10.12.2021
Zadnja posodobitev: 2.2.2022

Povzetek

Kritična ranljivost knjižnice Log4j omogoča napadalcu izvedbo poljubne programske kode na ranljivem sistemu (RCE – Remote Code Execution). Ranljivost se proži ob zapisu podatka v dnevnik in se lahko izrablja tudi na sistemih, ki niso javno dostopni na internetu, vendar do njih vodi ustrezna podatkovna pot. Ranljivost najdemo tako v odprtokodnih aplikacijah, lastnih rešitvah in številnih komercialnih produktih. Identifikacija vseh ranljivih komponent je zahtevna, univerzalne rešitve za različne postavitve sistemov ni.

Opis

V programski knjižnici Java logging library Log4j je bila odkrita kritična ranljivost z oznako CVE-2021-44228, ki napadalcem omogoča izvajanje poljubne kode na sistemu (RCE – Remote Code Execution) ali krajo občutljivih informacij. Do zlorabe ranljivosti pride ob zapisu posebnega niza znakov, ki vsebuje JNDI zahtevek, v dnevniško datoteko. Ranljivost se že aktivno izkorišča v napadih na omrežju. Kasneje so bile v predmetni knjižnici odkrite še naslednje ranljivosti:

  • CVE-2021-45046, ki omogoča izvedbo kode na daljavo (RCE);
  • CVE-2021-45105, ki omogoča izvedbo napada z zavrnitvijo storitve (DoS, Denial-of-service);
  • CVE-2021-44832, ki omogoča izvedbo poljubne kode (RCE), če lahko napadalec spreminja Log4j konfiguracijo.

Ranljivosti so bile odkrite tudi v verziji knjižnice Log2j verzije 1.x, ki pa se ji je podpora iztekla avgusta 2015 in za katere proizvajalec ne bo izdal popravkov, in sicer:

  • CVE-2021-4104, ki omogoča izvedbo poljubne kode (RCE), če lahko napadalec spreminja Log4j konfiguracijo;
  • CVE-2022-23302, ki omogoča izvedbo poljubne kode (RCE), če Log4j uporablja JMSSink (gre za neprivzeto konfiguracijo);
  • CVE-2022-23305, ki omogoča izvedbo poljubne kode (RCE), če Log4j uporablja JDBCAppender (gre za neprivzeto konfiguracijo);
  • CVE-2022-23307, ki je kritična ranljivost chainsaw komponente, ocenjena z najvišjo oceno resnosti, in omogoča izvedbo poljubne kode na daljavo (RCE).

Log4j je popularna programska knjižnica, ki jo uporablja veliko število Java aplikacij. Ranljive so tako strežniške aplikacije kot odjemalci. Posebej opozarjamo, da so lahko ranljive tudi aplikacije, ki niso javno dostopne, vendar pa procesirajo podatke iz javno dostopnih virov (npr. obdelovanje dnevniških zapisov). Ranljivost je mogoče izkoristiti tudi v aplikacijah, ki imajo odprt web socket zgolj lokalno na sistemu, npr. preko napada v mimohodu.

Potek Log4j napada in kako ga preprečiti (CC-BY-SA GovCERT.ch)

Ranljive verzije knjižnice

Ranljive so verzije Apache Log4j od vključno 2.0-beta9 do vključno 2.17.0, ter verzije 1.x.

Ranljivi produkti

Številne programske rešitve, aplikacije in naprave uporabljajo knjižnico, kar še poveča izpostavljenost ranljivosti. Za preverjanje stanja posameznega proizvajalca priporočamo seznam, ki ga vodi nizozemski NCSC-NL in se posodablja s podatki ostalih članov Mreže CSIRT: https://github.com/NCSC-NL/log4shell, razdelek “software”.

Iskanje ranljivih knjižnic

Pri iskanju ranljivih Log4j knjižnic na sistemu si lahko pomagate z orodjem log4jscanner, ki ga je na GitHub.org objavil Google. Orodje omogoča tudi popravek nameščenih JAR knjižnic z odstranitvijo JndiLookup.class razreda.

Priporočeni ukrepi za lastno razvite in odprtokodne aplikacije

Skrbnikom sistemov svetujemo čimprejšnjo identifikacijo vse programske opreme, ki uporablja ranljivo knjižnico, ter namestitev popravkov oz. izvedbo mitigacijskih mehanizmov.

Priporočamo nadgradnjo knjižnice na zadnjo verzijo. Trenutno je zadnja verzija 2.17.1, ki je bila izdana 27.12.2021. Uporabo knjižnice verzije 1.x močno odsvetujemo, saj se ji je podpora iztekla že avgusta 2015, vsebuje pa kritične ranljivosti, ki jih proizvajalec ne bo več odpravljal.

Če namestitev popravka ni mogoča, proizvajalec priporoča odstranitev JndiLookup.class iz iskalne poti (classpath). To lahko storite z orodjem log4jscanner, ali ročno z ukazom oblike:

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

Bolj natančno so mitigacijski mehanizmi za preprečevanje izrabe objavljeni na spletni strani proizvajalca. Opozarjamo, da je po podatkih proizvajalca predhodno priporočena izvedba mitigacije preko stikala log4j2.formatMsgNoLookups oz. spremenljivke LOG4J_FORMAT_MSG_NO_LOOKUPS pomanjkljiva oz. nezadostna.

Priporočeni ukrepi za druge produkte

V primeru uporabe aplikacij, ki uporabljajo ranljivo knjižnico, in te ni možno enostavno zamenjati, spremljajte obvestila proizvajalca aplikacije. Obsežen seznam ranljive programske opreme in trenutni status zaščite se nahaja na spletni strani https://github.com/NCSC-NL/log4shell/tree/main/software

V Windows sistemih se lahko ranljiva programska oprema identificira s spodnjim Powershell ukazom:

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

Skrbnikom sistemov svetujemo detekcijo oz. blokado izhodnega prometa, ki ni potreben za delovanje sistema (npr. DNS, LDAP, RMI ipd.). Uspešna izraba ranljivosti se lahko kaže v dnevniški datoteki aplikacije, če ta vsebuje niz “com.sun.jndi.” (gre za nepreverjeno informacijo).

Detekcija poskusov zlorabe ranljivosti

Splošni regularni izraz za prepoznavo poskusa zlorabe ranljivosti je:

\${(\${(.*?:|.*?:.*?:-)('|"|`)*(?1)}*|[jndi:lapsrm]('|"|`)*}*){9,11}

Poskusi zlorab ranljivosti so razvidni v dnevniških datotekah spletnih strežnikov v zahtevkih, ki pri najbolj enostavnih poskusih v enem od parametrov vsebujejo niz v obliki ${jndi:ldap://…}. Pri iskanju se lahko uporabi Yara pravilo ali ukaz v spodnji obliki (za bolj natančne zadetke uporabite zgornji regularni izraz, spodnjega podajamo za namen boljše berljivosti in ponazoritve):

egrep -i -r '\$\{jndi:(ldap[s]?|rmi)://[^\n]+' /var/log
find /var/log -name \*.gz -print0 | xargs -0 zgrep -E -i '\$\{jndi:(ldap[s]?|rmi)://[^\n]+'

Nizi so lahko zamaskirani, večji nabor zato najde prvi regularni izraz. Uporabite lahko orodje log4shell-detectorV primeru uporabe nekaterih javno dostopnih skript za zamaskiranje kode je edini prepoznavni vzorec poskusa zlorabe niz znakov celo samo ${.

Indikatorji zlorabe (IoC)

Spisek različnih seznamov indokatorjev zlorabe (IoC, Indicator of Compromise) najdete na:

Zunanje povezave

Preberite tudi

SI-CERT 2024-07 / Ranljivost OpenPrinting CUPS sistema v GNU/Linux

Veriga ranljivosti v sistemu OpenPrinting CUPS napadalcu omogoča, da ob določenih pogojih izvede poljubno programsko kodo na ranljivem sistemu s pravicami uporabnika 'lp'
Več

SI-CERT 2024-06 / Kritična ranljivost GeoServer (CVE-2024-36401)

Strežnik GeoServer vsebuje kritično ranljivost, ki omogoča izvajanje programske kode na daljavo. Ranljivost se že izrablja v omrežnih napadih.
Več

SI-CERT 2024-05 / Ranljivost Check Point Remote Access VPN

Omrežni varnostni prehodi Check Point, ki imajo omogočen oddaljeni dostop VPN ali uporabljajo Check Point Mobile Secure Workspace with Capsule, so ranljivi na preskakovanje poti, ki omogoča branje poljubnih datotek z datotečnega sistema.
Več