PolKit'teki kritik bir güvenlik açığı, çoğu dağıtımda root erişimine olanak tanıyor. Linux

Qualys, dağıtımlarda yetkisiz kullanıcıların yüksek erişim hakları gerektiren işlemleri gerçekleştirmesine olanak tanıyan Polkit (eski adıyla PolicyKit) sistem bileşeninde bir güvenlik açığı (CVE-2021-4034) tespit etti. Bu güvenlik açığı, yetkisiz yerel bir kullanıcının ayrıcalıklarını root seviyesine yükseltmesine ve sistemin tam kontrolünü ele geçirmesine olanak tanıyor. PwnKit kod adıyla bilinen bu sorun, çoğu dağıtımda varsayılan yapılandırmada çalışan bir güvenlik açığı istismarının geliştirilmesiyle dikkat çekiyor. Linux.

Sorun, PolKit'in SUID kök bayrağıyla birlikte gelen ve belirtilen PolKit kurallarına göre başka bir kullanıcının ayrıcalıklarıyla komutları çalıştırmak üzere tasarlanmış pkexec yardımcı programında mevcut. Pkexec'e aktarılan komut satırı argümanlarının yanlış işlenmesi nedeniyle, ayrıcalığı olmayan bir kullanıcı, belirlenen erişim kurallarından bağımsız olarak kimlik doğrulamayı atlayabilir ve kodunu root olarak çalıştırabilir. Saldırı için PolKit'te hangi ayarların ve kısıtlamaların belirtildiği önemli değildir, pkexec yardımcı programıyla yürütülebilir dosya için SUID kök özniteliğinin ayarlanması yeterlidir.

Pkexec, bir işlemi başlatırken geçirilen komut satırı argüman sayısının (argc) geçerliliğini kontrol etmez. Pkexec geliştiricileri, argv dizisinin ilk girdisinin her zaman işlem adını (pkexec) içerdiğini ve ikincisinin ya NULL ya da pkexec aracılığıyla başlatılan komutun adı olduğunu varsaymıştır. Argüman sayısı dizinin gerçek içeriğine göre kontrol edilmediğinden ve her zaman 1'den büyük olduğu varsayıldığından, execve fonksiyonu tarafından izin verilen boş bir argv dizisi işleme geçirilirse, Linuxpkexec, NULL'ı ilk argüman (işlem adı) olarak, arabelleğin sonundan sonraki belleği ise dizinin geri kalanı olarak ele aldı. |———+———+———+————|———+———+——+———| | argv[0] | argv[1] | … | argv[argc] | envp[0] | envp[1] | … | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "program" "-option" NULL "value" "PATH=name" NULL

Sorun argv dizisinden sonra bellekte ortam değişkenlerini içeren bir envp dizisinin bulunmasıdır. Bu nedenle, argv dizisi boşsa, pkexec, içeriği kontrol edilebilen ortam değişkenleri (argv[1], envp[0] ile aynı hale geldi) içeren dizinin ilk öğesinden yükseltilmiş ayrıcalıklarla komut çalıştırması hakkındaki verileri çıkarır. saldırgan tarafından.

argv[1] değerini alan pkexec, PATH'deki dosya yollarını hesaba katarak yürütülebilir dosyanın tam yolunu belirlemeye çalışır ve argv[1]'e giden tam yolu içeren dizeye bir işaretçi yazar. argv[1] envp[0] ile aynı olduğundan, ilk ortam değişkeninin değerinin üzerine yazılmasına yol açar. Saldırgan, ilk ortam değişkeninin adını değiştirerek pkexec'teki başka bir ortam değişkenini değiştirebilir; örneğin, suid programlarında izin verilmeyen "LD_PRELOAD" ortam değişkenini değiştirebilir ve paylaşılan kitaplıklarının Pkexec'e yüklenmesini sağlayabilir. işlem.

Çalışan istismar, kodu iconv_open() kullanan g_printerr() işlevi çağrılırken dinamik olarak yüklenen, sembol kod dönüştürme kitaplığının yolunu belirlemek için kullanılan GCONV_PATH değişkeninin değiştirilmesini içerir. Saldırgan, GCONV_PATH'deki yolu yeniden tanımlayarak, yüklenenin standart iconv kütüphanesi değil, kendi kütüphanesi olduğundan emin olabilir; pkexec'in hala çalıştığı aşamada bir hata mesajı görüntülendiğinde işleyiciler çalıştırılacaktır. kök hakları ve başlatmadan önce izinler kontrol edilir.

Sorunun bellek bozulmasından kaynaklanmasına rağmen, kullanılan donanım mimarisinden bağımsız olarak güvenilir ve tekrarlanabilir bir şekilde istismar edilebildiği belirtilmektedir. Hazırlanan istismar, başarıyla test edilmiştir. Ubuntu, DebianFedora ve CentOSAncak diğer dağıtımlarda da kullanılabilir. Orijinal istismar henüz kamuya açık değil, bu da istismarın önemsiz olduğunu ve diğer araştırmacılar tarafından kolayca yeniden oluşturulabileceğini gösteriyor. Bu nedenle, çok kullanıcılı sistemlerde yamayı mümkün olan en kısa sürede yüklemek önemlidir. Polkit, BSD sistemleri ve Solaris için de mevcuttur, ancak bunlarda istismarı incelenmemiştir. Saldırının OpenBSD'de gerçekleştirilemeyeceği bilinmektedir, çünkü OpenBSD çekirdeği execve() çağrısına sıfır argc değeri geçirilmesine izin vermez.

Sorun, pkexec komutunun eklendiği Mayıs 2009'dan beri mevcut. PolKit'teki güvenlik açığı için bir yama mevcut (henüz düzeltici bir sürüm yayınlanmadı), ancak dağıtım geliştiricileri sorundan önceden haberdar edildiğinden, çoğu dağıtım güvenlik açığının açıklanmasıyla eş zamanlı olarak bir güncelleme yayınladı. Sorun RHEL 6/7/8'de düzeltildi. Debian, UbuntuopenSUSE, SUSE, Fedora, ALT LinuxROSA, Gentoo, Void Linux, Kemer Linux ve Manjaro. Güvenlik açığını geçici olarak engellemek için, /usr/bin/pkexec programından SUID root bayrağını kaldırabilirsiniz ("chmod 0755 /usr/bin/pkexec").



Kaynak: opennet.ru
DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster