Rust ve Go dillerinin ağ kitaplıklarında IP adresi doğrulamasını atlamanıza olanak tanıyan güvenlik açığı

Rust ve Go dillerinin standart kütüphanelerinde, adres ayrıştırma işlevlerinde sekizli basamaklı IP adreslerinin yanlış işlenmesiyle ilgili güvenlik açıkları tespit edilmiştir. Güvenlik açıkları, örneğin SSRF (Sunucu tarafı istek sahteciliği) saldırıları gerçekleştirirken geridöngü arabirimi adreslerine (127.xxx) veya intranet alt ağlarına erişimi düzenlemek için uygulamalardaki geçerli adreslere yönelik kontrollerin atlanmasına olanak tanır. Güvenlik açıkları, daha önce node-netmask (JavaScript, CVE-2021-28918, CVE-2021-29418), özel ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE-) kitaplıklarında tanımlanan sorun döngüsünü sürdürüyor. 2021-29921 ), Data::Validate::IP (Perl, CVE-2021-29662) ve Net::Netmask (Perl, CVE-2021-29424).

Spesifikasyona göre, sıfırla başlayan IP adresi dizesi değerleri sekizli sayılar olarak yorumlanmalıdır, ancak birçok kitaplık bunu hesaba katmaz ve değeri ondalık sayı olarak ele alarak sıfırı atar. Örneğin sekizli sistemde 0177 sayısı ondalık sistemde 127'ye eşittir. Saldırgan, ondalık gösterimde "0177.0.0.1"e karşılık gelen "127.0.0.1" değerini belirterek bir kaynak talep edebilir. Sorunlu kütüphanenin kullanılması durumunda uygulama 0177.0.0.1 adresinin 127.0.0.1/8 alt ağında olduğunu tespit etmeyecektir ancak aslında istek gönderirken 0177.0.0.1 adresine erişebilmektedir. ağ işlevleri 127.0.0.1 olarak işlenecektir. Benzer şekilde “012.0.0.1” (“10.0.0.1”e eşdeğer) gibi değerler belirterek intranet adreslerine erişim kontrolünde hile yapabilirsiniz.

Rust'ta standart kitaplık "std::net" bir sorundan etkilendi (CVE-2021-29922). Bu kütüphanenin IP adresi ayrıştırıcısı, adresteki değerlerden önce bir sıfır attı, ancak yalnızca üç rakamdan fazlası belirtilmemişse, örneğin "0177.0.0.1" geçersiz bir değer olarak algılanacak ve hatalı bir sonuç olarak algılanacaktır. 010.8.8.8 ve 127.0.026.1'e yanıt olarak iade edilecektir. Kullanıcı tarafından belirtilen adresleri ayrıştırırken std::net::IpAddr kullanan uygulamalar, SSRF (Sunucu tarafı istek sahteciliği), RFI (Uzak Dosya Ekleme) ve LFI (Yerel Dosya Ekleme) saldırılarına karşı potansiyel olarak savunmasızdır. Güvenlik açığı Rust 1.53.0 dalında giderildi.

Rust ve Go dillerinin ağ kitaplıklarında IP adresi doğrulamasını atlamanıza olanak tanıyan güvenlik açığı

Go'da standart kitaplık "net" etkilenir (CVE-2021-29923). net.ParseCIDR yerleşik işlevi, sekizlik sayıların önündeki sıfırları işlemek yerine atlar. Örneğin bir saldırgan, net.ParseCIDR(00000177.0.0.1/00000177.0.0.1) işlevinde işaretlendiğinde 24/177.0.0.1 olarak değil 24/127.0.0.1 olarak ayrıştırılacak olan 24 değerini iletebilir. Sorun Kubernetes platformunda da kendini gösteriyor. Güvenlik açığı Go sürüm 1.16.3 ve beta 1.17'de düzeltildi.

Rust ve Go dillerinin ağ kitaplıklarında IP adresi doğrulamasını atlamanıza olanak tanıyan güvenlik açığı


Kaynak: opennet.ru

Yorum ekle