URL Ayrıştırma Hataları DoS, RCE, Spoofing ve Daha Fazlasına İzin Verir
16 popüler üçüncü taraf URL ayrıştırma kitaplığı arasındaki yaygın tutarsızlıklardan kaynaklanan tehlikeli güvenlik hataları, çok çeşitli web uygulamalarını etkileyebilir.
16 farklı URL ayrıştırma kitaplığı arasındaki tutarsızlıklardan kaynaklanan sekiz farklı güvenlik açığı, çeşitli web uygulamalarında hizmet reddi (DoS) koşullarına, bilgi sızıntılarına ve uzaktan kod yürütülmesine (RCE) izin verebilir, araştırmacılar uyarıyor.
Hatalar, çeşitli diller için yazılmış üçüncü taraf web paketlerinde bulundu ve Log4Shell ve diğer yazılım tedarik zinciri tehditleri gibi , yüzlerce veya binlerce farklı web uygulamasına ve projesine aktarılabilirdi. Etkilenenler Flask (Python ile yazılmış bir mikro web çerçevesi), Video.js (bir HTML5 video oynatıcı), Belledonne (ücretsiz VoIP ve IP video telefonu), Nagios XI (ağ ve sunucu izleme) ve Clearance (Ruby için parola doğrulama).
URL Ayrıştırma Karışıklığını Anlama
URL ayrıştırma, trafiği farklı bağlantılar veya farklı sunuculara doğru şekilde yönlendirmek için bir web adresini temel bileşenlerine ayırma işlemidir. Çeşitli programlama dilleri için kullanılabilen URL ayrıştırma kitaplıkları, bu işlevi yerine getirmek için genellikle uygulamalara aktarılır.
Claroty Team82 araştırma bölümünden araştırmacılar ve Synk Pazartesi günü bir analizde "URL'ler aslında beş farklı bileşenden oluşturulmuştur: şema, yetki, yol, sorgu ve bir parça". "İsteğe ilişkin protokolü, kaynağı tutan ana bilgisayarı, tam olarak hangi kaynağın getirilmesi gerektiğini ve daha fazlasını dikte eden olsun, her bileşen farklı bir rolü yerine getirir." demekte.
Birleşik bir analize göre, her bir kitaplığın ayrıştırma etkinliklerini gerçekleştirme biçimindeki farklılıklar sayesinde güvenlik açıkları ortaya çıkıyor.
Team82 ve Synk, urllib (Python), urllib3 (Python), rfc3986 (Python), httptools (Python), curl lib (cURL), Wget, Chrome (Tarayıcı), Uri (.NET) dahil olmak üzere 16 farklı URL ayrıştırma kitaplığını inceledi. , URL (Java), URI (Java), parse_url (PHP), url (NodeJS), url-parse (NodeJS), net/url (Go), uri (Ruby) ve URI (Perl).
Bunlar arasında, bu kitaplıkların bileşenleri nasıl ayrıştırdığına ilişkin beş tutarsızlık kategorisi belirlediler:
- Şema Karışıklığı: Eksik veya hatalı biçimlendirilmiş Şema içeren URL'leri içeren bir karışıklık
- Eğik Çizgi Karışıklığı: Düzensiz sayıda eğik çizgi içeren URL'leri içeren bir karışıklık
- Ters Eğik Çizgi Karışıklığı: Ters eğik çizgi (\) içeren URL'leri içeren bir karışıklık
- URL Kodlu Veri Karışıklığı: URL Kodlu verileri içeren URL'leri içeren bir karışıklık
- Şema Karışıklıkları: Belirli bir şemaya ait bir URL'nin, şemaya özgü bir ayrıştırıcı olmadan ayrıştırılmasını içeren bir karışıklık
Sorun şu ki, rapora göre iki ana web uygulaması geliştirme sorunu sayesinde bu tutarsızlıklar savunmasız kod blokları oluşturabilir:
- Birden Çok Ayrıştırıcı Kullanımda: İster tasarım ister gözetim nedeniyle, geliştiriciler bazen projelerde birden fazla URL ayrıştırma kitaplığı kullanır. Bazı kitaplıklar aynı URL'yi farklı şekilde ayrıştırabildiğinden, koda güvenlik açıkları eklenebilir.
- Belirtim Uyumsuzluğu: Farklı web standartlarına veya URL belirtimlerine göre farklı ayrıştırma kitaplıkları yazılır, bu da tasarım gereği tutarsızlıklar yaratır. Bu aynı zamanda güvenlik açıklarına da yol açar çünkü geliştiriciler URL spesifikasyonları ve bunların etkileri arasındaki farklara aşina olmayabilirler (ör. nelerin kontrol edilmesi veya sterilize edilmesi gerektiği).
Gerçek dünyadaki bir saldırı senaryosunun bir örneği olarak, eğik çizgi karışıklığı, RCE'yi elde etmek için kullanılabilecek sunucu tarafı istek sahteciliği (SSRF) hatalarına yol açabilir. Araştırmacılar, farklı kitaplıkların normalden daha fazla eğik çizgi içeren URL'leri (örneğin, https:///www.google.com) farklı şekillerde ele aldığını açıkladı: Bazıları fazladan eğik çizgiyi görmezden gelirken, diğerleri URL'yi yok olarak yorumlar.
Eski durumda (çoğu modern tarayıcının yanı sıra cURL'nin yaklaşımı), hatalı biçimlendirilmiş URL'leri yanlış sayıda eğik çizgi ile kabul etmek SSRF'ye yol açabilir, araştırmacılar açıkladı: "[Kütüphaneler] fazladan eğik çizgileri yok sayar... [hatalı biçimlendirilmiş] URL, boş bir yetkiye (netloc) sahip bir URL olarak, böylece netloc'u (bu durumda boş bir dize) google.com ile karşılaştıran güvenlik kontrolünden geçirilir. Bununla birlikte, cURL fazladan eğik çizgiyi yok saydığından, URL'yi yalnızca iki eğik çizgi varmış gibi getirecek, böylece doğrulama girişimini atlayacak ve bir SSRF güvenlik açığına neden olacaktır."
Claroty'ye göre, Log4Shell yama baypasından URL karışıklığı da sorumludur, çünkü JNDI arama sürecinde iki farklı URL ayrıştırıcı kullanıldı: URL'yi doğrulamak için bir ayrıştırıcı ve onu getirmek için bir ayrıştırıcı kullanıldı.
Araştırmacılar, "Her bir ayrıştırıcının URL'nin Parça bölümünü (#) nasıl ele aldığına bağlı olarak, Otorite de değişir" dedi. “URL'nin ana bilgisayarına izin verildiğini doğrulamak için, URL'yi ayrıştıran, ana bilgisayarı çıkaran ve ana bilgisayarın izin verilen ana bilgisayarların beyaz listesinde olup olmadığını kontrol eden Java'nın URI sınıfı kullanıldı. Ve gerçekten de, bu URL'yi Java'nın URI'sini kullanarak ayrıştırırsak, URL'nin ana bilgisayarının beyaz listede bulunan 127.0.0.1 olduğunu öğreniriz. Ancak, belirli işletim sistemlerinde (çoğunlukla macOS) ve belirli yapılandırmalarda, JNDI arama işlemi bu URL'yi getirdiğinde, onu 127.0.0.1'den getirmeye çalışmaz, bunun yerine 127.0.0.1#.evilhost.com'a istekte bulunur. Bu, bu kötü amaçlı yükün (URI ayrıştırıcısı tarafından yapılan) izin verilenLdapHost yerel ana bilgisayar doğrulamasını atlayacağı anlamına gelir.
URL Ayrıştırma Güvenlik Hataları
Araştırmacılar, analizlerinde, üçüncü taraf web uygulamalarında URL ayrıştırma karışıklığından kaynaklanan sekiz yüksek önem düzeyine sahip güvenlik açığıyla karşılaştı. Flask'ın desteklenmeyen sürümlerinde bulunanlar dışında hepsine yama yapıldığını söylediler, bu nedenle geliştiricilerin uygulamalarını güncellenmiş sürümlerle yenilemeleri gerekiyor:
- Şişe güvenliği açık yönlendirmesi (Python, CVE-2021-23385 )
- Şişe-güvenlik-çok açık yönlendirme (Python, CVE-2021-32618 )
- Flask-Kullanıcı açık yönlendirmesi (Python, CVE-2021-23401 )
- Flask zincirsiz açık yönlendirme (Python, CVE-2021-23393 )
- Belledonne'un SIP Yığını boş gösterici referansı (DoS) (C, CVE-2021-33056 )
- Video.js siteler arası komut dosyası çalıştırma (XSS) (JavaScript, CVE-2021-23414 )
- Nagios XI açık yönlendirme (PHP, CVE-2021-37352 )
- Açık yönlendirme açık yönlendirmesi (Ruby, CVE-2021-23435 )
Açık yönlendirme güvenlik açıkları, kimlik sahtekarlığı, kimlik avı ve ortadaki adam saldırılarına (MITM) olanak sağladıkları için istismar için popülerdir. Bir web uygulaması, kullanıcının belirli bir eylemden sonra yönlendirileceği bir URL'yi belirten, kullanıcı tarafından kontrol edilen bir girişi kabul ettiğinde ortaya çıkarlar. Örneğin, bir kullanıcı bir web sitesinde oturum açtığında, kötü niyetli benzer bir siteye yönlendirilebilir.
Araştırmacılar, tipik olarak açık yönlendirme saldırılarının doğrulama yoluyla engellendiğini açıkladı: "Web sunucusu verilen URL'yi doğrular ve yalnızca aynı siteye veya bir güvenilir alan listesine ait olan URL'lere izin verir."
URL kitaplığı karışıklığı, Gümrükleme hatasında olduğu gibi doğru doğrulamayı engelleyebilir. Araştırmacılar, Clearance (basit ve güvenli e-posta ve parola kimlik doğrulamasını sağlayan Ruby's Rails çerçevesi için popüler bir üçüncü taraf eklentisi) içindeki savunmasız işlevin “return_to” olduğunu belirtti. Bu işlev, bir oturum açma/oturum kapatma prosedüründen sonra çağrılmak içindir ve kullanıcıyı güvenli bir şekilde daha önce istedikleri sayfaya yönlendirmelidir. Bununla birlikte, bir hedef aşağıdaki sözdizimine sahip bir URL'ye tıklamaya ikna edilebilirse altüst edilebilir: http://www.victim.com/////evil.com.
Araştırmacılar, "Rails, URL'deki birden çok eğik çizgiyi yok saydığından, yol segmenti, tamamen Açıklık'ta (/////evil.com) ayrıştırılmak üzere ulaşacak" dedi. “URI.parse iki eğik çizgiyi kestiği için, ortaya çıkan URL ///evil.com olacaktır. Sunucu, kullanıcıyı bu URL'ye yönlendirdiğinde, ///evil.com, tarayıcı bu ağ yolunu göreceli referansı, kötü.com etki alanına (ana bilgisayar) işaret eden mutlak http://evil.com URL'sine dönüştürür."
Belledonne VoIP Çöküyor
Daha ilginç hatalardan biri, ücretsiz bir IP üzerinden ses yazılım telefonu, SIP istemcisi ve sesli ve görüntülü aramalar için kullanılan hizmet olan Belledonne's Linphone'da bulundu. Analize göre, SIP mesajı ayrıştırmayı nasıl gerçekleştirdiği sayesinde şema karışıklığından muzdariptir; bu, bir URL ayrıştırma kitaplığının eksik bir şema ("http" veya bir web adresinin benzer kısmı) tarafından karıştırılmasıdır.
Araştırmacılar, "Beledone'un URL ayrıştırma işlevine bakarak, SIP URL'sini SIP başlıklarının içinde ayrıştıran [a] bir kod parçası bulduk" dedi. "Beledone, SIP URL'sini genel bir URL olarak ayrıştırır ve şemanın SIP mi yoksa strcasecmp kullanan SIP'ler mi olduğunu kontrol eder, verilen URL'nin bir SIP URL'si olup olmadığını kontrol eder."
Bununla birlikte, bir Belledonne general_uri, belirli bileşenlerin mevcut olmasını gerektirmeden farklı URL bileşenleri tarafından oluşturulan URL'leri kabul eder.
"Bu, yalnızca bir yol içeren bir URL'nin geçerli bir URL olduğu, ancak bir URL şemasına sahip olmadığı anlamına gelir" sonucuna vardılar. “Bunu kullanarak, yalnızca tek bir eğik çizgi (/) içeren bir URL sağladık, bu da URL şemasının NULL olmasına neden oldu. Ardından, Belledone strcasecmp kullandığında, bir NULL işaretçisini karşılaştırır (çünkü hiçbir şema sağlanmamıştır), bu da bir NULL işaretçi başvurusunun kaldırılmasına ve uygulamanın çökmesine neden olur.”
Ekip, yalnızca kötü niyetli bir VoIP araması yaparak herhangi bir uzak kullanıcının uygulamasını çökertebilen ve "saldırıya uğrayan kullanıcıdan sıfır etkileşim gerektiren" bir kavram kanıtlama kodu oluşturdu.
Team82 ve Synk araştırmacıları, "uzaktan kod yürütülmesine neden olabilecek bir SSRF güvenlik açığından, karmaşık bir kimlik avı saldırısına neden olabilecek bir açık yönlendirme güvenlik açığına kadar birçok olası güvenlik açığının ortaya çıkabileceğini" belirtti. Geliştiricilerin uygulamalarını korumak için aşağıdaki en iyi uygulamaları benimsemeleri gerektiğini söylediler:
Mümkün olduğunca az ayrıştırıcı kullanın. Araştırmacılar, "Bir URL ayrıştırıcı kullanmaktan kaçınmanızı öneririz ve çoğu durumda bu kolayca elde edilebilir" dedi.
Ayrıştırılmış bir URL'yi bir mikro hizmet ortamına aktarın. "Mikro hizmetler farklı çerçevelerde veya programlama dillerinde uygulanırsa, muhtemelen farklı URL ayrıştırıcıları kullanacaklardır" dediler. "Bu sorunu önlemek için ön uç mikro hizmette bir URL'yi ayrıştırabilir ve ayrıştırılmış biçiminde daha fazla aktarabilirsiniz."
Uygulama iş mantığıyla ilgili ayrıştırıcılardaki farklılıkları anlayın. Bazen birden fazla ayrıştırıcı kullanmaktan kaçınılamaz, bu nedenle geliştiricilerin ayrıştırma davranışlarındaki farklılıklar hakkında bilgi sahibi olmaları gerekir.
Ayrıştırmadan önce her zaman URL'yi standart hale getirin. URL'leri ayrıştırmadan önce uygun formlarına döndürmek için uygulamaların birden çok eğik çizgiyi, beyaz boşlukları ve kontrol karakterlerini kaldırdığından her zaman emin olun.
Kaynak: https://threatpost.com/url-parsing-bugs-dos-rce-spoofing/177493/
Siber dünyadaki gelişmelerden haberdar olmak ve haftalık haber bültenine ulaşmak için e-posta listesine kaydolun.