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

eBPF alt sisteminde, Linux çekirdeği içindeki işleyicileri JIT ile özel bir sanal makinede çalıştırmanıza olanak tanıyan iki yeni güvenlik açığı tespit edildi. Her iki güvenlik açığı da kodunuzu yalıtılmış bir eBPF sanal makinesinin dışında çekirdek haklarıyla çalıştırmanıza olanak tanır. Sorunlarla ilgili bilgiler, Pwn2Own yarışmasını yürüten Zero Day Initiative ekibi tarafından yayınlandı ve bu yıl boyunca Ubuntu Linux'a daha önce bilinmeyen güvenlik açıklarını kullanan üç saldırı gösterildi (eBPF'deki güvenlik açıklarının bu saldırılarla ilgili olup olmadığı rapor edilmedi) .

  • CVE-2021-3490 - Güvenlik açığı, eBPF ALU32'de bit düzeyinde AND, OR ve XOR işlemleri gerçekleştirilirken 32 bit sınır dışı denetiminin eksikliğinden kaynaklanıyor. Saldırgan, tahsis edilen arabelleğin sınırları dışındaki verileri okumak ve yazmak için bu hatadan yararlanabilir. XOR işlemleriyle ilgili sorun, çekirdek sürümü 5.7-rc1'den başlayarak ve AND ve OR - 5.10-rc1'den başlayarak ortaya çıkıyor.
  • CVE-2021-3489 - Güvenlik açığı, halka arabelleğinin uygulanmasındaki bir hatadan kaynaklanıyor ve bpf_ringbuf_reserve işlevinin, ayrılan bellek bölgesinin boyutunun gerçek boyuttan daha az olma olasılığını kontrol etmemesi nedeniyle ortaya çıkıyor ringbuf'un. Sorun 5.8-rc1 sürümünden bu yana ortaya çıkıyor.

Dağıtımlardaki güvenlik açıklarının yama durumu şu sayfalardan takip edilebilir: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Düzeltmeler yamalar halinde de mevcuttur (CVE-2021-3489, CVE-2021-3490). Sorunun kötüye kullanılıp kullanılamayacağı, eBPF sistem çağrısının kullanıcı tarafından erişilebilir olup olmamasına bağlıdır. Örneğin, RHEL'deki varsayılan yapılandırmada, güvenlik açığından yararlanılabilmesi için kullanıcının CAP_SYS_ADMIN haklarına sahip olması gerekir.

Ayrı olarak, Linux çekirdeğinde, yerel bir kullanıcının ayrıcalıklarını kök düzeyine yükseltmesine olanak tanıyan başka bir güvenlik açığını (CVE-2021-32606) not edebiliriz. Sorun, Linux çekirdeği 5.11'den bu yana belirgindir ve CAN ISOTP protokolünün uygulanmasındaki bir yarış koşulundan kaynaklanmaktadır; bu, isotp_setsockopt() işlevinde uygun kilitlerin ayarlanmaması nedeniyle soket bağlama parametrelerinin değiştirilmesini mümkün kılmaktadır. CAN_ISOTP_SF_BROADCAST bayrağını işlerken.

ISOTP soketi kapatıldıktan sonra, alıcı soketine bağlanma etkin kalır ve alıcı soket ile ilişkili bellek serbest bırakıldıktan sonra soketle ilişkili yapıları kullanmaya devam edebilir (isotp_sock yapısına yapılan çağrı nedeniyle serbest kullanım sonrası kullanım) isotp_rcv() çağrıldığında bu zaten serbest bırakılmıştır). Veri işleme yoluyla, sk_error_report() işlevine yönelik işaretçiyi geçersiz kılabilir ve kodunuzu çekirdek düzeyinde çalıştırabilirsiniz.

Kaynak: opennet.ru

Yorum ekle