eBPF alt sistemindeki, Linux çekirdek düzeyinde kod yürütülmesine izin veren güvenlik açığı

eBPF alt sisteminde, Linux çekirdeği içindeki işleyicileri JIT ile özel bir sanal makinede çalıştırmanıza izin veren ve yerel, ayrıcalığı olmayan bir kullanıcının ayrıcalık yükseltmesine ve kodunu yürütmesine olanak tanıyan bir güvenlik açığı (CVE-2021-4204) belirlendi. Linux çekirdek düzeyi. Sorun Linux çekirdeği 5.8'den beri ortaya çıkıyor ve çözülmedi (5.16 sürümü dahil). Dağıtımlardaki sorunu düzeltmek için oluşturulan güncellemelerin durumu şu sayfalardan takip edilebilir: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. 18 Ocak'ta yayınlanması planlanan çalışan bir istismarın oluşturulduğu açıklandı (kullanıcılara ve geliştiricilere güvenlik açığını düzeltmeleri için bir hafta süre verildi).

Güvenlik açığı, yürütme için iletilen eBPF programlarının hatalı doğrulanmasından kaynaklanmaktadır. eBPF alt sistemi, doğru kullanımı özel bir doğrulayıcı tarafından doğrulanan yardımcı işlevler sağlar. Bazı işlevler, bağımsız değişken olarak bir PTR_TO_MEM değerinin iletilmesini gerektirir ve olası ara bellek taşmalarını önlemek için doğrulayıcının, bağımsız değişkenle ilişkili belleğin boyutunu bilmesi gerekir. Bpf_ringbuf_submit ve bpf_ringbuf_discard işlevleri için, aktarılan belleğin boyutuna ilişkin veriler doğrulayıcıya bildirilmedi; bu, özel olarak tasarlanmış eBPF kodunu çalıştırırken arabellek sınırının ötesindeki bellek alanlarının üzerine yazmak için kullanılabilir.

Bir saldırı gerçekleştirmek için kullanıcının kendi BPF programını yükleyebilmesi gerekir ve yeni Linux dağıtımlarının çoğu bu yeteneği varsayılan olarak engeller (eBPF'ye ayrıcalıksız erişim de dahil olmak üzere, 5.16 sürümünden başlayarak artık çekirdeğin kendisinde varsayılan olarak yasaklanmıştır). Örneğin, güvenlik açığı Ubuntu 20.04 LTS'deki varsayılan yapılandırmada kullanılabilir, ancak Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 ve Fedora 33 ortamlarında yalnızca yöneticinin ayarlaması durumunda görünür. kernel.unprivileged_bpf_disabled parametresini 0 yapın. Zafiyeti engellemek için geçici çözüm olarak “sysctl -w kernel.unprivileged_bpf_disabled=1” komutu ile BPF programlarının ayrıcalıklı olmayan kullanıcılar tarafından çalıştırılmasını engelleyebilirsiniz.

Kaynak: opennet.ru

Yorum ekle