Web tarayıcıları dünya çapında milyarlarca cihazda yüklüdür ve bu da onları siber suçlular için birincil hedef haline getirmektedir. Büyük web tarayıcıları geniş kullanıcı kitlelerine sahip olduğundan, tek bir güvenlik açığı geniş kapsamlı sonuçlar doğurabilir. Tarayıcıları güncel tutmak, gelişen tehditlere karşı korunmak için kritik öneme sahiptir.
Web tarayıcılarındaki güvenlik açıklarının ciddiyetini göstermek için arkadaşlarımız, Chromium tabanlı tarayıcılarda özellikle Chrome DevTools'u etkileyen bir güvenlik açığı olan CVE-2024-6778'in kapsamlı bir analizini gerçekleştirdiler. Bu blog, güvenlik açığının teknik yönleri, potansiyel etkisi ve azaltma stratejilerinin ayrıntılı bir incelemesini sunmaktadır.
CVE-2024-6778'in Arka Planı
CVE-2024-6778, Chrome DevTools'ta keşfedilen bir yarış koşulu güvenlik açığıdır. Saldırganların kötü amaçlı tarayıcı uzantıları aracılığıyla ayrıcalıklı tarayıcı sayfalarına kötü amaçlı HTML veya JavaScript enjekte etmesine olanak tanır. NVD'ye (Ulusal Güvenlik Açığı Veritabanı) göre, bu güvenlik açığı 8.8 CVSS puanı ile yüksek önem derecesine sahiptir.
Bu güvenlik açığının yüksek önem derecesi, sistemlerin tehlikeye atılmasına, gizliliğin zarar görmesine ve kullanılabilirliğin azalmasına neden olabilecek uzaktan kod yürütülmesine olanak tanıma potansiyelinden kaynaklanmaktadır.
Chromium Güvenliğine Genel Bakış
CVE-2024-6778'in etkilerini daha iyi anlamak için Chromium'un güvenlik modelinin temel yönlerini bilmek önemlidir. Chromium, Google Chrome, Microsoft Edge, Opera ve Brave gibi tarayıcıların açık kaynaklı temelidir. Olası tehlikelerin kapsamını sınırlandırarak kararlılığı ve güvenliği artırmak için her sekmenin, aynı zamanda bir işleyici olarak da adlandırılan ve çeşitli tarayıcı bileşenlerinin izole edilmiş süreçlerde çalıştığı çok işlemli bir model kullanır.
Chromium'un güvenliğinin temel unsurlarından biri, renderer süreçlerinin sistem kaynaklarına doğrudan erişimini kısıtlayan sandboxing mekanizmasıdır. Bunun yerine, yalnızca yetkili işlemlerin gerçekleştirilmesini sağlamak için tüm etkileşimler IPC (İşlemler Arası İletişim) kanalları aracılığıyla yönetilir.
Chromium içindeki tüm bileşenler tam korumalı alana tabi değildir. chrome://settings ve chrome://downloads gibi WebUI sayfaları, renderer süreçleri içinde oluşturulur ancak kısmi sandbox kısıtlamalarıyla çalışır. Bu süreç onlara genellikle web üzerinden erişilemeyen tarayıcı API'lerine erişim sağlar.
Örneğin, chrome://policy sayfası, yöneticilerin ve kullanıcıların tarayıcı güvenlik politikalarını yapılandırmasına ve uygulamasına olanak tanıdığı için kurumsal ortamlarda hayati bir rol oynar. Bu politikalar Windows sistemlerinde Grup İlkesi aracılığıyla da yönetilir.
chrome://policy doğrudan işletim sistemiyle etkileşime girebildiğinden, saldırganlar için değerli bir hedeftir. Chrome DevTools içindeki bir yarış koşulundan yararlanan CVE-2024-6778 güvenlik açığı ile saldırganlar bu sayfalara kötü amaçlı kod enjekte ederek ciddi güvenlik riskleri oluşturabilir.
CVE-2024-6778'in Teknik Analizi
Keşif
Bu güvenlik açığı, Chrome Enterprise sürüm 117'de sunulan bir test özelliğinde keşfedilmiştir. Bu özellik chrome://policy/test sayfası aracılığıyla politika testine olanak sağlamaktadır. Bu özelliğe ilişkin resmi belgelerin sınırlı olması nedeniyle, arkadaşlarımız bu özelliğin uygulanmasını tam olarak anlamak ve ilgili güvenlik açıklarını tespit etmek için CVE yazarının görüşleriyle desteklenen Chromium kaynak kodunu kapsamlı bir şekilde inceledi.
Politika Yönetimi Bileşenleri
OPSWAT bursiyerlerinin kaynak kodu analizi sonucunda chrome://policy/testpolitikaları kullanılarak yönetilir. PolicyInfo
arayüzü aracılığıyla WebUI ve tarayıcı süreçleri arasında iletilir. PolicyTestBrowserProxy
Sınıf. Sınıf PolicyInfo
yapısı aşağıdaki gibi tanımlanır:
Bu poliçelerin işlenmesinden sorumlu sınıfın daha ayrıntılı incelenmesi sonucunda applyTestPolicies
. Bu yöntem özel bir API'den yararlanır, setLocalTestPolicies
, bir ilke listesini dinamik olarak uygulamak için.
Politika taleplerinin bu API aracılığıyla nasıl işlendiğine dair fikir edinmek için arkadaşlar HandleSetLocalTestPolicies
yöntemi içinde PolicyUIHandler
Sınıf:
Bu HandleSetLocalTestPolicies
yöntemi, sağlanan bağımsız değişkenlerden ilke verilerini alır ve LocalTestPolicyProvider
örneğini tarayıcının küresel ilke bağlayıcısı aracılığıyla tanımlar. Ardından, mevcut kullanıcı profiline bu sağlayıcıyı kullanması talimatını vermeden önce bu sağlayıcının varlığını doğrular.
Bu doğrulama, yalnızca aşağıdakileri sağladığı için yetersiz bulunmuştur local_test_provider
ilkeleri uygulamadan önce null değildir. İlkelerin oluşturulması ve başlatılması local_test_provider
tarafından kontrol edilir. CreateIfAllowed
yöntem:
İçinde CreateIfAllowed
metodu kullanıldığında, dönüş değeri tamamen IsPolicyTestingEnabled
fonksiyonu. Bu işlev, bir LocalTestPolicyProvider
örneği, kullanıcı tercihleri ve tarayıcının yayın kanalının bir kombinasyonuna dayalı olarak oluşturulur:
O zamandan beri pref_service
her seferinde sürekli olarak null olarak ayarlanır IsPolicyTestingEnabled()
çağrıldığında, ilk koşul atlanır ve etkinleştirme kararı yalnızca tarayıcının serbest bırakma kanalına bağlı kalır.
Markasız Chromium derlemelerinde, yayın kanalı varsayılan olarak Channel::UNKNOWN
. Fonksiyonun mantığına göre, Channel::UNKNOWN
ile aynı muameleyi görür. Kanal::DEFAULT
varsayılan olarak ilke testi özelliğini etkinleştirir. Kod akışı analizi, özel API'nin setLocalTestPolicies
herhangi bir anlamlı erişim kısıtlaması olmaksızın ilkeleri uygulamak için WebUI aracılığıyla çağrılabilir.
İstismar
Bir saldırgan bu özel API'yi tanımlayarak ve kullanarak WebUI aracılığıyla politikaları keyfi olarak uygulayabilir ve aşağıdaki gibi ayarların manipüle edilmesini sağlayabilir BrowserSwitcherEnabled
, BrowserSwitcherUrlList
, AlternativeBrowserPath
ve AlternativeBrowserParameters
komutları çalıştırmak için. Örneğin, ayarlayarak AlternativeBrowserPath
powershell'e ve AlternativeBrowserParameters
için ["calc"]
belirli bir URL ziyaret edildiğinde rastgele kabuk komutları çalıştırılabilir.
Özel API aracılığıyla Keyfi Kötü Amaçlı Kullanıcı İlkesi Uygulama
Özel ilkeler kullanılarak ilkelerin nasıl uygulanabileceğini göstermek için setLocalTestPolicies
API 'sini tanımlayan aşağıdaki JavaScript kodu, bir önceki analizde tanımlanan Dinozor Paskalya Yumurtasına İzin Ver
politikası aracılığıyla etkin bir şekilde uygular. WebUI
çağırarak setLocalTestPolicies
:
Politika, aşağıdakileri devre dışı bırakmak için başarıyla uygulanabilir Dinozor Paskalya Yumurtasına İzin Ver
ayar.
Daha büyük etki için, bir saldırgan BrowserSwitcher
Politika:
Bu ilke, URL'nin belirli koşullarla eşleşmesi durumunda tarayıcının alternatif bir tarayıcı yolunu çağırmasını sağlar. Bu yol, işletim sistemi komutlarını çalıştırmak için bir sistem yürütülebilir dosyasına işaret edecek şekilde yapılandırılarak istismar edilebilir. Aşağıdaki JavaScript kodu bu yaklaşımı göstermektedir:
Bu komut dosyası aşağıdaki görevleri yerine getirir:
- Etkinleştirir
BrowserSwitcher
example.com için özellik - Alternatif tarayıcı yolunu powerShell'e ayarlar
- Yürütür
calc
belirtilen URL'ye her erişildiğinde.
Kötü Amaçlı Chrome Uzantısı Simülasyonu
İlkelerin uygulanmasını sağlayan özel API 'nin tanımlanması, saldırganlar için önemli bir saldırı vektörü oluşturur. Bu güvenlik açığından etkili bir şekilde faydalanmak için bir saldırganın kötü amaçlı JavaScript kodu çalıştırmak üzere Chrome DevTools API 'sini kullanan kötü amaçlı bir Chrome uzantısı geliştirmesi gerekir.
Gerçek dünyadaki potansiyel etkiyi göstermek için arkadaşlarımız, kötü amaçlı bir Chrome uzantısının savunmasız bir tarayıcıya yüklendiği ve saldırıyı yürütmek için kullanıldığı bir senaryoyu simüle etti.Chrome Uzantıları'ndaki chrome.devtools API'leri, geliştiricilerin Chrome'un DevTools arayüzünü genişletmesine ve onunla etkileşime girmesine olanak tanır.
Ancak, DevTools API 'sini bir uzantı aracılığıyla çalıştırmak, aşılması gereken bazı zorluklar ortaya çıkarır. İlk olarak, DevTools API yalnızca DevTools açık olduğunda ve bir web sitesini aktif olarak incelediğinde çalışır. İkinci olarak, DevTools API web kullanıcı arayüzü WebUI üzerinde kod yürütülmesine izin vermez. Bu sınırlama, geliştirme ve denetim süreçleri sırasında WebUI'nin güvenliğini ve bütünlüğünü korumaya yardımcı olur
Yeniden yükleme APIsi aracılığıyla Javascript Yürütüldüğünü Gösteren İşaretler
Daha fazla analiz, chrome.devtools.inspectedWindow.reload işlevinin, bir uzantının denetlenen sayfada komut dosyası çalıştırmasına izin verilip verilmediğini doğrulamaktan yoksun olduğunu ortaya çıkardı. Tek savunma seviyesi, denetlenen sayfanın URL'si değiştiğinde erişimi engelleyen devtools uzantı sunucusudur.
About:blank sayfaları, kendilerini açan sayfanın izinlerini ve kaynağını devralır. Bu, WebUI sinyallerinden yönlendirildiğinde about:blank üzerinde kod çalıştırma yeteneğinin potansiyel bir güvenlik açığı olduğu anlamına gelir.
reload API aracılığıyla webUI üzerinde Kod Yürütme
Yarış koşulu chrome.devtools.inspectedWindow.reload()
Chrome'un genellikle korumalı olan WebUI sayfalarında (ör. chrome://policy) kod yürütülmesine izin verir. Açık, yeniden yükleme API'sinin sayfa geçişleri sırasında JavaScript enjekte etme özelliğinden yararlanıyor. İşte nasıl çalıştığı:
- WebUI'yi hedefleyin: Bir sekmede bir WebUI sayfası (örneğin, chrome://policy) açın ve DevTools'u ekleyin.
- Komut Dosyası Enjekte Etme: reload() API 'sini bir
injectedScript
parametresini kullanarak yeniden yükleme sırasında rastgele JavaScript çalıştırabilirsiniz. - Yarış Koşulundan Yararlanma: Yarış koşulu, WebUI'nin güvenlik mekanizmaları tam olarak başlatılmadan önce yeniden yükleme tetiklendiğinde ortaya çıkar ve enjekte edilen komut dosyasının yürütülmesine izin verir.
about:blank sayfasından chrome://policy sayfasına gitme bağlamında:
Sayfanın kaynağı yerine yalnızca URL doğrulandığından, gezinmeden sonra URL değişmeden kalırken kaynağın yeni sayfayı yansıttığı kısa bir süre vardır.
Eğer chrome.devtools.inspectedWindow.reload
bu pencere sırasında çağrılırsa, hedef sayfada istemeden JavaScript çalıştırabilir.
Yarış Koşulları için Güvenilirliğin Artırılması
Yarış koşulundan yararlanmak, zamanlamaya bağlı olması nedeniyle doğası gereği güvenilmezdir. Ayrıca, hızlı yeniden yüklemeler veya hatalı biçimlendirilmiş komut dosyaları sayfa çökmelerine neden olabilir. Güvenilirliği artırmak için yeni bir yaklaşım, DevTools aracılığıyla verilen komutlar genellikle bir çökme sırasında iptal edildiğinden, kasıtlı olarak bir sayfa çökmesine neden olmayı içerir, ancak Sayfa.yeniden yükle
ile eşleştirildi chrome.devtools.inspectedWindow.reload()
beyaz listeye alınır ve sayfa yeniden yüklendikten sonra yürütülür.
Aşağıda, sonraki komutları iterek bir sayfayı çökertmek için bir iş akışı modeli verilmiştir:
İçerik Kodundaki Hata Ayıklayıcı Deyimi Çökmeyi Tetikleyebilir
Hata ayıklayıcıyı art arda iki kez kullanmak, bir içerik komut dosyasındaki gezinme sürecini bozar. Aşağıdakileri yerleştirerek bir çökmeye yol açabilir navigation_commit_state_
beklenmedik bir duruma dönüşür. Bu sorun şu durumlarda ortaya çıkar RenderFrameImpl::SynchronouslyCommitAboutBlankForBug778318
yürütülür, altering _navigation_commit_state
beklenmedik bir değere.
İlk çağrı yürütmeyi duraklatır ve navigation_commit_state_
tutarsız bir durumda ve ikinci duraklama sırasında CHECK_EQ
kontrolü, durum doğrulamasında başarısız oluyor ve çökmeye neden oluyor.
İyileştirme
Tarayıcı sürümünüzü düzenli olarak güncellemeyi ihmal etmek, cihazınızı özellikle CVE'lere (Ortak Güvenlik Açıkları ve Maruziyetler) bağlı olanlar olmak üzere ciddi güvenlik tehditlerine maruz bırakabilir. Bu riski azaltmaya yardımcı olmak için MetaDefender Endpoint™, tarayıcı sürümünüzü algılayarak ve CVE-2024-6778 gibi bilinen CVE'ler de dahil olmak üzere güvenlik açıklarını kontrol ederek güçlü koruma sağlar.
MetaDefender Endpoint , uygulamanızın güncel olmasını sağlar ve eski veya virüslü sürümleri işaretler. Ayrıca, CVE önem derecesine göre kategorize edilmiş bilinen güvenlik açıklarına sahip yüklü uygulamaları listeler ve olası tehditleri etkili bir şekilde azaltmak için düzeltmeler önerir. MetaDefender Endpoint 'in bu riskleri azaltmanıza nasıl yardımcı olabileceğine dair canlı bir demo görmek için bugün uzmanlarımızdan biriyle iletişime geçin.