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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-28326-check — مدقق حالة الترقيع غير الإتلافي لـ SolarWinds ARM CVE-2026-28326 الذي يستكشف مستمع gRPC على TCP 55555 للإبلاغ عن VULNERABLE أو PATCHED أو INCONCLUSIVE. | Kitploit
أدوات/GitHubGitHub/bishopfox/cve-2026-28326-check
أدوات دفاعيةماسحات الثغرات الأمنيةتحليل الثغرات الأمنيةجمع المعلوماتأمن الشبكاتاختبار الاختراقأداة الوصول عن بعد
GitHubbishopfox/cve-2026-28326-check

CVE-2026-28326-check

مدقق حالة الترقيع غير الإتلافي لـ SolarWinds ARM CVE-2026-28326 الذي يستكشف مستمع gRPC على TCP 55555 للإبلاغ عن VULNERABLE أو PATCHED أو INCONCLUSIVE.

عرض المستودع
منذ 4 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

SolarWinds Access Rights Manager تنفيذ تعليمات برمجية عن بُعد دون مصادقة — نص برمجي لكشف الثغرة

فحص حالة الترقيع دون مصادقة للثغرة CVE-2026-28326، وهي ثغرة تنفيذ تعليمات برمجية عن بُعد دون مصادقة في SolarWinds Access Rights Manager (ARM)، التي تم إصلاحها في ARM 2026.2.1 بتاريخ 2026-09-17. CWE-798، CVSS 8.8 مرتفع (CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H). تم الإبلاغ عنها إلى SolarWinds بواسطة Kai Huang من Armadin. يفترض AV:A في هذا المتجه أن TCP 55555 يمكن الوصول إليه فقط من شبكة مجاورة، وهو الوضع الذي صُممت له أدوات جدار الحماية الخاصة بـ ARM نفسها؛ وحيثما تم فتح المنفذ على نطاق أوسع، فإن الدرجة تقلل من تقدير مدى التعرض لتلك البيئة.

يُصادق مستمع gRPC remoting الخاص بـ ARM على المنفذ TCP 55555 مع الأقران باستخدام شهادة عميل. كما تقبل الإصدارات غير المرقّعة بيانات اعتماد احتياطية مشتقة من مفتاح مُضمَّن ثابت متطابق في كل عمليات التثبيت، مما يتجاوز تلك المصادقة ويكشف مسار إلغاء تسلسل غير آمن. والنتيجة هي تنفيذ تعليمات برمجية بحساب خدمة ARM، الذي يعمل كـ LocalSystem افتراضيًا.

يُبلّغ النص البرمجي عمّا إذا كان الإصلاح موجودًا على كل هدف. فهو يقرأ رموز الحالة التي يعيدها معترض المصادقة ولا يستخدم المفتاح، ولا يُصادق، ولا يرسل بيانات إلى مسار إلغاء التسلسل. النتيجة غير VULNERABLE لا تعني بحد ذاتها أن الهدف مرقّع؛ راجع تفسير النتائج غير القابلة للاستغلال.

الاستخدام

root@kitploit:~
# single target (port defaults to 55555)
./cve_2026_28326_check.py arm.example.com

# explicit port
./cve_2026_28326_check.py arm.example.com:55555

# several targets
./cve_2026_28326_check.py arm-a.example.com arm-b.example.com

# scan a list, one target per line ('#' comments allowed), compact output
./cve_2026_28326_check.py -f targets.txt --brief

# machine-readable output for pipelines
./cve_2026_28326_check.py -f targets.txt --json > results.json

Python 3.8+، المكتبة القياسية فقط — لا حزم خارجية.

شغّل الأداة ضد خادم ARM وليس ضد مجمّع (collector). كلا الدورين يستمع على 55555، لكن المجمّع يرفض الطلبات الخارجية بالطريقة نفسها قبل الإصلاح وبعده، لذا تُبلّغ الأداة عنه بـ INCONCLUSIVE.

الخيارات

أمثلة

خادم قابل للاستغلال (الإخراج الافتراضي؛ تُعرض العلامة [!] وVULNERABLE باللون الأحمر على TTY):

root@kitploit:~
$ ./cve_2026_28326_check.py arm.example.com
[!] arm.example.com:55555: VULNERABLE  [unavailable-on-server-role]
      Remoting/Send returned 14 UNAVAILABLE on a listener answering as the server role, the pre-patch rejection path (<= 2026.2.0.42)

