Webba-Creative-Technologies/vice

GitHub: Webba-Creative-Technologies/vice

一款集黑盒远程扫描与白盒本地代码审计于一体的 Web 应用安全审计 CLI 工具,可集成到 CI/CD 管道实现自动化安全把关。

Stars: 334 | Forks: 17


  ██╗   ██╗██╗ ██████╗███████╗

  ██║   ██║██║██╔════╝██╔════╝

██║   ██║██║██║     █████╗

╚██╗ ██╔╝██║██║     ██╔══╝

   ╚████╔╝ ██║╚██████╗███████╗

    ╚═══╝  ╚═╝ ╚═════╝╚══════╝

  

针对 Web 应用程序的黑盒与白盒安全审计工具。

Discord npm VICE Security License Node Modules


## 什么是 VICE? VICE 是一款安全审计 CLI 工具,用于查找 Web 应用程序中的漏洞。它具有两种模式: **远程扫描** 需要提供一个 URL。它会使用真实的浏览器爬取您的网站,从 JS 包中提取机密信息,测试您的登录是否容易受到暴力破解和 SQL 注入攻击,扫描您的 VPS 端口,检查您的 Supabase RLS 等。就像攻击者所做的那样,但针对的是您自己的系统。 **本地审计** 需要指向您的项目目录。它会读取您的源代码,检查您的 `.env` 文件,运行 npm audit,分析您的 Supabase 迁移中是否缺少 RLS,在您的代码中查找 SQL 注入和 XSS,并明确告诉您需要修复什么。 由 [Webba Creative Technologies](https://webba-creative.com) 构建。
## 快速开始 ``` # 全局安装 npm install -g vice-security # Interactive mode vice # 或直接运行 vice scan # Remote scan (black-box) vice audit . # Local audit (white-box) vice audit . --ci # CI mode (exit code 0 or 1) vice history # View saved reports ```
## GitHub Action VICE 作为一个 GitHub Action 发布,它会在每次 pull request 和 push 时扫描您的代码,将扫描结果作为 PR 评论发布,并在您的仓库中维护一个安全徽章。 ### 快速入门 将 `.github/workflows/security.yml` 添加到您的仓库中: ``` name: Security on: push: branches: [main] pull_request: permissions: contents: write pull-requests: write security-events: write jobs: vice: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: Webba-Creative-Technologies/vice@v3 ``` 就是这样。该 Action 会安装 VICE,审计您的代码,在每次 PR 时附上带有分数和扫描结果的评论,并更新默认分支上的 `.github/vice-badge.json` 文件,以便您可以在 README 中嵌入实时的安全徽章。 ### 它的作用 - **在 pull request 上**:发布一条包含安全分数、严重程度统计以及按严重程度分组的顶级扫描结果的评论。此评论会在每次提交时更新,不会产生垃圾信息。 - **在推送到默认分支时**:使用当前分数刷新 `.github/vice-badge.json`,使您的 README 徽章保持最新。 - **SARIF 集成**:将扫描结果上传到 GitHub Code Scanning,以便它们显示在“Security”选项卡以及 pull request 更改行的内联注释中。 - **分数把关**:如果分数低于 `min-score`(默认为 `70`),则使工作流失败。在倒退合并之前将其捕获。 - **与基准分支的差异**:当基准分支上已存在徽章时,PR 评论将显示分数差异(例如 `87 (-5 vs base)`)。 ### 权限 该工作流需要三项权限: - `contents: write` — 用于在 push 事件时提交徽章文件 - `pull-requests: write` — 用于发布和更新 PR 评论 - `security-events: write` — 用于将 SARIF 扫描结果上传到 GitHub Code Scanning(Security 选项卡) ### 输入 | 输入 | 描述 | 默认值 | |---|---|---| | `path` | 要审计的项目路径 | `.` | | `min-score` | 通过所需的最低分数 (0-100) | `70` | | `fail-on-score` | 如果分数低于 `min-score` 则使工作流失败 | `true` | | `comment-pr` | 在 pull request 上发表评论 | `true` | | `update-badge` | 在 push 时更新安全徽章文件 | `true` | | `upload-sarif` | 将 SARIF 结果上传到 GitHub Code Scanning | `true` | | `badge-path` | 徽章 JSON 文件的路径 | `.github/vice-badge.json` | | `github-token` | 用于发表评论和提交徽章的 Token | `${{ github.token }}` | ### 输出 | 输出 | 描述 | |---|---| | `score` | 安全分数,从 0 到 100 | | `grade` | 评级,从 A 到 F | | `total-findings` | 发现结果总数 | | `critical-findings` | 严重(Critical)级别的发现数量 | | `high-findings` | 高危(High)级别的发现数量 | | `report-path` | JSON 报告文件的绝对路径 | 如果您为步骤分配了 `id`,则可以在后续步骤中通过 `${{ steps..outputs.score }}` 链接这些输出。 ### 安全徽章 在第一次推送到默认分支后,该 Action 会将 `.github/vice-badge.json` 提交到您的仓库中。将以下代码段添加到您的 README 中以显示实时的安全徽章: ``` ![VICE Security](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/USERNAME/REPO/main/.github/vice-badge.json) ``` 将 `USERNAME/REPO` 替换为您的仓库路径。该徽章会在每次推送到默认分支时自动更新。 ### GitHub Code Scanning 集成 VICE 在每次运行时都会将结果作为 SARIF(静态分析结果交换格式)上传到 GitHub Code Scanning。这些结果将出现在三个地方: - 仓库 **Security 选项卡** 中“Code scanning alerts”下,与 CodeQL 和其他扫描器并列 - pull request 差异中更改行的**内联注释** - 启用此功能的仓库所在组织的 **Security overview** 这需要您的工作流中具有 `security-events: write` 权限(已包含在上面的快速入门中)。对于私有仓库,必须启用 GitHub Advanced Security。公共仓库免费提供此功能。 如果您只想要 PR 评论,可以在 Action 输入中设置 `upload-sarif: false` 来禁用 SARIF 上传。 ### 锁定版本 您可以将 Action 锁定到特定版本以实现可重现的构建: ``` - uses: Webba-Creative-Technologies/vice@v3.1.0 # exact version - uses: Webba-Creative-Technologies/vice@v3 # latest 3.x.x ``` 该 Action 版本始终与 CLI 版本匹配,因此锁定操作可以同时兼顾两者。
## 远程扫描(黑盒) 为 VICE 提供一个 URL,它将使用无头浏览器从外部审计您的网站。它会捕获每个 JS 文件、每个网络请求和每个 cookie,然后针对它们运行 15 个安全模块。

