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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/k4pxd/cve-2022-46169
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمالفريق الأحمر
GitHubk4pxd/cve-2022-46169

CVE-2022-46169

Cacti 1.2.22 حقن أوامر بدون مصادقة

عرض المستودع
منذ 8س 53دلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2022-46169 — Cacti 1.2.22 حقن أوامر غير مصادق عليه


الحقلالتفاصيل
المنتجCacti
الإصدار المتأثر1.2.22
الثغرةحقن أوامر نظام تشغيل غير مصادق عليه
CVECVE-2022-46169
CWECWE-77 — حقن الأوامر
الخطورةحرجة
CVSS v3.19.8
ناقل الهجومالشبكة
المصادقةلا شيء
تفاعل المستخدملا شيء
التأثيرالسرية / السلامة / التوفر
الإصدار المُصلَح1.2.23
المكوّن المعرَّض للخطرremote_agent.php
مكوّن إضافيlib/functions.php
الإجراء الرئيسي المعرَّض للخطرpolldata

ناقل CVSS المنشور هو:

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

يصنّف الاستشارة الرسمية الخطورة عند 9.8 حرجة. (GitHub)

1. السبب الجذري

في الواقع هناك ثغرتان مترابطتان معًا.

المرحلة 1 — تجاوز التفويض

يقبل remote_agent.php في Cacti الطلبات دون مصادقة عادية، لكنه يحاول تحديد ما إذا كان الطالب هو مُلقِّم استطلاع (poller) مصرحًا به.

مسار التفويض يعمل فعليًا على النحو التالي:

root@kitploit:~
HTTP request
     │
     ▼
remote_agent.php
     │
     ▼
remote_client_authorized()
     │
     ▼
get_client_addr()
     │
     ▼
gethostbyaddr()
     │
     ▼
مقارنة اسم المضيف في جدول poller

المشكلة تكمن في get_client_addr().

في الإصدار 1.2.22، يفحص هذا الدالة متغيرات خادم متعددة مشتقة من HTTP، بما في ذلك ترويسات عنوان IP المُمرَّر من العميل. يوضح الاستشارة أن قيم HTTP_* التي يتحكم فيها المهاجم يمكن أن تؤثر على عنوان IP الذي تُرجعه هذه الدالة. (GitHub)

هذا يعني أن التطبيق يمكن خداعه ليعتقد أن:

root@kitploit:~
المهاجم
   ↓
"عنوان IP الخاص بي هو خادم Cacti"
   ↓
gethostbyaddr()
   ↓
اسم مضيف خادم Cacti
   ↓
يطابق جدول poller
   ↓
مصرح به

لذا لا يحتاج المهاجم إلى حساب Cacti شرعي.


2. الثغرة الثانية — حقن الأوامر

بعد تجاوز فحص التفويض، فإن وظيفة النقطة الطرفية المثيرة للاهتمام هي إجراء polldata.

مسار التنفيذ ذو الصلة هو تقريبًا:

root@kitploit:~
remote_agent.php
      │
      ▼
    polldata
      │
      ▼
 poll_for_data()
      │
      ├── host_id
      ├── local_data_ids
      └── poller_id
              │
              ▼
       البحث في poller_item
              │
              ▼
 POLLER_ACTION_SCRIPT_PHP
              │
              ▼
          proc_open()
              │
              ▼
       تنفيذ أوامر نظام التشغيل

الخطأ المهم هو التعامل مع poller_id.

يسترجعه التطبيق باستخدام:

root@kitploit:~
get_nfilter_request_var()

بدلاً من فرض كونه عددًا صحيحًا.

تلك القيمة التي يتحكم فيها المهاجم تصبح في النهاية جزءًا من أمر يُمرَّر إلى proc_open() في PHP. يحدد الاستشارة الرسمية هذا صراحةً كأساس لحقن الأوامر. (GitHub)

من الناحية المفاهيمية:

root@kitploit:~
إدخال يتحكم فيه المهاجم
        ↓
     poller_id
        ↓
 سلسلة نصية مدمجة
        ↓
     proc_open()
        ↓
 أمر نظام التشغيل

هذا هو الجزء الحرج من الثغرة.


3. لماذا تتحول إلى RCE

