PolKit'teki kritik güvenlik açığı çoğu Linux dağıtımında kök erişimine izin veriyor

Qualys, dağıtımlarda kullanılan Polkit (eski adıyla PolicyKit) sistem bileşeninde, ayrıcalığı olmayan kullanıcıların yüksek erişim hakları gerektiren eylemler gerçekleştirmesine izin veren bir güvenlik açığı (CVE-2021-4034) tespit etti. Güvenlik açığı, ayrıcalığı olmayan bir yerel kullanıcının ayrıcalıklarını root yetkisine yükseltmesine ve sistemin tam kontrolünü ele geçirmesine olanak tanır. Sorunun kod adı PwnKit'ti ve çoğu Linux dağıtımında varsayılan yapılandırmada çalışan, çalışan bir istismar oluşturmasıyla dikkat çekiyor.

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 iletilen komut satırı argüman sayısının (argc) geçerliliğini kontrol etmez. Pkexec geliştiricileri, argv dizisindeki ilk girişin her zaman işlemin adını (pkexec) içerdiğini ve ikincisinin ya NULL değerini ya da pkexec aracılığıyla başlatılan komutun adını içerdiğini varsaydı. 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, bir işleme boş bir argv dizisi iletilirse, Linux execve işlevinin izin verdiği gibi, pkexec NULL'u ilk argüman olarak değerlendirecektir ( işlem adı) ve bir sonrakini, dizinin sonraki içerikleri gibi arabellek dışında olarak kullanır. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "program" "-seçenek" NULL "değer" "YOL=ad" 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 mimarisi ne olursa olsun güvenilir ve tekrarlanabilir bir şekilde yararlanılabileceği belirtiliyor. Hazırlanan istismar Ubuntu, Debian, Fedora ve CentOS üzerinde başarıyla test edildi ancak diğer dağıtımlarda da kullanılabilir. Orijinal istismarın henüz kamuya açık olmaması, bunun önemsiz olduğunu ve diğer araştırmacılar tarafından kolayca yeniden oluşturulabileceğini gösteriyor; bu nedenle, yama güncellemesinin çok kullanıcılı sistemlere mümkün olan en kısa sürede yüklenmesi önemlidir. Polkit ayrıca BSD sistemleri ve Solaris için de mevcuttur, ancak bunların kullanımı üzerinde çalışılmamıştır. Bilinen şey, OpenBSD çekirdeğinin execve() çağrıldığında null argc değerinin iletilmesine izin vermemesi nedeniyle saldırının OpenBSD üzerinde gerçekleştirilemeyeceğidir.

Sorun Mayıs 2009'da pkexec komutunun eklenmesinden bu yana mevcut. PolKit güvenlik açığına yönelik düzeltme şu anda yama olarak mevcuttur (herhangi bir yama sürümü yayınlanmamıştır), ancak dağıtım geliştiricilerine sorun önceden bildirildiği için çoğu dağıtım, güvenlik açığıyla ilgili bilgilerin açıklanmasıyla eş zamanlı olarak güncellemeyi yayınladı. Sorun RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ve Manjaro'da düzeltildi. Güvenlik açığını engellemek için geçici bir önlem olarak, SUID kök bayrağını /usr/bin/pkexec programından (“chmod 0755 /usr/bin/pkexec”) kaldırabilirsiniz.



Kaynak: opennet.ru

Yorum ekle