
crx-gate 发布:可在 2ms 内审计 Chrome 扩展并预测 Chrome 应用商店驳回
来源标题:Crx-gate – Audit Chrome extensions and predict CWS rejections in 2ms
静态安全分析工具 crx-gate 可对 Chrome 扩展进行权限与安全检查,在 3ms 内扫描未打包目录、.zip 或 .crx 文件并给出 0–100 的风险评分,帮助在提交审核前发现可能导致 Chrome 应用商店驳回的问题。该工具支持通过 npx 直接运行,也可用 Cargo 安装,并提供 pre-commit hook 集成。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
面向 Chrome 扩展的静态安全分析器和权限检查工具。可在 3ms 内静态检查未打包的扩展目录、.zip 包或 .crx 二进制文件。
浏览器扩展拥有对用户会话 cookie、DOM 状态、浏览历史和网络请求的特权访问。标准 Web SAST 工具(如 ESLint 或 Semgrep)检查通用 JavaScript 语法,但对 Chrome 扩展的攻击面视而不见:
crx-gate 在代码审查或提交落地之前本地运行,生成确定性的影响范围评分(0–100),并在人工审查前拦截会导致提交被拒的问题。
通过 npx(无需安装)
审计扩展目录
npx crx-gate audit ./dist
比较不同版本之间的影响范围
npx crx-gate diff ./v1.0.0 ./v1.1.0
通过 Cargo cargo install crx-gate
Pre-commit 钩子 将 crx-gate 添加到仓库的 .pre-commit-config.yaml: repos:
- repo: https://github.com/jaw0r3k/crx-gate rev: v0.2.0 hooks:
- id: crx-gate
或直接安装到 .git/hooks/pre-commit: crx-gate hook install --ext-dir ./src
用法 crx-gate [OPTIONS] [PATH] [COMMAND]
Commands: audit 审计扩展目录、.zip 或 .crx 归档 diff 比较两个扩展版本之间的影响范围和安全态势 rules 列出所有内置安全规则和 Chrome Web Store 拒绝启发式规则 init 在当前仓库初始化 crx-gate 配置 hook 安装 git pre-commit 钩子 completions 生成 shell 自动补全脚本(bash、zsh、fish、powershell)
审计扩展
终端表格输出
crx-gate audit ./my-extension
独立的交互式 HTML 报告
crx-gate audit ./my-extension --format html --output report.html
用于 GitHub Code Scanning 的 SARIF 报告
crx-gate audit ./my-extension --format sarif --output crx-gate.sarif
机器可读的 JSON 输出
crx-gate audit ./my-extension --format json
如果发现高危或严重问题,或评分超过 60,则构建失败
crx-gate audit ./my-extension --fail-on high --max-score 60
比较两个版本 在 pull request 中捕获权限蔓延、新的污点流或风险退化: crx-gate diff ./v1.0.0 ./v1.1.0 --fail-on-degradation
Base: v1.0.0 Target: v1.1.0 Score: 10 (Grade: A) -> 94 (Grade: F) | Delta: +84 (DEGRADATION / INCREASED RISK)
Added Permissions:
- tabs
- cookies
Expanded Host Scopes:
- <all_urls>
1 New Data Exfiltration Path Introduced:
- chrome.cookies.getAll -> fetch
Shell 自动补全 为你的 shell 生成补全脚本:
Bash
crx-gate completions bash > ~/.local/share/bash-completion/completions/crx-gate
Zsh
crx-gate completions zsh > ~/.zfunc/_crx-gate
Fish
crx-gate completions fish > ~/.config/fish/completions/crx-gate.fish
配置(crx-gate.toml) 使用 crx-gate init 初始化配置文件: [audit]
如果发现达到此严重级别的问题则以代码 1 退出:none、low、medium、high、critical
fail_on = "high"
允许的最大影响范围评分(0 - 100)
max_score = 60
对于具有动态运行时绑定的框架,忽略未使用的权限
ignore_dead_permissions = false
ignore_paths = [ "/*.min.js.map", "/node_modules/**"
[rules] disabled_rules = [] custom_exfiltration_endpoints = []
带原因和过期时间的书面例外
[[waivers]] rule_id = "CWS-004" path = "manifest.json" reason = "Enterprise proxy enforcement extension requires <all_urls>" expires = "2027-01-01"
GitHub Actions 在 CI 工作流中运行 crx-gate,并将发现直接上传到 GitHub Security -> Code Scanning 标签页: name: Extension Security Audit on: pull_request: branches: [ "main" ]
jobs: audit: runs-on: ubuntu-latest steps:
-
uses: actions/checkout@v4
-
name: Run crx-gate uses: jaw0r3k/crx-gate@v1 with: path: './dist' fail-on: 'high' max-score: '60' sarif: 'crx-gate.sarif'
-
name: Upload SARIF to GitHub Code Scanning uses: github/codeql-action/upload-sarif@v3 if: always() with: sarif_file: 'crx-gate.sarif'
内置规则 Rule ID Severity Category Description CWS-001 Critical CWS Policy 远程托管代码执行(<script src="https://...">) CWS-002 Critical CWS Policy 动态代码执行(eval()、Function()、字符串 setTimeout) CWS-003 Critical Packaging Manifest 引用了不存在的文件(图标、弹窗、脚本) CWS-004 High Host Scope 过度的通配符主机权限(<all_urls>、:///) CWS-005 Critical Deprecation 使用已弃用的 Manifest V2 CWS-006 High CSP Violation HTML 中的内联脚本或内联事件处理器(onclick) CWS-007 Medium MV3 Lifetime 短暂 service worker 中的内存全局状态 CWS-008 Medium Architecture 声明了侧边面板但未设置打开触发器 CWS-009 High Runtime Bug manifest 中没有 "action" 键却调用了 chrome.action. CWS-010 High Runtime Bug 未声明 "tabs" 权限却访问 tab.url/tab.title CWS-011 Medium CWS Quality Manifest 描述缺失、少于 25 个字符或存在关键词堆砌 CWS-012 Critical CWS Policy 编译或流式传输远程 WebAssembly 字节码 CWS-013 High CWS Scrutiny 声明特权 debugger 权限(Tier-3 人工审查) CWS-014 Medium Frame Isolation 通配符 <all_urls> 上设置 all_frames: true 注入第三方广告 iframe PERM-DEAD Low Least Privilege 声明的权限在任何扩展代码中从未被调用 PERM-UNDECLARED High Runtime Bug 代码中调用了 Chrome API 但 manifest 中没有对应权限 PERM-OVERPRIVILEGED Medium Least Privilege 只读取非敏感的 tab.id 却声明了 tabs SEC-TAINT-LEAK Critical DLP / Security 确认存在从敏感源到网络 sink 的数据流 SEC-DOM-XSS Critical DOM Security 对 .innerHTML / .outerHTML 赋值或调用 document.write SEC-EXTERNAL-MSG-INSECURE Critical Access Control onMessageExternal 监听器缺少 sender.origin 验证 SEC-KEYLOGGER-INPUT Critical Malware / Spyware 全局 keydown 监听器或密码输入字段窥探 SEC-STORAGE-SYNC-CREDENTIALS High Privacy & DLP 明文凭据/token 存储在未加密的 chrome.storage.sync 中 SEC-C2-ENDPOINT Critical Threat Intel
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。