الشيء المثير للاهتمام في تحليل PoC الخاص بك هو أن أيًا من الثغرتين بمفردها ليست القصة الكاملة.

إنها سلسلة ثغرات:

root@kitploit:~
        ┌──────────────────────────┐
        │ مهاجم غير مصادق عليه │
        └────────────┬─────────────┘
                     │
                     ▼
          remote_agent.php
                     │
                     ▼
        تجاوز التفويض
          عبر منطق عنوان IP للعميل
                     │
                     ▼
              polldata
                     │
                     ▼
            البحث في poller_item
                     │
                     ▼
       POLLER_ACTION_SCRIPT_PHP
                     │
                     ▼
             إدخال المهاجم
              → poller_id
                     │
                     ▼
                proc_open()
                     │
                     ▼
              تنفيذ الأوامر
                     │
                     ▼
                    RCE

هذا تمييز مهم جدًا يجب توضيحه في تقريرك:

CVE-2022-46169 ليست ببساطة "معامل سيئ في remote_agent.php." إنها سلسلة من تجاوز التفويض + حقن الأوامر.

يؤكد الاستشارة الرسمية أن شرط التنفيذ المعرَّض للخطر يتطلب poller_item يكون إجراءه POLLER_ACTION_SCRIPT_PHP. (GitHub)


4. المتطلب البيئي المسبق

يجب أن يوثّق PoC الخاص بك هذا صراحةً لأنه تفصيل تحليلي مهم.

يحتاج الهدف إلى poller_item مناسب مُهيأ بـ:

root@kitploit:~
POLLER_ACTION_SCRIPT_PHP

يشير استشارة Cacti إلى أن هذا شائع في بيئات الإنتاج لأن القوالب المحددة مسبقًا مثل Device - Uptime و Device - Polling Time يمكن أن تنشئ هذه الإدخالات. (GitHub)

لذا لا تكتب:

"كل تثبيت Cacti 1.2.22 قابل للاستغلال تلقائيًا."

البيان الأكثر دقة تقنيًا هو:

Cacti 1.2.22 معرَّض للخطر، ويعتمد نجاح تنفيذ الأوامر على وجود تكوين poller_item مناسب.


5. لماذا يهم host_id و local_data_id

لا تنفذ poll_for_data() ببساطة poller_id المُقدَّم.

تستعلم أولاً عن poller_item باستخدام قيم تتوافق مع:

root@kitploit:~
host_id
local_data_id

ثم تفحص إجراء العنصر الناتج.

الشرط المعرَّض للخطر هو فعليًا:

root@kitploit:~
host_id
   +
local_data_id
   ↓
poller_item
   ↓
action == POLLER_ACTION_SCRIPT_PHP
   ↓
مسار تنفيذ معرَّض للخطر

يشير الاستشارة الأصلي إلى أن هذه المعرّفات يمكن اكتشافها لأن الإدخالات ذات الصلة موجودة في قاعدة بيانات التطبيق، وأن الإدخالات المناسبة من المرجح أن تكون موجودة في التثبيتات الإنتاجية. (GitHub)

بالنسبة إلى PoC عام، سأوضح هذا المتطلب المسبق صراحةً بدلاً من إخفائه.


6. منهجية PoC آمنة

لشيء تنشره، أوصي بجعل PoC يوضح تنفيذ الأوامر دون منح القراء حمولة ريفيرس شل جاهزة للاستخدام كسلاح.

على سبيل المثال، نظّم عرضك على النحو التالي:

root@kitploit:~
1. انشر Cacti 1.2.22 في جهاز افتراضي معزول
2. هيئ poller_item باستخدام POLLER_ACTION_SCRIPT_PHP
3. تأكد من إمكانية الوصول إلى remote_agent.php
4. وضح التأثير على قرار التفويض
5. وصل إلى مسار تنفيذ polldata
6. استخدم علامة تنفيذ أوامر غير ضارة
7. التقط الأدلة الناتجة من التطبيق/السجلات
8. قم بالترقية إلى 1.2.23
9. أعد الاختبار
10. وضح أن الثغرة لم تعد قابلة للاستغلال

يمنحك ذلك عرضًا شرعيًا للثغرة دون تحويل التقرير إلى سلاح RCE جاهز للاستخدام عبر الإنترنت.