خادم مرقّع. يعيد الإصدار المُصلَّح grpc-message، الذي تطبعه الأداة إلى جانب الحكم:

root@kitploit:~
$ ./cve_2026_28326_check.py arm-dr.example.com
[+] arm-dr.example.com:55555: PATCHED  [unauthenticated-gate]
      Remoting/Send returned 16 UNAUTHENTICATED, the localhost and per-process-token gate introduced by the fix (>= 2026.2.1.7)
      grpc-message: Client certificate not found. Please register your application first.

مستمع لا يمكن تصنيفه. المجمّع، أو خادم يرفض الطلبات الخارجية، يجيب على كلا الفحصين بالطريقة نفسها على أي من الإصدارين:

root@kitploit:~
$ ./cve_2026_28326_check.py collector.example.com
[?] collector.example.com:55555: INCONCLUSIVE  [external-requests-refused]
      the listener refuses external requests, which a collector role and a restricted server both do identically on either build; scan the ARM server itself

أهداف متعددة مع --brief:

root@kitploit:~
$ ./cve_2026_28326_check.py -f targets.txt --brief; echo "exit: $?"
VULNERABLE    arm.example.com:55555            unavailable-on-server-role
PATCHED       arm-dr.example.com:55555         unauthenticated-gate
INCONCLUSIVE  collector.example.com:55555      external-requests-refused
UNAFFECTED    db.example.com:55555             not-arm
ERROR         offline.example.com:55555        unreachable
exit: 1

إخراج JSON مع --json. تُضمَّن نتائج كلا الفحصين حتى يمكن التحقق من الحكم مقابل الاستجابات الخام:

root@kitploit:~
$ ./cve_2026_28326_check.py arm.example.com --json
[
  {
    "target": "arm.example.com:55555",
    "verdict": "VULNERABLE",
    "reason": "unavailable-on-server-role",
    "detail": "Remoting/Send returned 14 UNAVAILABLE on a listener answering as the server role, the pre-patch rejection path (<= 2026.2.0.42)",
    "grpc_message": "",
    "probes": [
      {
        "path": "/SolarWinds_ARM_GRPC_ConnectionAuthrization.ConnectionAuthorization/GetCertificate",
        "status": 0,
        "message": "",
        "alpn": "h2",
        "note": ""
      },
      {
        "path": "/SolarWinds_ARM_Remoting.Remoting/Send",
        "status": 14,
        "message": "",
        "alpn": "h2",
        "note": ""
      }
    ]
  }
]

هل تشغيله آمن؟

الفحص مخصص للاستخدام ضد أنظمة الإنتاج:

  • لا يستخدم المفتاح المُضمَّن ولا يقدّم أي بيانات اعتماد. إنه يراقب كيفية رفض الخادم لقرين مجهول، وهو ما يعتمد على الإصدار المثبَّت.
  • لا يرسل بيانات إلى مسار إلغاء التسلسل. تُستثار الثغرة بواسطة كائن مُسلسَل في جسم رسالة Remoting/Send. يرسل كلا الفحصين رسالة gRPC بجسم بطول صفر، ويرفض المعترض الاستدعاء قبل إرسال أي جسم رسالة.
  • لا يغيّر حالة الخادم. لا تُقدَّم أي شهادة عميل أو بيانات اعتماد أو جلسة. يرسل فحص GetCertificate رمز تسجيل فارغًا، يرفضه الخادم قبل أن يبحث عن أي رموز تسجيل معلّقة أو يزيلها، لذا لا يستهلك الفحص رمز تسجيل لعميل في منتصف عملية التسجيل.
  • يفتح اتصالين TCP لكل هدف، واحدًا لكل فحص، ويغلق كلاً منهما بعد قراءة الحالة.

بصمة الطلبات والسجلات

#الاستدعاءالغرض
1ConnectionAuthorization/GetCertificateيؤكد أن نقطة النهاية هي ARM وأنها في دور الخادم
2Remoting/Sendفحص حالة الترقيع

على خادم غير مرقّع، يُسجَّل طلب مجهول مرفوض عند مستوى التصحيح (Unable to validate remote request token) وسطر معلوماتي يذكر اسم القرين. أما الإصدارات المرقّعة فتسجّل رفضًا يذكر القرين وتلميح التسجيل المقتبس في grpc-message أعلاه. لا يسجّل أي من الإصدارين جلسة.

