BrowExt - permissions & host_permissions

HackTricks'i Destekleyin

Temel Bilgiler

izinler

İzinler, uzantının manifest.json dosyasında permissions özelliği kullanılarak tanımlanır ve bir tarayıcının erişebileceği hemen her şeye erişim sağlar (Çerezler veya Fiziksel Depolama):

Önceki manifest, uzantının storage iznine ihtiyaç duyduğunu belirtir. Bu, verilerini kalıcı olarak depolamak için depolama API'sini kullanabileceği anlamına gelir. Kullanıcılara belirli bir kontrol seviyesi veren çerezler veya localStorage API'lerinin aksine, uzantı depolaması genellikle yalnızca uzantıyı kaldırarak temizlenebilir.

Bir uzantı, manifest.json dosyasında belirtilen izinleri talep edecektir ve uzantıyı yükledikten sonra, her zaman tarayıcınızdaki izinlerini kontrol edebilirsiniz, bu resimde gösterildiği gibi:

Bir Chromium Tarayıcı Uzantısının talep edebileceği tam izin listesine buradan ulaşabilirsiniz ve Firefox uzantıları için tam listeye buradan ulaşabilirsiniz.

host_permissions

İsteğe bağlı ancak güçlü bir ayar olan host_permissions, uzantının cookies, webRequest ve tabs gibi API'ler aracılığıyla hangi ana bilgisayarlarla etkileşimde bulunabileceğini belirtir.

Aşağıdaki host_permissions temelde her web'e izin verir:

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

Bu, tarayıcı uzantısının serbestçe erişebileceği hostlardır. Bunun nedeni, bir tarayıcı uzantısı fetch("https://gmail.com/") çağrısı yaptığında CORS tarafından kısıtlanmamış olmasıdır.

permissions ve host_permissions istismar etme

Sekmeler

Ayrıca, host_permissions “gelişmiş” sekme API'si işlevselliğini de açar. Uzantının tabs.query() çağrısını yapmasına ve yalnızca kullanıcının tarayıcı sekmelerinin listesini almakla kalmayıp aynı zamanda hangi web sayfasının (adres ve başlık anlamında) yüklü olduğunu öğrenmesine olanak tanır.

Bununla kalmaz, tabs.onUpdated gibi dinleyiciler de çok daha kullanışlı hale gelir. Bu dinleyiciler, bir sekmeye yeni bir sayfa yüklendiğinde bildirim alır.

İçerik betiklerini çalıştırma

İçerik betikleri, uzantı manifestosuna statik olarak yazılmak zorunda değildir. Yeterli host_permissions verildiğinde, uzantılar bunları dinamik olarak yükleyebilir tabs.executeScript() veya scripting.executeScript() çağrısı yaparak.

Her iki API de yalnızca uzantılarda bulunan dosyaları içerik betikleri olarak çalıştırmakla kalmaz, aynı zamanda rastgele kod da çalıştırabilir. İlki, JavaScript kodunu bir dize olarak geçmeye izin verirken, ikincisi, enjeksiyon güvenlik açıklarına daha az eğilimli olan bir JavaScript fonksiyonu bekler. Yine de, her iki API de kötüye kullanıldığında büyük zararlara yol açabilir.

Yukarıdaki yeteneklere ek olarak, içerik betikleri örneğin kimlik bilgilerini web sayfalarına girildiğinde yakalayabilir. Onları kötüye kullanmanın bir başka klasik yolu, her bir web sitesine reklam enjekte etmektir. Haber sitelerinin güvenilirliğini kötüye kullanmak için dolandırıcılık mesajları eklemek de mümkündür. Son olarak, banka web sitelerini para transferlerini yönlendirmek için manipüle edebilirler.

Dolaylı ayrıcalıklar

Bazı uzantı ayrıcalıkları açıkça beyan edilmek zorunda değildir. Bir örnek, sekme API'si: temel işlevselliği herhangi bir ayrıcalık olmaksızın erişilebilir. Herhangi bir uzantı, sekmeleri açtığınızda ve kapattığınızda bildirim alabilir, yalnızca bu sekmelerin hangi web sitesine karşılık geldiğini bilmeyecektir.

Bu çok zararsız mı geliyor? tabs.create() API'si biraz daha az zararsızdır. Bu, yeni bir sekme oluşturmak için kullanılabilir, temelde window.open() ile aynı olup, herhangi bir web sitesi tarafından çağrılabilir. Ancak window.open() pop-up engelleyiciye tabi iken, tabs.create() değildir.

Bir uzantı istediği kadar sekme oluşturabilir.

Olası tabs.create() parametrelerine göz attığınızda, yeteneklerinin window.open()'un kontrol edebileceğinden çok daha öteye gittiğini de göreceksiniz. Ve Firefox, bu API ile data: URI'lerinin kullanılmasına izin vermezken, Chrome'un böyle bir koruması yoktur. Bu tür URI'lerin üst düzeyde kullanımı, oltalama için kötüye kullanıldığı gerekçesiyle yasaklanmıştır.

