Haberler

GO ve Rust “net” Kütüphanesinde IP Adres Doğrulama Açığı Tespit Edildi

GO ve Rust programlama dillerinde ortak olarak kullanılan “net” kütüphanesinin “Mixed format IP adress validation vulnerability” olarak bilinen açıktan etkilendiği tespit edildi.

İlgili açık programlama dili kütüphanesinin ip adres çözümlemesi esnasında octal (sekizlik) tabanda gönderilen ip adresini decimal (onluk) tabanda gönderilen bir sayı gibi çözümlenmesinden kaynaklanıyor. Buna bağlı olarak “net” kütüphanesi ile geliştirilen uygulamalar kısaca SSRF olarak bilinen sunucu tarafı istek sahteciliği ve RFI uzaktan dosya dahil etme açıklarına karşı savunmasız olabiliyor.

Daha önce ilgili açık binlerce uygulama tarafından kullanılan bir npm kütüphanesi olan “netmask” ve Python’un standart kütüphanesi olan “ipaddress” kütüphanesinde de tespit edilmişti.

Bu hafta yapılan DEFCON konferansında güvenlik araştırmacıları  Cheng Xu, Victor VialeSick CodesNick SahlerKelly Kaoudisopennota ve John Jackson ilgili açık konusunda detaylı açıklamalarda bulundular.

İlgili açık Rust için CVE-2021-29922 ve Golang için CVE-2021-29923 numarası ile takip edilebilir. Github üzerinde “import net” ile yapılan basit bir arama sonucunda 4 milyonun üzerinde Go ile yazılmış dosyanın ilgili kütüphaneyi içerdiği görülüyor.

IP adresinin başlangıcına eklenen “0” ip adresini değiştirir

Bir ip adresi decimal, hexadecimal gibi birçok farklı formatta gösterilebilir. En fazla kullanılan ip adres gösterim şekli IPV4 adreslerinin ondalık sistemde gösterimidir. Örnek olarak 104.20.59.209 gibi gösterilen onluk taban ip adres formatı en çok kullanılan ip adres formatıdır. Bunun yanında ip adresleri octal (sekizlik) taban formatı ile de gösterilebilir. 104.20.59.209 olarak onluk tabanda gösterilen ip adresi sekizlik tabanda 0150.0024.0073.0321 şeklinde gösterilir.

Bir ip adresi “0” ile başlıyorsa IETF’nin yayımladığı standart dokümana göre uygulamalar tarafından ilgili ip adresi sekizlik tabanda gelen ip adresi olarak parse edilir. Bu özellik herhangi bir web tarayıcısı üzerinde test edilebilir. Web tarayıcısına localhost adresi olarak bilinen 127.0.0.1 adresini 0127.0.0.1 şeklinde yazarsanız tarayıcının 87.0.0.1 adresine gitmeye çalıştığını görürsünüz. Bunun sebebi “0” ile başlayan ip adresinin octal tabanda algılanıp decimal formata dönüştürülmesinden kaynaklıdır.

Go ve Rust dilinde kullanılan “net” kütüphanesinde ise ip adresinin başlangıcında kullanılan “0”’ların dikkate alınmadan ip adres çözümlemesi yapıldığı tespit edildi. Sonuç olarak “net” kütüphanesi ile ip adres çözümlemesi yapılırken sekizlik taban olarak çözümlenmesi gereken adreslerin ondalık taban olarak çözümlenip yanlış adres çözümlemesi yapıldığı görülebiliyor.

Bu açık kullanılarak saldırganların kullandığı sekizlik formattaki bir ip adresi ile uygulamalar localhost adresine veya farkı ip adreslerine yönlendirilerek SSRF veya RFI saldırıları gerçekleştirilebiliyor.

Golang için 1.17 beta versiyonunda ilgili açık için bir yama yayımlandı. Rust kullanıcıları için de 1.53 ve üzerindeki versiyonlarda ilgili açığın kapatıldığı bildirildi.

Kaynak: www.bleepingcomputer.com

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu