
CVE 2021-44228 Prova di concetto. Log4Shell è un attacco contro i server che utilizzano versioni vulnerabili di Log4J.
Apache Log4j2 2.0-beta9 fino a 2.15.0 (non le release 2.12.2, 2.12.3 e 2.3.1)
Le funzionalità JNDI utilizzate nella configurazione, nei messaggi di log e nei parametri non proteggono da endpoint LDAP controllati dall'attaccante e altri endpoint correlati a JNDI. Un attaccante in grado di controllare i messaggi di log o i parametri dei messaggi di log può eseguire codice arbitrario caricato da server LDAP quando la sostituzione della ricerca nei messaggi è abilitata. A partire da log4j 2.15.0, questo comportamento è disabilitato per impostazione predefinita. Dalla versione 2.16.0 (insieme a 2.12.2, 2.12.3 e 2.3.1), questa funzionalità è stata completamente rimossa. Nota che questa vulnerabilità è specifica di log4j-core e non influisce su log4net, log4cxx o altri progetti Apache Logging Services.
Di conseguenza, ha un punteggio CVSS v3 di 10.0.(PUNTEGGIO MASSIMO)
Fortunatamente questo è un attacco 0-day. Quindi gli sviluppatori lo hanno corretto in un 0-day.
Il progetto Apache Log4j è tra i componenti di software open source più utilizzati, fornendo funzionalità di logging per applicazioni Java.
Prima di tutto questa PoC utilizza:
In http_server troverai 2 file: MyExploit.java e il suo file .class compilato MyExploit.class
💡PROMEMORIA: javac namefile.java per compilare una classe Java :)
Puoi avviare un server HTTP al volo usando il comando: python -m http.server [PORT] In questi casi
repository di marshalsec Dettagli qui
repository di christophetd Dettagli qui
Di solito il campo bersaglio nell'header della richiesta è lo User-agent, in questa PoC verrà usato X-Api-Version
Questa PoC lancia un'esecuzione di comandi sul server vulnerabile al fine di creare un file chiamato "pwned_by_pierpaolosestito_dev" nella cartella tmp. MyExploit.java contiene anche un payload malevolo che permette all'attaccante di eseguire una Reverse-Code-Execution e ottenere una Reverse-Shell.
💡QUALCHE CONSIGLIO: Se lanci docker exec [container_id] ifconfig puoi notare che è un runner che non è nel tuo sottodominio locale. Per eseguire una RCE puoi cambiare l'IP all'interno di MyExploit.java che contiene una stringa di comando RCE. Dal momento che il runner di Docker non può contattarti su IP privato, hai bisogno di un IP pubblico e puoi ottenerlo con Port forwarding