hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md
2024-02-10 18:14:16 +00:00

11 KiB
Raw Blame History

BrowExt - izinler ve host_permissions

AWS hackleme becerilerini sıfırdan ileri seviyeye öğrenmek için htARTE (HackTricks AWS Kırmızı Takım Uzmanı)'a katılın!

HackTricks'i desteklemenin diğer yolları:

Temel Bilgiler

permissions

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

Önceki manifest, uzantının storage iznini gerektirdiğini belirtir. Bu, uzantının verilerini kalıcı olarak depolamak için depola API'sini kullanabileceği anlamına gelir. Kullanıcılara bazı düzeyde kontrol sağlayan çerezler veya localStorage API'lerinin aksine, uzantı depolaması genellikle yalnızca uzantıyı kaldırarak temizlenebilir.

Bir uzantı, manifest.json dosyasında belirtilen izinleri isteyecek ve uzantıyı yükledikten sonra tarayıcınızda izinlerini her zaman kontrol edebilirsiniz, aşağıdaki resimde gösterildiği gibi:

Bir Chromium Tarayıcı Uzantısı'nın isteyebileceği tam izin listesini burada bulabilirsiniz ve Firefox uzantıları için tam bir liste burada bulunabilir.

host_permissions

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

Aşağıdaki host_permissions temel olarak her web sitesine 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 ana bilgisayarları içerir. Bunun nedeni, bir tarayıcı uzantısı fetch("https://gmail.com/") çağrısı yaptığında CORS tarafından kısıtlanmamasıdır.

permissions ve host_permissions Kötüye Kullanma

Sekmeler

Ayrıca, host_permissions "gelişmiş" sekme API işlevselliğini de açar. Uzantı, tabs.query() çağrısı yapabilir ve sadece kullanıcının tarayıcı sekmelerinin bir listesini almakla kalmaz, aynı zamanda yüklenen web sayfasının (adres ve başlık anlamında) hangisi olduğunu da öğrenebilir.

{% hint style="danger" %} Bununla birlikte, tabs.onUpdated gibi dinleyiciler de daha kullanışlı hale gelir. Bunlar, yeni bir sayfa bir sekmeye yüklendiğinde bildirim alır. {% endhint %}

İçerik betiklerini çalıştırma

İçerik betikleri, uzantı manifestosuna statik olarak yazılmış olmak zorunda değildir. Yeterli host_permissions sağlandığında, uzantılar tabs.executeScript() veya scripting.executeScript() çağrısı yaparak bunları dinamik olarak yükleyebilir.

Her iki API de, içerik betikleri olarak uzantıda bulunan dosyaları değil, aynı zamanda keyfi kodu da yürütmeye izin verir. İlki, bir JavaScript kodunu bir dize olarak iletmeyi sağlarken, ikincisi enjeksiyon güvenlik açıklarına daha az duyarlı olan bir JavaScript işlevi bekler. Bununla birlikte, her iki API de yanlış kullanıldığında sorunlara neden olabilir.

{% hint style="danger" %} Yukarıdaki yeteneklere ek olarak, içerik betikleri örneğin, web sayfalarına girilen kimlik bilgilerini ele geçirebilir. Her bir web sitesine reklam enjekte edebilir. Haber sitelerinin güvenilirliğini kötüye kullanmak için dolandırıcılık mesajları ekleyebilir. Son olarak, bankacılık web sitelerini para transferlerini yeniden yönlendirmek için manipüle edebilir. {% endhint %}

İzinlerin İma Edilen Yetkileri

Bazı uzantı yetkileri ıkça bildirilmek zorunda değildir. Bir örnek, sekme API'sidir: temel işlevselliği herhangi bir yetkiye ihtiyaç duymadan erişilebilir. Herhangi bir uzantı, açılan ve kapatılan sekmeleri bildirebilir, yalnızca bu sekmelerin hangi web sitesine karşılık geldiğini bilemez.

Çok zararsız gibi görünüyor mu? tabs.create() API'si biraz daha az zararlıdır. Herhangi bir web sitesi tarafından çağrılabilen window.open() ile aynıdır. Ancak window.open() pop-up engelleyiciye tabi iken, tabs.create() değildir.

{% hint style="danger" %} Bir uzantı istediği zaman herhangi bir sayıda sekme oluşturabilir. {% endhint %}

tabs.create() parametrelerini inceleyecek olursanız, yeteneklerinin window.open()'in kontrol etmesine izin verilenin ötesine gittiğini fark edeceksiniz. Firefox, bu API ile data: URI'lerinin kullanılmasına izin vermezken, Chrome böyle bir korumaya sahip değildir. Bu tür URI'lerin üst düzeyde kullanımı, dolandırıcılık için kötüye kullanıldığı için yasaklanmıştır.

tabs.update(), tabs.create()'e çok benzer, ancak mevcut bir sekmeyi değiştirir. Bu nedenle, kötü niyetli bir uzantı örneğin reklam sayfasını keyfi olarak bir sekmenize yükleyebilir ve ilgili sekmeyi etkinleştirebilir.

Web kamerası, coğrafi konum ve diğerleri

Muhtemelen web sitelerinin özel izinler isteyebileceğini biliyorsunuzdur, örneğin web kamerasına (video konferans araçları) veya coğrafi konuma (haritalar) erişmek için. Bu, kötüye kullanım potansiyeli yüksek özelliklerdir, bu nedenle kullanıcılar her seferinde bunu onaylamak zorundadır.

{% hint style="danger" %} Ancak tarayıcı uzantıları için durum böyle değildir. Bir tarayıcı uzantısı web kamerasına veya mikrofona erişmek istediğinde, sadece bir kez izin istemesi yeterlidir {% endhint %}

Genellikle, bir uzantı bunu yüklenir yüklenmez yapar. Bu onay kabul edildikten sonra, web kamerasına her zaman erişim mümkündür, hatta kullanıcı bu noktada uzantıyla etkileşimde bulunmuyorsa bile. Evet, bir kullanıcı uzantının gerçekten web kamerasına ihtiyaç duyduğunu düşünerek bu onayı kabul eder. Ancak bundan sonra uzantının gizlice bir şey kaydetmemesine güvenmek zorundadır.

Tam coğrafi konumunuz veya panonuzun içeriği gibi özelliklere erişim için açıkça izin vermek gerekmez. Bir uzantı, manifestosunun izinler girişine geolocation veya clipboard ekler. Bu erişim izinleri, uzantı yüklendiğinde otomatik olarak verilir. Bu nedenle, bu yetkilere sahip kötü niyetli veya tehlikeli bir uzantı, hareket profilinizi oluşturabilir veya kopyalanan parolalarınızı fark etmeden panonuzu izleyebilir.

history anahtarını uzantı manifestosunun izinler girişine eklemek, tüm tarayıcı geçmişini beklemek zorunda kalmadan kullanıcının tüm gezinme geçmişini almayı sağlar.

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

Dep

Referanslar

AWS hacklemeyi sıfırdan kahraman olmak için htARTE (HackTricks AWS Kırmızı Takım Uzmanı) öğrenin!

HackTricks'ı desteklemenin diğer yolları: