RideMatch1/a.e.g.i.s

GitHub: RideMatch1/a.e.g.i.s

AEGIS 是一个面向 Next.js/Supabase 的栈特定安全扫描与评分工具,旨在发现通用 SAST 遗漏的框架级漏洞并与 Semgrep 协同增强防护。

Stars: 0 | Forks: 0

# A.E.G.I.S A E G I S (2) **The paranoid audit tool your vibe-coded app deserves.** ![License: MIT](https://img.shields.io/badge/License-MIT-green.svg) ![Tests: 1334 passing](https://img.shields.io/badge/Tests-1334%20passing-brightgreen) ![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue) ![Node 20+](https://img.shields.io/badge/Node-20%2B-brightgreen) ![npm](https://img.shields.io/npm/v/@aegis-scan/cli) ![Honest 7.7](https://img.shields.io/badge/Honest%20Score-7.7%2F10-blue) [![Release: v0.6.1](https://img.shields.io/badge/Release-v0.6.1-informational)](https://github.com/RideMatch1/a.e.g.i.s/releases/tag/v0.6.1) ## 什么是 AEGIS? AEGIS(Automated Enterprise-Grade Inspection Suite)是一个**针对 Next.js/Supabase 的栈特定安全扫描器**,拥有 59 个扫描器、基于 AST 的单文件污点追踪器,以及 0-1000 的评分系统。它能够发现通用 SAST 工具(Semgrep、CodeQL、SonarQube)遗漏的漏洞,因为这些工具缺乏框架特定的规则。 **建议与 Semgrep 一起使用,而不是替代它。** AEGIS 覆盖 Supabase/Next.js 特定的空白(多租户隔离、RLS 绕过、Server Component 数据泄露、Zod 强制),而 Semgrep 覆盖通用 SAST 领域。 它的不同之处在于:AEGIS 追踪**文件内的数据流**。它将 `const id = req.body.id; db.query(id)` 识别为 SQL 注入——不仅仅是模式匹配,而是通过变量赋值、解构、模板字面量和函数返回值进行污点传播。每个 CWE 的 sanitizer 感知意味着 `parseInt()` 能阻止 SQL 注入但不能阻止 XSS,`DOMPurify.sanitize()` 能阻止 XSS 但不能阻止 SQL 注入。 除此之外:37 个内置正则扫描器 + 1 个 AST 污点分析器,16 个外部工具封装(Semgrep、Gitleaks、ZAP、Trivy...),5 个实时攻击探测,4 个合规框架(GDPR、SOC2、ISO27001、PCI-DSS)、一个用于 AI 代理的 MCP 服务器,以及带有 PR 评论的 GitHub Action。 ## 快速开始 ``` npx @aegis-scan/cli scan . ``` ``` # 或全局安装 npm install -g @aegis-scan/cli aegis scan . # 使用所有扫描器进行全面审计 aegis audit . # 生成配置 aegis init . ``` ## AEGIS 能发现通用 SAST 工具遗漏的漏洞 这些是 **栈特定** 的漏洞,存在于 Next.js/Supabase 应用中。通用工具如 Semgrep 或 CodeQL 没有这些规则,因为它们是框架特定的模式: | 漏洞 | 类别 | |---|---| | 缺少 `tenant_id` 过滤 — 跨租户数据泄露 | 多租户 | | API 路由中的 `service_role` RLS 绕过 | Supabase | | 通过函数名中的 `.rpc()` 模板插值导致的 SQLi | Supabase | | 批量赋值 — 未验证的 `request.json()` 到 `.insert()` | Supabase | | 敏感端点缺少速率限制 | Next.js API | | API 路由缺少认证保护 | Next.js API | | Server Component 将完整数据库记录传递给客户端(CWE-200) | React Server Components | | 提示注入 — LLM 提示中的用户输入 | AI/LLM | | 缺少 Zod `.strict()` 的变异模式 | 校验 | | 数据库查询缺少分页 | 性能/DoS | AEGIS 不是 Semgrep 的替代品 — 它是 **Semgrep 的放大器**。AEGIS 能发现通用 SAST 工具遗漏的栈特定漏洞。当安装 Semgrep 时,AEGIS 会自动封装它,从而同时获得两者的能力。 ## 污点分析引擎 基于 AST 的污点追踪器使用 TypeScript 编译器 API 来跟踪用户输入在代码中的流动: ``` // AEGIS tracks this data flow: const id = req.body.id; // Source: user input const trimmed = id.trim(); // Propagates: method call const query = `SELECT * WHERE id = ${trimmed}`; // Propagates: template literal db.query(query); // Sink: SQL Injection (CWE-89, CRITICAL) ``` **每个 CWE 的 sanitizer 感知:** | Sanitizer | 阻止 SQLi | 阻止 XSS | 阻止 SSRF | 阻止命令注入 | |---|---|---|---|---| | `parseInt()` | 是 | 否 | 是 | 是 | | `DOMPurify.sanitize()` | 否 | 是 | 否 | 否 | | `encodeURIComponent()` | 否 | 是 | 是 | 否 | | `z.parse()` (Zod) | 是 | 是 | 是 | 是 | ## 跨文件污点追踪(v0.7,开发中 — 在 `main` 分支,尚未打标签) v0.7 将污点追踪扩展到模块边界:在一个文件中受到污染的输入,通过导入的函数流向另一个文件中的接收器(sink),现在可以被检测并显示为跨文件发现。调用端发现会同时携带 `crossFile: true` 和一个指向实际接收器所在文件的 `crossFileOrigin` 指针。 **在 `main` 上检测的内容:** - 裸标识符导入的调用者:`import { runQuery } from './lib'; runQuery(tainted);` - 箭头函数变量导出:`export const fn = (x) => sink(x);` - 默认导出:`export default function (x) { sink(x); }` - 桶式重导出(最多深度 5):`export { fn } from './impl';` - 每个 CWE sanitizer 识别 — 当导入的函数通过 `parseInt()`、`DOMPurify.sanitize()`、`encodeURIComponent()` 或 Zod 的 `.parse` / `.safeParse` 包装其参数时,跨文件调用会被抑制。 - SARIF 2.1.0 的 `relatedLocations` 将调用端发现链接到跨文件源头,以便 GitHub Code Scanning、GitLab 和 Azure DevOps 消费者可以在两者之间跳转。 **推迟到 v0.8(类型感知扩展):** - 包装接收器的高阶组件/柯里化模式:`withAuth(sinkFn)`、`withLogger(fn)`。 - 泛型传递返回污点:`const r = identityFn(x); sink(r);` 其中 `identityFn` 是导入的。 - 方法调用跨文件调用者:`obj.method(x)` 其中 `obj` 是导入的命名空间。 - 条件导入置信度降级(策略 §4 的置信度为 “medium”)。 所有四项都需要基于类型检查器的符号解析,v0.8 Sprint 2 将引入。v0.7 的语法级处理会很脆弱,并且需要在 v0.8 中重新做。Spa-App 上的第 5 阶段 dogfood 将衡量这些空白对实际使用的影响;如果影响显著,范围可能会在 v0.7.x 补丁中重新审视。详见 [CHANGELOG](./CHANGELOG.md)。 ## 扫描模式 | 模式 | 命令 | 功能 | |------|---------|--------------| | **scan** | `aegis scan .` | 快速通过 — 安全、依赖、质量、合规、国际化(~3 秒) | | **audit** | `aegis audit .` | 完整审计 — 包含 DAST、基础设施、TLS 的所有扫描器 | | **siege** | `aegis siege . --target URL --confirm` | 对实时目标进行 4 阶段攻击模拟 | | **fix** | `aegis fix .` | AI 驱动的修复(Claude、OpenAI、Ollama 或模板) | | **history** | `aegis history . --blame` | Git 责任增强 — 标注每个发现的引入者 | | **diff** | `aegis scan . --diff main` | 仅报告与 git ref 相比有变更的文件中的发现 | ## 扫描器(总计 59 个) ### 内置(38 个扫描器:37 个正则表达式 + 1 个 AST 污点分析器) | 扫描器 | 类别 | 检查内容 | |---------|----------|----------------| | `taint-analyzer` | 安全 | **基于 AST 的数据流分析** — 跟踪用户输入从源到接收器的流动,并具备每个 CWE sanitizer 的感知能力 | | `auth-enforcer` | 安全 | 缺失认证保护、未受保护的路由、RBAC 缺口 | | `tenant-isolation-checker` | 安全 | Sup 查询缺少 `tenant_id` 过滤 — 跨租户数据泄露检测 | | `rls-bypass-checker` | 安全 | Supabase `.rpc()` 和 `service_role` 使用绕过行级安全 | | `crypto-auditor` | 安全 | 弱算法、硬编码密钥、不安全的随机数、eval() 注入 | | `zod-enforcer` | 安全 | 缺少 Zod 验证的变异路由,缺少 `.strict()` | | `sql-concat-checker` | 安全 | 通过字符串拼接而非参数化查询的 SQL | | `xss-checker` | 安全 | 未净化的用户输入在 HTML 响应中 | | `ssrf-checker` | 安全 | 服务器端请求伪造模式 | | `csrf-checker` | 安全 | 缺少 CSRF 保护的变异处理器 | | `rate-limit-checker` | 安全 | 敏感路由缺少速率限制 | | `path-traversal-checker` | 安全 | 用户输入流入文件系统操作(CWE-22) | | `prompt-injection-checker` | 安全 | LLM 提示中的用户输入未净化(CWE-77) | | `redos-checker` | 安全 | 灾难性回溯模式(CWE-1333) | | `rsc-data-checker` | 安全 | Server Component 将完整数据库记录传递给客户端(CWE-200) | | `mass-assignment-checker` | 安全 | 未校验的请求体到数据库写入 | | `open-redirect-checker` | 安全 | 使用未校验用户输入的重定向 | | `cors-checker` | 安全 | 配置错误的 CORS(通配符/反射来源) | | `header-checker` | 安全 | 缺失安全头(CSP、HSTS、COOP 等) | | `config-auditor` | 安全 | Docker、Next.js、Firebase 配置错误 | | `cookie-checker` | 安全 | 缺失 Secure/HttpOnly/SameSite 标志 | | `entropy-scanner` | 安全 | 通过香农熵检测高熵字符串(泄露密钥) | | `timing-safe-checker` | 安全 | 使用 `===` 而非常量时间的密钥比较 | | `upload-validator` | 安全 | 缺乏魔数校验的文件上传 | | `error-leakage-checker` | 安全 | 堆栈跟踪泄露到客户端响应 | | `env-validation-checker` | 安全 | 缺少集中式环境变量校验 | | `http-timeout-checker` | 安全 | 缺少超时的 HTTP 调用 | | `jwt-checker` | 质量 | JWT 实现问题、弱签名 | | `logging-checker` | 质量 | 缺少结构化日志 | | `console-checker` | 质量 | 生产代码中的调试残留 | | `gdpr-engine` | 合规 | GDPR/DSGVO:隐私页面、同意、PII、Google Fonts、双重确认 | | `soc2-checker` | 合规 | SOC 2 Type II 控制缺口 | | `iso27001-checker` | 合规 | ISO 27001 控制映射 | | `pci-dss-checker` | 合规 | PCI DSS 卡持有数据暴露 | | `pagination-checker` | 安全 | 缺少行限制的数据库查询 | | `i18n-quality` | 国际化 | 硬编码 UI 字符串、缺失语言键 | | `supply-chain` | 依赖 | 依赖混淆、拼写劫持、锁文件完整性 | | `dep-confusion-checker` | 依赖 | 缺少私有注册表映射的范围包 | ### 外部封装(16 个扫描器,在未安装时自动跳过) | 扫描器 | 安装方式 | |---------|---------| | Semgrep | `brew install semgrep` | | Bearer | `brew install bearer` | | Gitleaks | `brew install gitleaks` | | TruffleHog | `brew install trufflehog` | | OSV-Scanner | `brew install osv-scanner` | | npm audit | 内置在 npm 中 | | license-checker | `npm i -g license-checker` | | Nuclei | `brew install nuclei` | | OWASP ZAP | 需要 Docker | | Trivy | `brew install trivy` | | Hadolint | `brew install hadolint` | | Checkov | `pip install checkov` | | testssl.sh | `brew install testssl` | | React Doctor | `npx react-doctor@latest .` | | axe/Lighthouse | 需要 Chromium | | Lighthouse Performance | 需要 Chromium | ### 攻击探测(5 个,仅 siege 模式) `auth-probe`、`header-probe`、`rate-limit-probe`、`privesc-probe`、`race-probe` ## 计分 | 分数 | 等级 | 徽章 | |------|------|------| | 950-1000 | S | FORTRESS | | 850-949 | A | HARDENED | | 700-849 | B | SOLID | | 500-699 | C | NEEDS_WORK | | 300-499 | D | AT_RISK | | 0-299 | F | CRITICAL | 某些发现(代码注入、硬编码密钥、未授权的管理路由)属于 **BLOCKER** 严重级别,会直接将分数强制设为 0/F。 ## MCP 服务器 ``` { "mcpServers": { "aegis": { "command": "node", "args": ["node_modules/@aegis-scan/mcp-server/dist/index.js"] } } } ``` 工具:`aegis_scan`、`aegis_findings`、`aegis_score`、`aegis_compliance`、`aegis_fix_suggestion` ## CI/CD — GitHub Action ``` name: Security on: [push, pull_request] jobs: aegis: runs-on: ubuntu-latest permissions: contents: read pull-requests: write steps: - uses: actions/checkout@v4 - uses: RideMatch1/a.e.g.i.s/ci/github-action@main with: fail-below: 700 ``` 在 PR 评论中发布分数、严重性表格和顶级发现。 ## 致谢 详见 [CREDITS.md](./CREDITS.md) 获取完整贡献名单。 ## 许可证 MIT
标签:AEGIS, AI安全, Chat Copilot, CodeQL, GDPR, Gitleaks, GNU通用公共许可证, ISO27001, LNA, MCP服务, MITM代理, Node.js, PCI-DSS, RLS, SAST, Semgrep, SOC2, SonarQube, Supabase, TypeScript, WordPress安全扫描, XSS, Zod, 企业级, 合规框架, 安全扫描, 安全插件, 安全评估工具, 审计工具, 开源, 开源框架, 持续集成, 数据流跟踪, 时序注入, 服务器组件, 杀软绕过, 正则扫描, 漏洞情报, 盲注攻击, 网络调试, 自动化, 自动化攻击, 评分系统, 静态应用安全测试