tabs.update() tabs.create() ile çok benzer, ancak mevcut bir sekmeyi değiştirir. Yani, kötü niyetli bir uzantı örneğin rastgele bir reklam sayfasını sekmelerinizden birine yükleyebilir ve ilgili sekmeyi de etkinleştirebilir.

Webcam, coğrafi konum ve arkadaşlar

Web sitelerinin özel izinler talep edebileceğini muhtemelen biliyorsunuz, örneğin, web kameranızı (video konferans araçları) veya coğrafi konumunuzu (haritalar) erişmek için. Bu, kötüye kullanma potansiyeli olan özelliklerdir, bu nedenle kullanıcıların her seferinde bunu hala istediklerini onaylamaları gerekir.

Tarayıcı uzantıları için durum böyle değil. Eğer bir tarayıcı uzantısı web kameranıza veya mikrofonunuza erişim istiyorsa, yalnızca bir kez izin istemesi yeterlidir.

Tipik olarak, bir uzantı bunu kurulduktan hemen sonra yapar. Bu istem kabul edildiğinde, web kamera erişimi her zaman mümkündür, kullanıcı bu noktada uzantıyla etkileşimde bulunmasa bile. Evet, bir kullanıcı yalnızca uzantının gerçekten web kamera erişimine ihtiyacı varsa bu istemi kabul eder. Ancak bundan sonra, uzantının gizlice hiçbir şey kaydetmeyeceğine güvenmeleri gerekir.

Tam coğrafi konumunuza veya panonuzun içeriğine erişim izni vermek tamamen gereksizdir. Bir uzantı, manifestosunun izinler girişine geolocation veya clipboard ekler. Bu erişim ayrıcalıkları, uzantı yüklendiğinde dolaylı olarak verilir. Bu nedenle, bu ayrıcalıklara sahip kötü niyetli veya tehlikeye atılmış bir uzantı, hareket profilinizi oluşturabilir veya kopyalanan şifreler için panonuzu izleyebilir, siz hiçbir şey fark etmeden.

history anahtar kelimesinin uzantı manifestosunun izinler girişine eklenmesi, history API'sine erişim sağlar. Bu, kullanıcının tüm tarayıcı geçmişini bir seferde almasına olanak tanır, kullanıcının bu web sitelerini tekrar ziyaret etmesini beklemeden.

bookmarks izinleri benzer kötüye kullanma potansiyeline sahiptir, bu, tüm yer imlerini yer imleri API'si aracılığıyla okumaya izin verir.

Depolama izni

Uzantı depolaması, herhangi bir web sitesinin kullanabileceği localStorage ile çok benzer bir anahtar-değer koleksiyonudur. Bu nedenle, burada hassas bilgiler saklanmamalıdır.

Ancak, reklam şirketleri bu depolamayı da kötüye kullanabilir.

Daha fazla izin

Bir Chromium Tarayıcı Uzantısının talep edebileceği izinlerin tam listesini burada bulabilirsiniz ve Firefox uzantıları için tam listeyi burada bulabilirsiniz.

Önleme

Google'ın geliştirici politikası, uzantıların işlevselliği için gerekli olandan daha fazla ayrıcalık talep etmesini açıkça yasaklar, bu da aşırı izin taleplerini etkili bir şekilde azaltır. Bir tarayıcı uzantısının bu sınırı aştığı bir örnek, uzantının bir eklenti mağazası yerine tarayıcı ile birlikte dağıtılmasıdır.

Tarayıcılar, uzantı ayrıcalıklarının kötüye kullanılmasını daha da sınırlayabilir. Örneğin, ekran kaydı için kullanılan Chrome'un tabCapture ve desktopCapture API'leri, kötüye kullanımı en aza indirmek için tasarlanmıştır. tabCapture API'si yalnızca uzantı simgesine tıklamak gibi doğrudan kullanıcı etkileşimi ile etkinleştirilebilirken, desktopCapture, kaydedilecek pencere için kullanıcı onayı gerektirir ve gizli kayıt faaliyetlerini önler.

Ancak, güvenlik önlemlerinin sıkılaştırılması genellikle uzantıların esnekliğini ve kullanıcı dostluğunu azaltır. activeTab izni bu dengeyi göstermektedir. Bu, uzantıların tüm internet üzerinde host ayrıcalıkları talep etme gereğini ortadan kaldırmak için tanıtılmıştır ve uzantıların yalnızca kullanıcı tarafından açıkça etkinleştirildiğinde mevcut sekmeye erişmesine izin verir. Bu model, kullanıcı tarafından başlatılan eylemler gerektiren uzantılar için etkili olsa da, otomatik veya önleyici eylemler gerektirenler için yetersiz kalır ve bu da kullanım kolaylığını ve anlık yanıt verme yeteneğini tehlikeye atar.

Kaynaklar

HackTricks'i Destekleyin

Last updated