vexlit/vexlit
GitHub: vexlit/vexlit
基于 tree-sitter AST 和 AI 驱动的代码安全扫描器,支持 JavaScript/TypeScript/Python,可检测 263 种漏洞模式并输出 SARIF 格式报告。
Stars: 0 | Forks: 0
# VEXLIT
AI 驱动的代码安全漏洞扫描器,具备基于 AST 的分析、tree-sitter 解析功能和 263 条安全规则。
VEXLIT 使用结合 tree-sitter WASM 解析的混合 Regex + AST 方法,检测 JavaScript、TypeScript 和 Python 中的安全漏洞,从而最大程度减少误报。
## 功能特性
- **263 条安全规则** — 23 条 AST 验证规则、40 条 JS 扩展规则、200 种机密模式
- **Tree-sitter AST 解析**,支持 JavaScript、TypeScript 和 Python(基于 WASM)
- **置信度评分** — 针对每个漏洞标记高/中/低置信度,用于过滤误报 (FP)
- **SARIF 2.1.0 输出**,支持 GitHub Code Scanning 集成
- **Web 仪表盘** — GitHub OAuth、扫描历史、趋势图表、AI 解释
- **AI 验证**,通过 Claude API — 解释漏洞、建议修复方案、生成报告
- **在线演示** 位于落地页 — 粘贴代码即可立即扫描
- **可配置**,支持通过 `vexlit.config.js` 或 `.vexlitrc.json` 配置
## Web 仪表盘
**[https://vexlit.vercel.app](https://vexlit.vercel.app)**
- 连接你的 GitHub 仓库,一键扫描
- **公开仓库扫描** — 粘贴任意 GitHub URL,无需登录
- 严重程度环形图、漏洞趋势图
- 按严重程度、文件、规则或“仅可利用”(严重 + 高置信度)筛选
- 针对每个漏洞的 AI 解释 / AI 修复按钮
- SARIF 下载、AI 安全报告生成
- 带有应用内铃铛图标的**通知系统**
- 深色 / 浅色模式切换
## 安装
```
npm install -g @vexlit/cli
```
或者使用 npx 直接运行而无需安装:
```
npx @vexlit/cli scan .
```
## 快速开始
```
# 扫描当前目录
vexlit scan .
# 扫描指定文件或目录
vexlit scan src/ lib/utils.ts
# 输出为 JSON
vexlit scan . --json
# 输出为 SARIF(用于 GitHub Security)
vexlit scan . --sarif > results.sarif
# 启用 LLM 验证
vexlit scan . --llm --api-key sk-ant-...
```
## 规则
### AST 验证规则 (23)
| ID | 规则 | 严重程度 | CWE |
|---|---|---|---|
| VEXLIT-001 | 硬编码机密信息 | critical | CWE-798 |
| VEXLIT-002 | SQL 注入 | critical | CWE-89 |
| VEXLIT-003 | XSS | critical | CWE-79 |
| VEXLIT-004 | 不安全的加密 | warning | CWE-327 |
| VEXLIT-006 | 开放重定向 | warning | CWE-601 |
| VEXLIT-007 | JWT 硬编码机密 | critical | CWE-798 |
| VEXLIT-008 | JWT None 算法 | critical | CWE-327 |
| VEXLIT-009 | 函数构造器 | warning | CWE-95 |
| VEXLIT-010 | 原型污染 | critical | CWE-1321 |
| VEXLIT-011 | NoSQL 注入 | critical | CWE-943 |
| VEXLIT-012 | SSRF | warning | CWE-918 |
| VEXLIT-013 | 不安全的 Cookie | warning | CWE-614 |
| VEXLIT-014 | CORS 配置错误 | warning | CWE-942 |
| VEXLIT-015 | ReDoS | warning | CWE-1333 |
| VEXLIT-016 | 信息泄露 | warning | CWE-209 |
| VEXLIT-017 | 不安全的 TLS (Insecure TLS) | critical | CWE-295 |
| VEXLIT-018 | 时序攻击 | warning | CWE-208 |
| VEXLIT-019 | 调试器语句 | info | CWE-489 |
| VEXLIT-020 | 不安全的反序列化 | critical | CWE-502 |
| VEXLIT-021 | 路径遍历 | critical | CWE-22 |
| VEXLIT-022 | 命令注入 | critical | CWE-78 |
| VEXLIT-023 | Eval 注入 | critical | CWE-95 |
### JS 扩展规则 (40)
VEXLIT-030 至 VEXLIT-069,涵盖其他模式:dangerouslySetInnerHTML、不安全的随机性、缺少 helmet、body parser 限制、不安全的正则表达式等。
### 机密模式 (200)
涵盖 28 个类别的 200 种声明式模式,用于检测以下平台的 API 密钥和令牌:
AWS, GCP, Azure, GitHub, GitLab, Slack, Stripe, Twilio, SendGrid, Firebase, Supabase, MongoDB, Redis, Docker, Terraform, Jenkins, CircleCI, Datadog, Sentry, Algolia, PagerDuty, Linear, Jira, Zendesk, New Relic, Mixpanel, Cloudinary, npm, PyPI 等。
## 架构
```
packages/
core/ # Scanner engine — rules, AST parser, tree-sitter, secret patterns
cli/ # Command-line interface
web/ # Next.js 16 web dashboard (Supabase, Vercel)
```
- **混合检测**: Regex 预过滤 → AST 验证(tree-sitter WASM 或 @typescript-eslint)
- **集中式来源注册表**: 用户输入模式(req.body, sys.argv 等)在 `sources.ts` 中管理,由所有规则共享
- **置信度评分**: 每个漏洞根据误报风险标记高/中/低
- **去重**: 相同文件:行号 → 保留最高严重程度,优先选择更长的 ruleId
- **异步引擎**: `RuleEngine.execute()` 是异步的,用于 tree-sitter WASM 初始化
- **优雅降级**: 如果 tree-sitter 加载失败,纯 Regex 规则仍然有效
## GitHub Action
```
# .github/workflows/security.yml
name: Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
security-events: write
contents: read
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: vexlit/vexlit@v1
with:
paths: "."
fail-on: "critical"
upload-sarif: "true"
```
### Action 输入
| 输入项 | 默认值 | 描述 |
|---|---|---|
| `paths` | `.` | 要扫描的路径(空格分隔) |
| `format` | `sarif` | 输出格式:table, json, sarif |
| `fail-on` | `critical` | 失败的最低严重程度:critical, warning, info, none |
| `upload-sarif` | `true` | 上传 SARIF 到 GitHub Code Scanning |
| `sarif-file` | `vexlit-results.sarif` | SARIF 输出文件路径 |
### Action 输出
| 输出项 | 描述 |
|---|---|
| `total` | 发现的漏洞总数 |
| `critical` | 严重漏洞数量 |
| `warning` | 警告漏洞数量 |
| `info` | 提示漏洞数量 |
| `sarif-file` | 生成的 SARIF 文件路径 |
## 配置
在你的项目根目录创建 `vexlit.config.js`:
```
export default {
languages: ["javascript", "typescript", "python"],
ignore: ["vendor/", "generated/"],
rules: {
"VEXLIT-019": false, // Disable a rule
"VEXLIT-004": { severity: "critical" }, // Override severity
},
};
```
### 忽略模式
在你的项目根目录创建 `.vexlitignore`:
```
vendor/
*.generated.ts
test-fixtures/
```
默认忽略:`node_modules`, `.git`, `dist`, `build`, `.next`, `__pycache__`, `.venv`, `coverage`
## LLM 验证
使用 Claude AI 进行二次漏洞分析:
```
export ANTHROPIC_API_KEY=sk-ant-...
vexlit scan . --llm
```
LLM 验证结合上下文分析每个发现,过滤误报,并调整严重程度。
## 编程 API
```
import { scan, scanFile, RuleEngine } from "@vexlit/core";
// Scan a directory
const results = await scan({ paths: ["./src"] });
// Scan a single file
const result = await scanFile("./src/app.ts");
// Use the rule engine directly
const engine = new RuleEngine();
const vulns = await engine.execute("app.ts", code, "typescript");
```
## 技术栈
| 层级 | 技术 |
|---|---|
| 扫描器 | TypeScript, tree-sitter (WASM), @typescript-eslint |
| CLI | Commander.js, SARIF 2.1.0 |
| Web | Next.js 16, React 19, Tailwind CSS 4, Framer Motion |
| 认证 & 数据库 | Supabase (PostgreSQL, GitHub OAuth) |
| AI | Claude API (Anthropic SDK) |
| 图表 | Recharts (懒加载) |
| 部署 | Vercel (Hobby) |
## 许可证
MIT
标签:CI/CD安全, Claude API, CMS安全, DLL 劫持, DNS 反向解析, GitHub集成, JavaScript, Llama, LNA, Python, SARIF, SAST, Tree-sitter, TypeScript, WASM, WebAssembly, Web仪表盘, 云安全监控, 人工智能, 代码安全, 代码审查, 大语言模型, 安全助手, 安全插件, 对抗攻击, 敏感信息检测, 无后门, 漏洞枚举, 用户模式Hook绕过, 盲注攻击, 自动化攻击, 误报过滤, 静态分析