VICE modules

### 模块 | 模块 | 测试内容 | |---|---| | **爬取与 JS 分析** | 启动 Puppeteer,捕获所有脚本(包括懒加载块),提取 DOM,滚动触发懒加载 | | **机密信息检测** | API 密钥(Supabase、Stripe、AWS、Firebase、GitHub)、令牌、客户端包中硬编码的密码 | | **IP 检测** | 代码中暴露的服务器 IP,带有网络上下文分析以过滤误报 | | **暴露的文件** | `.env`、`.git/config`、`package.json`、`.DS_Store`、源映射,附带 SPA 捕获所有路由的检测 | | **HTTP 请求头** | 缺少 CSP、HSTS、X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Permissions-Policy | | **Supabase 审计** | 每个表的 RLS 策略、使用 anon key 的读/写访问、auth providers、admin endpoints | | **Auth 注入** | 注册滥用、对 auth.users 的直接注入、service_role 密钥检测(JWT payload 已解码) | | **VPS 端口扫描** | 20 个常见端口(SSH、数据库、Redis、开发服务器、管理面板)、Banner 抓取、反向 DNS | | **攻击测试** | 反射型 XSS(6 个 payload x 14 个参数)、点击劫持、CORS 错误配置、开放重定向、路径遍历、SSL/TLS、cookie 安全、CSP 绕过、HTTP 方法 | | **登录审计** | GET 与 POST 表单、CSRF 令牌、暴力破解(5 次尝试)、用户枚举、SQL 注入(5 个阶段及 UNION 提取)、密码重置安全、外部脚本注入演示 | | **技术栈检测** | 涵盖框架、服务器、BaaS、分析工具、构建工具、UI 库的 40 多项技术指纹识别 | | **子域名扫描** | 80 多个常见子域名的 DNS 枚举、HTTP/HTTPS 检查、危险子域名检测 | | **DNS 与电子邮件** | SPF、DKIM(12 个选择器)、DMARC 策略分析、悬空 CNAME 检测(子域名接管) | | **API Endpoints** | 从 JS 包中发现、Auth 测试、速率限制、SQL 注入、每个 Endpoint 的 CORS | | **Storage Buckets** | Supabase Storage 存储桶枚举、文件列表、上传测试、S3/GCS URL 检测 | | **WebSocket** | 实时频道窃听、Supabase Realtime、Socket.IO、未经身份验证的消息捕获 | 以下是运行时的样子:

