Auspeo/oauthlint
GitHub: Auspeo/oauthlint
一款基于 Semgrep 的多语言静态分析工具,专注于检测和修复 AI 编程工具生成的 OAuth、OIDC 与 JWT 安全漏洞。
Stars: 0 | Forks: 0

# oauthlint
**捕获 AI 编程工具系统化生成的 OAuth / OIDC / JWT 反模式。**
精心整理的多语言 Semgrep 规则包(JS/TS · Python · Go · Java · Rust,持续增加中) · CLI + GitHub Action + VS Code 扩展 · 免费且采用 MIT 许可证
[](https://github.com/Auspeo/oauthlint/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/oauthlint)
[](https://www.npmjs.com/package/oauthlint)
[](LICENSE)
[](https://oauthlint.dev)
[](https://semgrep.dev)
```
npx oauthlint scan ./src
```
📖 **完整文档与规则目录:[oauthlint.dev](https://oauthlint.dev)**
## 它是什么
LLM 编程助手(Cursor、Claude Code、GitHub Copilot、Gemini Code Assist)在它们接触的每个项目中都会生成相同的 OAuth/JWT 漏洞:
- 接受使用 `alg: none` 验证的 JWT
- `client_secret` 被硬编码在源代码中
- `redirect_uri` 使用 `*` 通配符加入白名单
- token 被写入 `localStorage`(可被 XSS 读取)
- 没有 `state` / 没有 PKCE 的 OAuth 流程
- 没有速率限制的 `/login` POST 请求
- 明文持久化存储密码
- 使用 `Math.random()` 生成 CSRF token
- ……以及其他 22 项
oauthlint 是通用 SAST(Snyk、Semgrep)与企业 IAM(每年 5 万美元以上)之间缺失的一层:**免费、专注、开发者优先。** 每一个发现结果都链接到一个页面,解释*为什么这很重要*以及*如何修复它*。
## 为什么选择 OAuthLint 而不是直接用 Semgrep?
诚实的回答是:没有什么能阻止你自己编写这些规则。Semgrep 是开源的,它也是我们运行的引擎,而且一个有能力的工程师可以重现其中的大部分内容。我们没有技术护城河,我们也不会假装有。
我们拥有的是大多数人从未做过的工作:
- **低误报率,已针对真实的认证库进行验证。** 我们针对 `jose`、NextAuth、PyJWT、Authlib、`golang/oauth2`、`oauth2-rs`、Spring 等运行规则——任何在成熟库源代码上触发的结果都会进入分类队列,而不会直接报告给你。调整规则使其不会在 `jose` 的内部机制上误报,正是通用的 Semgrep registry 所跳过的隐形且枯燥的工作。(参见[验证报告](https://oauthlint.dev/VALIDATION):在数千个真实认证库源代码文件中进行了验证,在干净的认证库上误报率为零。)
- **在它覆盖的所有语言中提供一个连贯的产品。** 相同的概念、相同的 ID 方案、相同的文档——JS 中的 `AUTH-JWT-001` 对应 Go 中的 `AUTH-GO-JWT-001`。而不是一堆风格不匹配的社区规则拼凑而成。
- **每一个发现都具有教育意义。** 每个规则都链接到带有 CWE 和 OWASP 映射的修复页面。这是一堂课,而不仅仅是一个 grep 命中结果。
- **registry 所不具备的角度:** OAuthLint 专门针对 AI 编程工具反复生成的 OAuth/JWT 漏洞——这被编码在每个规则的 `llm-prevalence` 元数据中。
当你不想自己编写和维护一套认证规则包时,请使用 OAuthLint。这就是全部的理由。
## 运行效果

每个发现都会列出规则名称、确切的文件和行号、为什么它很危险,以及
指向修复方法的链接。
## 快速开始
### CLI
```
# 一次性扫描,无需安装
npx oauthlint scan ./src
# 在 HIGH 严重性及以上级别使 CI 失败
npx oauthlint scan ./src --fail-on HIGH
# 机器可读输出
npx oauthlint scan ./src --json
# GitHub Code Scanning
npx oauthlint scan ./src --format sarif > oauthlint.sarif
# 自动应用安全修复(例如 cookie flags)
npx oauthlint scan ./src --fix
```
其他命令:`oauthlint list`(浏览规则)、`oauthlint init`(编写配置)、`oauthlint doctor`(检查你的设置)。
### GitHub Action
```
- uses: Auspeo/oauthlint/action@v1
with:
severity: HIGH
fail-on: HIGH
```
该 Action 基于 **Docker**,因此无论项目使用何种语言,它都可以在任何代码仓库的 CI 中运行。
### VS Code 扩展
从应用市场安装 **oauthlint**,即可在输入时获得内联诊断,以及快速修复抑制功能。
### 内联抑制
```
// oauthlint-disable-next-line auth.jwt.alg-none -- legacy code, replaced in Q2
return jwt.verify(token, key, { algorithms: ['RS256', 'none'] });
```
完全静默(`oauthlint-disable-file *`)是故意不受支持的——下一位审查者需要确切地看到哪些行被选择了忽略。
## 规则
涵盖 JavaScript/TypeScript、Python、Go、Java 和 Rust 中关于 OAuth 2.0、OIDC、JWT、cookies、CORS 和 session 安全的规则——每一条都映射到 CWE 和 OWASP,并带有一个文档页面。该目录随着每次发布而不断扩充。
👉 **在 [oauthlint.dev/rules](https://oauthlint.dev/rules/) 浏览完整目录。**
## 语言支持
oauthlint 构建于 [Semgrep](https://semgrep.dev) 之上,其引擎是**与语言无关的**。规则只是纯 YAML 数据,因此添加一种语言只需**编写规则包**——而不需要重构任何内容。
| 语言 | 状态 |
|----------|:------:|
| JavaScript / TypeScript | ✅ 已发布 |
| Python (PyJWT, requests, Flask, Django) | ✅ 已发布 |
| Java (Spring Security, jjwt, nimbus-jose-jwt) | ✅ 已发布 |
| Go (golang-jwt, crypto/tls, net/http) | ✅ 已发布 |
| Rust (jsonwebtoken, reqwest, actix/tower) | ✅ 已发布 |
| 更多(请提交 issue 来请求支持你的技术栈) | 🔜 计划中 |
**为什么优先支持 JS/TS?** 因为这是 AI 编程工具生成代码最多的地方——因此也是生成 OAuth/JWT 漏洞最多的地方。这是密度最高的切入点,而不是上限。想要支持你的技术栈?[提交一个 issue](https://github.com/Auspeo/oauthlint/issues)。
## 本仓库包含的内容
| 包 | 功能 |
|---------|--------------|
| [`rules/`](rules) | Semgrep 规则(JS/TS · Python · Go · Java · Rust),经 schema 验证,附带漏洞 + 安全示例 |
| [`cli/`](cli) | `scan`、`list`、`init`、`doctor` — 美化的 + JSON + SARIF 输出 |
| [`action/`](action) | 封装了 CLI 的基于 Docker 的 GitHub Action |
| [`vscode/`](vscode) | VS Code 扩展:诊断 + 快速修复抑制 |
| [`examples/`](examples) | 用于内部测试(dogfooding)的故意带有漏洞的演示应用 |
## 开发
```
pnpm install
pnpm test:run # full suite: rule pack + CLI + Action + VS Code + scripts
pnpm lint
pnpm build
pnpm typecheck
pnpm docs:dev # preview the docs site locally
```
**添加规则:** 在 `rules/rules/
/` 中放入一个 YAML 文件,添加 `vulnerable.ts` + `safe.ts` 示例,基于 schema 的测试就会自动识别它。运行 `pnpm docs:rules` 来刷新生成的文档。
### 提交与发布
- 强制执行 **[Conventional Commits](https://www.conventionalcommits.org)**(`feat:`、`fix:`、`docs:`、`chore:`,等等),通过 `commit-msg` hook 实现。
- **Git hooks** (husky):`pre-commit` 会对暂存区的文件运行 Biome;`pre-push` 会运行类型检查 + 完整的测试套件。
- **发布**使用 [Changesets](https://github.com/changesets/changesets) — 参见 [RELEASE.md](RELEASE.md)。
## 贡献
最有用的贡献是告诉我们规则什么时候出错了:提交一个
[误报 issue](https://github.com/Auspeo/oauthlint/issues/new/choose)。
想要捕获新的反模式,或者想自己编写规则?请参见
**[CONTRIBUTING.md](CONTRIBUTING.md)** — 一个规则就是一个 YAML 文件加上一对
`vulnerable.ts` / `safe.ts` 示例。参与即表示你同意遵守
[行为准则](CODE_OF_CONDUCT.md)。
## 许可证
MIT — 参见 [LICENSE](LICENSE)。由 [Auspeo](https://github.com/Auspeo) 构建和维护。标签:JS文件枚举, MITM代理, Semgrep, WordPress安全扫描, 可视化界面, 安全审查, 数据可视化, 日志审计, 自动化攻击, 请求拦截, 逆向工具, 静态代码扫描