للبحث عن الاستغلال بدلًا من التعرض، راجع سجلات NetworkConnectionEntry الخاصة بـ ARM. إن مدخلًا بـ IsAuthenticated=false وClientCertThumbPrint مُعبَّأ يتوافق مع تجاوز المصادقة ولا يحدث في حركة المرور الطبيعية.

كيف يعمل

غيّر الإصلاح الحالة التي يعيدها معترض المصادقة إلى قرين لا يقدّم أي شهادة عميل. قبل الترقيع، كان كل مسار رفض في فحص شهادة العميل يضبط Unavailable. وبعد الترقيع، يضبط فحص localhost-plus-token الحالة Unauthenticated مع رسالة مميزة، ولا شيء آخر في ذلك المسار يعيد 16. يميّز استدعاءان مجهولان بين الإصدارين:

يُقرأ الحكم من Remoting/Send لأن معالجات duplex-streaming وunary فقط هي التي تنشر حالة المعترض؛ أما معالجات server- وclient-streaming فتستبدلها على كلا الإصدارين.

يُبلّغ عن حالة الترقيع، لا عن إصدار

يراقب الفحص سلوك مسار التعليمات البرمجية المرقّع ولا يعتمد على سلسلة إصدار. ولا يُبلّغ عن الإصدار الذي يعمل عليه خادم مرقّع.

ALPN مطلوب

يعيد مستمع ARM ضبط اتصالات TLS التي لا تتفاوض على ALPN h2، لذا تضبطه الأداة صراحةً. الماسح الذي يتصل عبر TLS دون ALPN لا يتلقى أي بيانات من المنفذ.

تفسير النتائج غير القابلة للاستغلال

تستند كل من VULNERABLE وPATCHED إلى استجابة خادم مرصودة. أما INCONCLUSIVE و ERROR فيعنيان أن الفحصين لم يصنّفا الهدف، لذا فإن حالة ترقيعه غير معروفة. لهذا السبب يُبلَّغ عن INCONCLUSIVE بشكل منفصل عن PATCHED.

الأحكام

يحمل كل حكم وسم reason قصيرًا. يطبعه --brief كعمود ثالث ويحمله --json كحقل reason.

بالنسبة لجميع أسباب INCONCLUSIVE الثلاثة، حالة الترقيع غير معروفة. ويشير وسم السبب إلى ما يجب معالجته قبل تشغيل الفحص مرة أخرى.

رموز الخروج

الرمزالمعنى

يغطي رمز الخروج 0 الحالات PATCHED وUNAFFECTED وجميع أسباب INCONCLUSIVE الثلاثة. للتمييز بين هدف مرقّع وهدف تعذّر تصنيفه، اقرأ الحكم (العمود الأول من --brief أو حقل verdict في --json) بدلًا من رمز الخروج.

القيود

  • دور المجمّع: يجيب المجمّع على كلا الفحصين بالقيمة 14 على أي من الإصدارين ويُبلَّغ عنه بـ INCONCLUSIVE. اختُبرت هذه الحالة مقابل محاكاة تعيد إنتاج الاستجابة، وليس مقابل مجمّع منشور.
  • تحليل الترويسات: تبحث الأداة عن grpc-status كحقل HPACK حرفي ولا تنفّذ فك ترميز Huffman أو الجدول الديناميكي. يرسل نواة gRPC بلغة C، التي يستخدمها ARM، هذه التذييلات غير مضغوطة. إذا رمّزها إصدار مستقبلي بترميز Huffman، فستُبلّغ الأداة عن INCONCLUSIVE مع partial-response.
  • النطاق: ينطبق PATCHED على هذه الثغرة فقط ولا يشير إلى حالة ثغرات ARM الأخرى.
  • الاستغلال والاختراق: يشير VULNERABLE إلى أن الإصلاح غير موجود على المسار الذي وصل إليه الفحص. لا تنفّذ الأداة تعليمات برمجية على الهدف ولا تكتشف اختراقًا سابقًا؛ راجع مؤشر NetworkConnectionEntry أعلاه.
  • قابلية الوصول: تعكس النتائج ما يكشفه الخادم للموقع الشبكي الذي تعمل منه الأداة. في التثبيت الافتراضي، يستمع TCP 55555 على جميع الواجهات، بما في ذلك IPv6.

