11 KiB
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ı:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github reposuna PR göndererek paylaşın.
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 açı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
- https://palant.info/2022/08/17/extension-izinlerinin-etkisi/
- https://www.cobalt.io/blog/chrome-tarayici-uzantisi-guvenlik-testine-giris
AWS hacklemeyi sıfırdan kahraman olmak için htARTE (HackTricks AWS Kırmızı Takım Uzmanı) öğrenin!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'ı takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.