PolKit-də əksər Linux paylamalarında kök girişinə imkan verən kritik zəiflik

Qualys imtiyazsız istifadəçilərə yüksək giriş hüquqları tələb edən hərəkətləri yerinə yetirmək imkanı vermək üçün paylamalarda istifadə edilən Polkit (əvvəllər PolicyKit) sistem komponentində zəifliyi (CVE-2021-4034) müəyyən edib. Zəiflik imtiyazsız yerli istifadəçiyə öz imtiyazlarını kökləmək və sistem üzərində tam nəzarəti əldə etmək imkanı verir. Problemin kod adı PwnKit idi və əksər Linux paylamalarında defolt konfiqurasiyada işləyən işləyən eksploit istehsal etməsi ilə diqqət çəkir.

Problem SUID kök bayrağı ilə birlikdə gələn və müəyyən edilmiş PolKit qaydalarına uyğun olaraq başqa istifadəçinin imtiyazları ilə əmrləri yerinə yetirmək üçün nəzərdə tutulmuş PolKit-in pkexec yardım proqramında mövcuddur. Pkexec-ə ötürülən əmr xətti arqumentlərinin düzgün idarə edilməməsi səbəbindən, imtiyazsız istifadəçi müəyyən edilmiş giriş qaydalarından asılı olmayaraq autentifikasiyadan yan keçə və kodunu kök kimi işlədə bilər. Hücum üçün PolKit-də hansı parametrlərin və məhdudiyyətlərin göstərildiyinin əhəmiyyəti yoxdur, pkexec yardım proqramı ilə icra olunan fayl üçün SUID kök atributunun təyin edilməsi kifayətdir.

Pkexec, prosesə başladıqda verilən əmr xətti arqumentlərinin sayının (argc) etibarlılığını yoxlamır. Pkexec tərtibatçıları güman edirdilər ki, argv massivindəki birinci giriş həmişə prosesin adını (pkexec), ikincisi isə ya NULL dəyərini, ya da pkexec vasitəsilə işə salınan əmrin adını ehtiva edir. Arqumentlərin sayı massivin faktiki məzmunu ilə yoxlanılmadığından və həmişə 1-dən böyük olduğu qəbul edildiyindən, əgər proses Linux execve funksiyasının imkan verdiyi kimi boş argv massivindən keçərsə, pkexec NULL-u ilk arqument kimi qəbul edərdi ( prosesin adı) və serialın sonrakı məzmunu kimi bufer yaddaşından kənarda olan növbəti. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "proqram" "-seçim" NULL "dəyər" "PATH=ad" NULL

Problem ondadır ki, argv massivindən sonra yaddaşda mühit dəyişənlərini ehtiva edən envp massivi var. Beləliklə, argv massivi boşdursa, pkexec məzmunu idarə oluna bilən ətraf dəyişənləri olan massivin birinci elementindən (argv[1] envp[0] ilə eyni oldu) yüksək imtiyazlarla icra edilən əmr haqqında məlumatları çıxarır. təcavüzkar tərəfindən.

argv[1] dəyərini aldıqdan sonra pkexec PATH-də fayl yollarını nəzərə alaraq, icra olunan faylın tam yolunu müəyyən etməyə çalışır və argv[1]-ə geri tam yolu olan sətirə göstərici yazır. argv[1] envp[0] ilə eyni olduğu üçün birinci mühit dəyişəninin dəyərinin üzərinə yazılmasına gətirib çıxarır. Birinci mühit dəyişəninin adını manipulyasiya etməklə, təcavüzkar pkexec-də başqa mühit dəyişənini əvəz edə bilər, məsələn, suid proqramlarında icazə verilməyən “LD_PRELOAD” mühit dəyişənini əvəz edə və onların ortaq kitabxanasının proqrama yüklənməsini təşkil edə bilər. proses.

İşləyən eksploit, kodu iconv_open() funksiyasından istifadə edən g_printerr() funksiyasına zəng edərkən dinamik şəkildə yüklənən simvolların kodlaşdırılması kitabxanasına gedən yolu müəyyən etmək üçün istifadə edilən GCONV_PATH dəyişəninin əvəz edilməsini nəzərdə tutur. GCONV_PATH-də yolu yenidən müəyyən etməklə, təcavüzkar yüklənən standart iconv kitabxanası deyil, pkexec-in hələ də işlədiyi mərhələdə xəta mesajı görünən zaman işləyicilərin icra ediləcək öz kitabxanası olduğuna əmin ola bilər. kök hüquqları və işə salmadan əvvəl icazələr yoxlanılır.

Qeyd olunur ki, problem yaddaşın korlanmasından qaynaqlansa da, istifadə olunan aparat arxitekturasından asılı olmayaraq, ondan etibarlı və təkrar-təkrar istifadə oluna bilər. Hazırlanmış istismar Ubuntu, Debian, Fedora və CentOS-da uğurla sınaqdan keçirilib, lakin digər paylanmalarda da istifadə oluna bilər. Orijinal istismar hələ ictimaiyyətə açıq deyil, bu onun mənasız olduğunu və digər tədqiqatçılar tərəfindən asanlıqla yenidən yaradıla biləcəyini göstərir, ona görə də çox istifadəçi sistemlərində yamaq yeniləməsini mümkün qədər tez quraşdırmaq vacibdir. Polkit BSD sistemləri və Solaris üçün də mövcuddur, lakin onlardan istifadə üçün öyrənilməmişdir. Məlum olan budur ki, OpenBSD-də hücum həyata keçirilə bilməz, çünki OpenBSD nüvəsi execve() çağırıldıqda null argc dəyərinin ötürülməsinə icazə vermir.

Problem 2009-cu ilin may ayından, pkexec əmri əlavə edildikdən bəri mövcuddur. PolKit boşluğunun düzəldilməsi hal-hazırda yamaq kimi əlçatandır (heç bir yamaq buraxılmayıb), lakin paylama tərtibatçılarına problem barədə əvvəlcədən məlumat verildiyi üçün əksər paylamalar zəiflik haqqında məlumatın açıqlanması ilə eyni vaxtda yeniləməni dərc edib. Problem RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux və Manjaro-da həll olunub. Zəifliyin qarşısını almaq üçün müvəqqəti tədbir olaraq, SUID kök bayrağını /usr/bin/pkexec proqramından silə bilərsiniz (“chmod 0755 /usr/bin/pkexec”).



Mənbə: opennet.ru

Добавить комментарий