- Chrome'un MV3 güncellemesi, mevcut reklam engelleyicilerin işlevini zayıflatmak için
webRequestBlockingiznini kaldırıyor - Yazar, MV3 ortamında da
webRequestBlocking'i aşmaya imkân veren bir hatayı 2023'te keşfetti - Bu hata, JavaScript binding'lerinin gevşek yapısı ve eski kodun olduğu gibi kalmış olması nedeniyle ortaya çıktı
- WebView instance ID'sini manipüle ederek izin kontrolü aşılabildiği için MV3 ortamında da engelleme işlevi kullanılabiliyordu
- Şu anda yama uygulanmış durumda ve bu aşma yöntemi artık çalışmıyor
MV3 ve reklam engelleyicilerdeki değişim
- Chrome, MV2 eklentilerini kademeli olarak kaldırıyor ve bunun yerine MV3'e geçiş yapıyor
- MV3,
webRequestBlockingiznini kaldırarak reklam engelleyicilerin ağ isteklerini script ile dinamik biçimde engellemesini önlüyor - Bu iznin yerine
declarativeNetRequestAPI'si eklendi, ancak aynı düzeyde esneklik sunmuyor - Bu değişim nedeniyle reklam engelleyicilerin performansında büyük bir düşüş yaşanıyor
JavaScript binding yapısının sınırları
- Chrome'un çekirdeği C++ ile geliştirilse de eklentiler JavaScript ile çalışır ve genişletme API'lerine de JS binding'leri üzerinden erişilir
- 2015~2016'ya kadar API'ler, siteye JS dosyaları (eklenti binding modülleri) enjekte edilerek başlatılıyor ve doğrulanıyordu
- Bu yöntem, JS global fonksiyonları ve prototype override'larına karşı savunmasız olduğu için birden fazla Universal XSS açığına yol açtı
- Sonrasında Google, ana binding'lerin çoğunu C++ tarafına taşıdı, ancak bazı JS binding dosyaları hâlâ duruyor
- Bugün bile
chrome.webRequestgibi bazı API'ler JS binding mimarisini kullanıyor
Web request event sınıfını kullanarak aşma
-
MV2'de web request engelleme aşağıdaki kodla uygulanabiliyordu
chrome.webRequest.onBeforeRequest.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking']) -
MV3'te
blockingseçeneği yasaklandığı için normal yoldan engelleme mümkün değil -
Ancak webRequest event'inin
.constructorözelliği üzerinden keyfi event nesneleri oluşturulabiliyor -
Dahili olarak, JS binding'lerindeki özel wrapper sınıfı bu event nesnelerini yönetiyor
-
Constructor parametrelerinden biri olan
opt_webViewInstanceIdverildiğinde, platform uygulamalarına özel izin mantığı aşılabiliyor ve böylece blocking izni kontrolü atlatılabiliyordulet WebRequestEvent = chrome.webRequest.onBeforeRequest.constructor let fakeEvent = new WebRequestEvent("webRequest.onBeforeRequest", 0, 0, 0, 1337) fakeEvent.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking']) -
Aslında yalnızca platform uygulamaları için tasarlanmıştı, ancak WebView ID doğrulaması yetersiz olduğu için sıradan eklentiler tarafından kötüye kullanılabiliyordu
Sonuç ve güvenlik yaması
- Bu açık sayesinde MV3 ortamında da tam işlevli bir reklam engelleyici geliştirmek gerçekten mümkündü
- Yazar, ilgili hatayı 2023'te Google'a bildirdi ve açık Chrome 118'de WebView izninin gerçekten o uzantıya ait olup olmadığını doğru şekilde kontrol ederek yamandı
- Herhangi bir ödül verilmedi; bunun nedeni, ek veri ifşası olmadan yalnızca izin aşımına imkân tanıyan yapısal özellikti
- Bu örnek, birkaç onlarca satırlık kod değişikliğinin büyük bir şirketin güvenlik güncellemesini etkisiz hâle getirebileceğini gösteriyor
Sonuç ve referans
- Hata şu anda yamalanmış durumda ve artık çalışmıyor
- Benzer şekilde ilginç bir Chrome eklentisi güvenlik açığı örneği olarak, gerçekten CVE numarası ve 10.000 $ ödül alan bir vaka da mevcut (ayrı blog yazısına bakın)
4 yorum
Muhtemelen o güncellemeden sonra reklam engelleyici şirketlerin gelirleri daha da arttı.
Ağı doğrudan ağ katmanında engelleyen bağımsız uygulamalar ise yalnızca ücretli kullanılabildiği için epey satmış olmalı.
2 yıl geçmiş ve artık hiçbir anlamı kalmamış bir açığı paylaşırken bir de özellikle para almadığını söylemesi... Bana pek cool gelmedi açıkçası
Ama herhalde insan ancak böyle şeyleri bloga yazarak kendi değerini kanıtlayabiliyor, değil mi?
Ben de samimiyetle bu zihniyeti öğrenip bloga bol bol yazı yazmak isterdim
Sadece Firefox kullanın. Son 1-2 yılda epey hızlandı, artık hiç de fena değil.
Ben yıllardır ana tarayıcı olarak Firefox kullanıyorum ve ara sıra Chrome ile karşılaştırıyorum; özellikle son dönemde Firefox’un fazlasıyla kullanılabilir olduğunu düşünüyorum.
Kore’deki bankalar gibi web standartlarını göz ardı eden web sayfaları da son zamanlarda büyük ölçüde düzeltildi, bu yüzden artık çoğu Firefox’ta da iyi çalışıyor.
Özelleştirme tarafı da Firefox’ta çok daha kolay.
Hacker News görüşleri
Firefox'u denemek istememe rağmen, ara sıra yaşanan web sitesi yükleme hataları ve PWA'leri (Progressive Web Apps) kuramamak en büyük engel. Chrome ve türevi tarayıcılar bu özelliği uzun zamandır destekliyor; Firefox'un bunu hâlâ neden hayata geçirmediğini bilmiyorum. Üçüncü taraf bir eklenti (PWAs for Firefox) buldum ama gizlilik açısından kullanmaya çekiniyorum
Google'ın davranışını aşmanın bir yolu olsa bile bunun doğru yön olduğunu düşünmüyorum. İnsanlar Google'ın yaptıklarına katılmıyorsa, yapılacak tek doğru şey Chrome'u ve Chromium tabanlı tüm tarayıcıları bırakmaktır. Google'ın tekeline darbe vurup web'in gelecekteki yönü üzerindeki hakimiyetini elinden almak önemli
Gerçek çözüm Firefox kullanmak. uBlock Origin en iyi Firefox'ta çalışıyor
uBlock Origin works best on Firefox
Google'ın MV3'ün gerçekten MV2'den daha güvenli olup olmadığı da şüpheli. MV3'e geçmenin özünde güvenliği artırdığını sanmıyorum
Birinin adblocker geçici çözümünü bulup Google'a bildirmesi hakkında, “Bulup hemen Google'a ispiyonluyor, harika” diye tepki verenler var
OP, Google'a aslında sorun olmayan bir “issue” bildirerek eklenti geliştiricilerinin MV3 kısıtlarını aşma yolunu kapattı. Umarım değeri $0 değildir
Brave kullanmaya başladıktan sonra Chrome'u hiç aramıyorum
Brave
Stop using Brave browser
“adblocker'ların webRequestBlocking'e mutlaka ihtiyacı var, Google reklamdan para kazandığı için bu özelliği kaldırması son derece kasıtlı” iddiasına karşı, “Bu doğru değil; herkes Chrome ve manifest v3 üzerinde uBlock Origin Lite kullanabilir, performansı iyi ve eski uBlock Origin'den farkını hissetmiyorum. Her şey C++ içinde filtrelendiği için çok daha hızlı. Elbette kural üst sınırı var ama şu anda gayet yönetilebilir düzeyde” diyenler de var
İş dizüstü bilgisayarım dışında Chrome kullanmıyorum; günlük hayatta Firefox kullanmaya devam ediyorum. Yine de iş için web'de gezinirken (araştırma, belgeler vb.) çok yardımcı olan uBlock Origin'i artık kullanamamak üzücü
Sadece bir geçici çözüm istiyorsanız Firefox kurmanız yeterli