BrowExt - izinler & host_permissions
Reading time: 8 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Temel Bilgiler
permissions
İ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 (Çerezler veya Fiziksel Depolama) erişim sağlar:
Ö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ızda 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 ana bilgisayarlardır. 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
istismar etme
Sekmeler
Ayrıca, host_permissions
“gelişmiş” tabs API 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.
caution
Bununla kalmaz, tabs.onUpdated gibi dinleyiciler de çok daha kullanışlı hale gelir. Bu dinleyiciler, yeni bir sayfa bir sekmeye 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ını yaparak.
Her iki API de yalnızca uzantılarda içerik betiği olarak bulunan dosyaları değil, aynı zamanda rastgele kodu da çalıştırmaya olanak tanır. İ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.
caution
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, tabs API: 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 siteleriyle ilişkili olduğunu bilmeyecektir.
Görünüşte zararsız mı? tabs.create() API biraz daha az zararsızdır. Bu, yeni bir sekme oluşturmak için kullanılabilir, temelde window.open() ile aynı işlevi görür ve herhangi bir web sitesi tarafından çağrılabilir. Ancak window.open()
açılır pencere engelleyicisine tabi iken, tabs.create()
değildir.
caution
Bir uzantı istediği zaman herhangi bir sayıda 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 fark edeceksiniz. 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.
Web kamerası, coğrafi konum ve arkadaşlar
Web sitelerinin özel izinler talep edebileceğini muhtemelen biliyorsunuzdur, ö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.
caution
Tarayıcı uzantıları için durum böyle değildir. Eğer bir tarayıcı uzantısı web kameranıza veya mikrofonunuza erişim istiyorsa, yalnızca bir kez izin istemesi gerekir.
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 kaydetmemesi için ona güvenmeleri gerekir.
Tam coğrafi konumunuza veya panonuzun içeriğine erişim sağlamak için açıkça izin 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. Böylece, 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
'ye 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 bookmarks API aracılığıyla okumaya olanak tanır.
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 de bu depolamayı kötüye kullanabilir.
Daha fazla izin
Bir Chromium Tarayıcı Uzantısının talep edebileceği tam izinler 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 ve böylece 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 ana bilgisayar 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 böylece kullanım kolaylığını ve anında yanıt verme yeteneğini tehlikeye atar.
Referanslar
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.