7. تحليل الكود المصدري لتقريرك

يمكنك تقسيم الكود المعرَّض للخطر إلى ثلاث مناطق.

أ. remote_agent.php

مسؤول عن كشف وظيفة الوكيل البعيد وتوجيه الإجراء المطلوب.

root@kitploit:~
remote_agent.php
      │
      └── action = polldata
                 │
                 ▼
            poll_for_data()

ب. lib/functions.php

يحتوي على get_client_addr().

التصميم الإشكالي هو الثقة في القيم المشتقة من HTTP عند تحديد عنوان الشبكة الفعلي للطالب.

يسرد الاستشارة الرسمي متغيرات متعددة متعلقة بـ HTTP يتم فحصها قبل الرجوع إلى العنوان البعيد الفعلي. (GitHub)

ج. proc_open()

الحوض الخطير النهائي هو بناء أمر PHP المنفذ عبر proc_open().

يحدد الاستشارة التدفق المعرَّض للخطر على النحو التالي:

root@kitploit:~
poller_id
    ↓
get_nfilter_request_var()
    ↓
بناء الأمر
    ↓
proc_open()

(GitHub)


8. لماذا يصلح التصحيح المشكلة

يحدد استشارة Cacti تغييرين مهمين للعلاج.

أولاً، يجب معاملة poller_id كعدد صحيح:

root@kitploit:~
get_nfilter_request_var()
             ↓
get_filter_request_var()

ثانيًا، يجب أيضًا تهريب القيمة من القشرة (shell-escaped) قبل دمجها في الأمر:

root@kitploit:~
escapeshellarg($poller_id)

يوصي الاستشارة تحديدًا بكلا الإجراءين. (GitHub)

جانب التفويض يحتاج أيضًا إلى التوقف عن السماح للمهاجم بالتأثير بشكل تعسفي على عنوان IP للعميل المستخدم للتفويض. (GitHub)


9. مقارنة الإصدارات

root@kitploit:~
Cacti 1.2.22
     │
     ├── معرَّض للخطر
     ├── تجاوز التفويض
     ├── حقن الأوامر
     └── احتمالية RCE غير مصادق عليه
     
Cacti 1.2.23
     │
     └── تم تصحيح CVE-2022-46169

يسرد استشارة البائع 1.2.22 كإصدار متأثر و 1.2.23 كإصدار 1.2.x المُصلَح. (GitHub)

يصف استشارة أمان أمازون المشكلة بشكل مستقل بأنها تسمح لمهاجم غير مصادق عليه بتنفيذ أوامر عشوائية ويمنحها درجة CVSS 9.8. (AWS Training and Certification)


10. عنوان جيد لـ PoC المنشور

سأستخدم شيئًا مثل:

CVE-2022-46169 — حقن أوامر غير مصادق عليه / RCE في Cacti 1.2.22

أو بشكل أكثر تقنية:

CVE-2022-46169: تحليل سلسلة تجاوز التفويض وحقن الأوامر في الوكيل البعيد لـ Cacti 1.2.22

ويمكن أن يقول ملخص الثغرة الخاص بك:

يحتوي Cacti 1.2.22 على سلسلة ثغرات حرجة في وظيفة الوكيل البعيد. يمكن للمهاجم التلاعب بمنطق تحديد عنوان العميل لتجاوز فحص تفويض الوكيل البعيد. بمجرد الوصول إلى وظيفة polldata، يسمح التحقق غير الكافي من معامل poller_id بوصول البيانات التي يتحكم فيها المهاجم إلى أمر يُنفذ عبر proc_open(). في التكوينات التي تحتوي على عنصر poller من نوع POLLER_ACTION_SCRIPT_PHP، يمكن أن يؤدي ذلك إلى تنفيذ أوامر عن بُعد غير مصادق عليه. تم إصلاح المشكلة في Cacti 1.2.23. (GitHub)

تصحيح مهم واحد لبحثك: لا تخلط بين هذا و CVE-2023-39362. تلك الثغرة اللاحقة في Cacti RCE تؤثر على 1.2.24 وتم إصلاحها في 1.2.25، لذا فهي ليست الثغرة التي تريدها لـ PoC على 1.2.22. (NVD)

تنزيل الأداة