VICE scanning


## 本地审计(白盒) 将 VICE 指向您的项目目录。它会读取您的源代码并为您提供具体的修复建议。 ``` vice audit . vice audit /path/to/project ``` ### 模块 | 模块 | 检查内容 | |---|---| | **代码机密** | 源文件中硬编码的 API 密钥和令牌,附带行号和修复建议 | | **环境文件** | `.gitignore` 中的 `.env`、`.env.example` 中的真实机密、暴露的敏感配置文件 | | **依赖项** | 针对 CVE 的 `npm audit`,具有已知漏洞的过时软件包 | | **Supabase RLS** | 分析 SQL 迁移中是否缺少 `ENABLE ROW LEVEL SECURITY`、空策略、不安全的授权、没有身份验证检查的 SECURITY DEFINER | | **Auth 与中间件** | 速率限制的存在情况、CORS 通配符、CSRF 保护、会话配置、JWT 过期时间、硬编码密码 | | **代码漏洞** | SQL 注入(查询中的模板字符串)、XSS(`v-html`、`dangerouslySetInnerHTML`、`innerHTML`)、`eval()`、命令注入、开放重定向、弱加密、ReDoS | | **Headers 配置** | Nuxt、Next.js、Vercel、Netlify、Express 配置中的 CSP 和 HSTS 配置 |
## 评分 每次扫描都会产生一个 0 到 100 之间的安全分数,评级从 A 到 F。

VICE score

每个发现都有一个严重级别,会影响分数: | 严重程度 | 分数影响 | 含义 | |---|---|---| | **Critical** | -15 | 可利用的漏洞,需要立即采取行动 | | **High** | -8 | 严重风险,尽快修复 | | **Medium** | -3 | 中等风险,在可能的情况下修复 | | **Low** | -1 | 轻微风险 | | **Info** | 0 | 参考信息,无需采取行动 | 该分数可帮助您确定优先级并跟踪随着时间推移的改进情况。使用 `--ci --min-score 70` 可在您的部署管道中强制执行最低分数。
## HTML 报告 每次扫描都可以导出为整洁的 HTML 报告,以便与您的团队分享。

VICE HTML report

