Auspeo/oauthlint

GitHub: Auspeo/oauthlint

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

Stars: 0 | Forks: 0

oauthlint logo # oauthlint **捕获 AI 编程工具系统化生成的 OAuth / OIDC / JWT 反模式。** 精心整理的多语言 Semgrep 规则包(JS/TS · Python · Go · Java · Rust,持续增加中) · CLI + GitHub Action + VS Code 扩展 · 免费且采用 MIT 许可证 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c4ccbf5263233253.svg)](https://github.com/Auspeo/oauthlint/actions/workflows/ci.yml) [![npm](https://img.shields.io/npm/v/oauthlint.svg)](https://www.npmjs.com/package/oauthlint) [![npm downloads](https://img.shields.io/npm/dm/oauthlint.svg)](https://www.npmjs.com/package/oauthlint) [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![docs](https://img.shields.io/badge/docs-oauthlint.dev-2f6feb.svg)](https://oauthlint.dev) [![powered by Semgrep](https://img.shields.io/badge/powered%20by-Semgrep-0a7d6b.svg)](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。这就是全部的理由。 ## 运行效果 ![oauthlint 扫描项目并标记 JWT 认证问题](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/5b91a3e506233300.gif) 每个发现都会列出规则名称、确切的文件和行号、为什么它很危险,以及 指向修复方法的链接。 ## 快速开始 ### 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安全扫描, 可视化界面, 安全审查, 数据可视化, 日志审计, 自动化攻击, 请求拦截, 逆向工具, 静态代码扫描