المعالجة

قم بالترقية إلى ARM 2026.2.1.7 أو أحدث، وفقًا لملاحظات إصدار ARM 2026.2.1. الإصدارات 2026.2.0.42 وما قبلها متأثرة.

ملاحظات إضافية:

  • قيّد TCP 55555 على مجمّعات وعملاء ARM نفسها. يحدّ هذا من التعرض على الأنظمة التي لا يمكن ترقيعها فورًا.
  • يزيل الإصلاح مسار المصادقة الاحتياطي؛ لكنه لا يبدّل المفتاح. ولأن المفتاح كان متطابقًا في جميع عمليات التثبيت، تعامل مع أي فترة قبل الترقيع على أنها فترة كان فيها بإمكان أي شخص قادر على الوصول إلى المستمع تجاوز مصادقته.
  • يُظهر جرد الإصدارات ما ينبغي تثبيته؛ ويُظهر هذا الفحص ما إذا كان الإصلاح ساريًا على المستمع.

الترخيص

يُوزَّع هذا الكود بموجب ترخيص MIT.

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

استخدام هذه الأداة لمهاجمة أهداف دون موافقة متبادلة مسبقة غير قانوني. تقع على عاتق المستخدم النهائي مسؤولية الالتزام بجميع القوانين المحلية والولائية والفيدرالية المعمول بها. لا يتحمل المطوّرون أي مسؤولية ولا يُسألون عن أي إساءة استخدام أو ضرر ناتج عن هذا البرنامج.

انظر أيضًا

  • ملاحظات إصدار SolarWinds ARM 2026.2.1
  • NVD — CVE-2026-28326
تنزيل الأداة
العلمالوصف
TARGETهدف واحد أو أكثر بصيغة HOST[:PORT]؛ المنفذ الافتراضي هو 55555
-f, --targets-file FILEقراءة الأهداف من ملف (واحد في كل سطر؛ تعليقات #)
-p, --port PORTالمنفذ الافتراضي عندما يحذفه الهدف (الافتراضي: 55555)
--timeout SECSالمهلة لكل فحص (الافتراضي: 12)
--workers Nالأهداف المتزامنة (الافتراضي: 16)؛ يبقى الإخراج بترتيب الإدخال
-b, --briefسطر واحد مُحاذى لكل هدف، لفحص العديد من المضيفين
--jsonإخراج JSON مُهيكل، بما في ذلك كلا الفحصين لكل هدف
--no-colorتعطيل الإخراج الملوّن (يحترم أيضًا NO_COLOR وغير TTY)
Remoting/SendGetCertificateالإصدارالحكم
14 UNAVAILABLE0 OK<= 2026.2.0.42VULNERABLE
16 UNAUTHENTICATEDأي قيمة>= 2026.2.1.7PATCHED
14 UNAVAILABLE14 UNAVAILABLEأي منهماINCONCLUSIVE
الحكموسم السببالمعنى
VULNERABLEunavailable-on-server-roleأعاد Remoting/Send القيمة 14 على مستمع يجيب على GetCertificate بدور الخادم. الإصلاح غير موجود.
PATCHEDunauthenticated-gateأعاد Remoting/Send القيمة 16، وهي الحالة التي أدخلها الإصلاح. ينطبق على هذه الثغرة فقط.
INCONCLUSIVEexternal-requests-refusedأعاد كلا الفحصين القيمة 14. يتصرف دور المجمّع وخادم مقيّد بالطريقة نفسها هنا على كلا الإصدارين. افحص خادم ARM نفسه.
INCONCLUSIVEpartial-responseأعاد فحص واحد فقط حالة، لذا لا يمكن مقارنة الزوج. أعد المحاولة.
INCONCLUSIVEunrecognized-statusأجابت نقطة النهاية بمزيج حالات خارج المجموعة المعروفة.
UNAFFECTEDnot-armلم تُجب أي خدمات ARM gRPC هنا.
ERRORunreachableفشل اتصال TCP أو مصافحة TLS أو تبادل HTTP/2.
0لم يكن أي هدف VULNERABLE
1هدف واحد على الأقل VULNERABLE
2خطأ في الاستخدام (وسائط خاطئة، أو هدف غير صالح، أو ملف أهداف غير قابل للقراءة)
130مُقاطَع (Ctrl-C)