chrome-ext-permissions — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited chrome-ext-permissions (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The principle of least privilege governs all permission decisions. Request only what the extension actively uses today — never future-proof permissions. Approximately 70% of submitted extensions over-request permissions. Over-permissioning triggers CWS rejections, alarming install warnings, and longer review cycles.
| Need | Use | Why |
|---|---|---|
| Temporary access after user click | activeTab | No install warning, minimal scope |
| Read URL/title of tabs without host access | tabs | Required for tab.url, tab.title, tab.favIconUrl |
| Persistent access to specific sites | host_permissions: ["https://example.com/*"] | Narrow host pattern |
| Access to all sites | host_permissions: ["<all_urls>"] | Last resort — triggers 3x rejection rate |
activeTab grants temporary access to the currently focused tab only after the user explicitly invokes the extension. It requires no install warning. Always prefer it over broad alternatives.
| Misconception | Reality |
|---|---|
"Need tabs to use chrome.tabs API" | Most chrome.tabs methods work without the permission |
"Need storage for localStorage" | storage is only for chrome.storage API, not web storage |
"Need cookies for document.cookie" | cookies permission is only for chrome.cookies API |
"Need <all_urls> to work on any site" | activeTab + user action covers most use cases |
Move non-core features to optional permissions. Request at runtime when the feature is activated:
// Request permission when user enables a feature
async function enableAdvancedFeature() {
const granted = await chrome.permissions.request({
permissions: ['bookmarks'],
origins: ['https://api.example.com/*'],
});
if (granted) {
// Permission granted — enable feature
} else {
// Permission denied — show explanation
}
}Benefits:
Declare in host_permissions array (MV3), not in permissions:
{
"host_permissions": [
"https://api.example.com/*",
"https://cdn.example.com/*"
]
}Rules:
https:// over *://<all_urls> unless absolutely requiredoptional_host_permissionsBefore every CWS submission:
chrome.* API call — verify each has a matching permission.crx build to verify exact install warning dialogs| Code | Name | Trigger |
|---|---|---|
| Purple Potassium | Excessive Permissions | Unused or overly broad permissions |
| Purple Lithium | User Data Privacy | Missing privacy policy, insecure data handling |
| Purple Copper | Data Transmission | Sensitive data via HTTP or in URL params |
Warning: Adding permissions that trigger install warnings will temporarily disable the extension for existing users until they accept the new terms.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.