报告保存在 `scans/` 目录中。您还可以从历史记录菜单中将较旧的扫描导出为 HTML。
## 配置 ### CLI 选项 ``` vice scan # Interactive remote scan vice audit . # Audit current directory vice audit /path/to/project # Audit specific project vice audit . --ci # CI mode, exit 1 if score < 70 vice audit . --ci --min-score 80 # Custom threshold vice history # Browse saved reports ``` ### 配置文件(可选) 在您的项目根目录中创建 `vice.config.js`: ``` export default { url: 'https://your-site.com', ignore: ['Supabase Anon Key', 'Firebase API Key'], ci: { minScore: 70, failOnCritical: true, }, supabaseMigrations: './supabase/migrations', } ``` ### `.viceignore`(可选) 在项目根目录中创建一个 `.viceignore` 文件,以在本地审计中排除文件或目录。其工作方式类似于 `.gitignore`: ``` # 忽略 translation files **/i18n/** **/locales/** # 忽略特定文件 src/config/ui-labels.ts # 按 pattern 忽略 *.locale.* ``` 被排除的文件将被所有本地审计模块(机密、身份验证、代码漏洞等)跳过。
## 面向开发者 ### 项目结构 ``` vice/ ├── bin/ │ └── vice.js # CLI entry point ├── src/ │ ├── core/ │ │ ├── findings.js # Shared findings store │ │ ├── score.js # A-F score calculator │ │ └── reporter/ │ │ ├── console.js # Terminal output │ │ ├── json.js # JSON export │ │ └── html.js # HTML report │ ├── local/ # White-box modules │ │ ├── index.js # Module orchestrator │ │ ├── secrets.js # Source code secrets │ │ ├── env.js # .env audit │ │ ├── dependencies.js # npm audit │ │ ├── supabase-rls.js # RLS in migrations │ │ ├── auth.js # Auth & middleware │ │ ├── code-vulnerabilities.js # SQLi, XSS, eval │ │ └── headers-config.js # CSP/HSTS config │ └── utils/ │ ├── fetch.js # HTTP with timeout │ └── patterns.js # Shared regex patterns ├── scan.js # Remote scan engine (15 modules) ├── scans/ # Saved reports └── package.json ``` ### 添加本地审计模块 1. 创建 `src/local/your-module.js`: ``` import { addFinding } from '../core/findings.js'; export async function auditYourModule(projectPath, spinner) { spinner.text = 'Running your check...'; // Your logic here addFinding( 'HIGH', // CRITICAL, HIGH, MEDIUM, LOW, INFO 'Module Name', // Shown as section header in report 'Short title', // One-line summary 'Detailed info', // File paths, values, context 'How to fix this' // Concrete fix with code examples ); } ``` 2. 在 `src/local/index.js` 中注册它: ``` import { auditYourModule } from './your-module.js'; // Add to LOCAL_MODULES array: { name: 'Your module description', value: 'yourmod', fn: auditYourModule }, ``` ### 添加远程扫描模块 在 `scan.js` 中添加您的模块函数,并使用微调器将其注册到 `main()` 函数和模块选择菜单中。 ### 贡献 有关指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。简而言之:Fork、创建分支、提交 PR。保持较低的误报率,并始终提供具体的修复建议。
## 更新日志 ### v3.0 - 两种模式:远程扫描(黑盒)和本地审计(白盒) - 15 个远程模块,7 个本地模块 - 首次启动时的法律免责声明 - 设计简洁的 HTML 报告 - 带有 JSON/HTML 导出的扫描历史记录 - 带有退出代码的 CI 模 - A-F 评分系统 - npm 包 (`vice-security`) ### v2.0 - 用于爬取的 Puppeteer 无头浏览器 - 技术栈检测和指纹识别 - 子域名扫描、DNS/电子邮件安全 - 存储桶审计、WebSocket 测试 - 评分系统和 HTML 报告 ### v1.0 - 初始发布版本 - 使用 fetch 的基于 URL 的扫描 - 机密信息、Headers、Supabase RLS、VPS 端口扫描 - 登录表单上的 SQL 注入测试
## 许可证 MIT。请参阅 [LICENSE](LICENSE)。 由 [Webba Creative Technologies](https://webba-creative.com) 构建。 此工具仅用于授权的安全测试。您需对如何使用它承担全部责任。请参阅首次启动时显示的法律免责声明。
标签:AppImage, CISA项目, CLI, DOE合作, GNU通用公共许可证, GraphQL安全矩阵, MITM代理, Node.js, NPM包, OSV-Scalibr, RLS, Supabase, Web安全, Web应用防火墙, WiFi技术, XXE攻击, 安全扫描器, 密码管理, 密钥提取, 数据统计, 暗色界面, 白盒测试, 端口扫描, 结构化查询, 网络安全, 自动化安全, 自定义脚本, 蓝队分析, 隐私保护, 黑盒测试