Perufitlife/directus-security

GitHub: Perufitlife/directus-security

Directus 专用安全审计工具,通过匿名主动探测验证公开角色数据泄露、用户枚举和未授权信息暴露等真实风险。

Stars: 0 | Forks: 0

# directus-security [![npm](https://img.shields.io/npm/v/directus-security?color=red)](https://www.npmjs.com/package/directus-security) [![downloads](https://img.shields.io/npm/dw/directus-security)](https://www.npmjs.com/package/directus-security) ![license](https://img.shields.io/badge/license-MIT-green) ![node](https://img.shields.io/badge/node-%3E%3D18-blue) ![deps](https://img.shields.io/badge/dependencies-0-brightgreen) ``` $ npx directus-security --url https://directus.example.com 1 critical, 2 high, 1 medium — 4 CONFIRMED via anonymous probe CRITICAL /items/posts public-role read enabled — rows reachable anonymously HIGH /items/posts?search=… search-param field enumeration (CVE-2025-30352 class) HIGH /items/directus_users user list exposed (name + email) MEDIUM /server/specs/oas Directus version leaked unauthenticated (CVE-2025-53887 class) ``` ## 为什么会有这个项目 Directus 为 Tripadvisor、Adobe 和 Mercedes 提供无头后端支持,而且 默认的访问模型很容易导致一种错误:保持 **Public** policy 的 **read** 权限处于 开启状态。结果就是一个任何人都能读取的 API。2025 年出现了 一系列未授权 CVE,它们与匿名探测 *完全* 对应: - [CVE-2025-30352](https://github.com/directus/directus/security/advisories/GHSA-m5q3-8wgf-x8xf) — `search` 查询参数会枚举未授权的字段,通过每次一个字符的方式泄露邮箱和 **密码哈希**。 - [CVE-2025-53887](https://nvd.nist.gov/vuln/detail/CVE-2025-30352) — Directus 版本可以通过 `/server/specs/oas` 在未授权的情况下暴露,让攻击者能将你的构建版本与已知的漏洞进行匹配。 - CVE-2025-64749 — 通过错误信息差异导致的 collection 存在性泄露。 - CVE-2025-53889 — 未授权的 Flow 触发。 `directus-security` 会检查这些问题,并通过发送与攻击者完全相同的匿名请求来 **确认真实的漏洞** —— 让你能够基于事实而非猜测来进行排查。 ## 检查内容 | 检查项 | 严重程度 | 如何确认 | |---|---|---| | 某个 collection 上的 Public role read | 严重 | 匿名 `GET /items/{collection}` 返回了数据行 | | `search` 参数字段枚举 | 高 | 匿名 `GET /items/{collection}?search=…` 有响应 (CVE-2025-30352 类) | | `/items/directus_users` 用户枚举 | 高 | 匿名读取返回了用户列表 (姓名 + 邮箱) | | 未授权的版本/schema 泄露 | 中 | `/server/info` 或 `/server/specs/oas` 在未授权状态下返回了版本信息 (CVE-2025-53887 类) | | 生产环境开启 GraphQL 自省 | 中 | 在 `/graphql` 或 `/graphql/system` 上响应了 `__schema` 查询 | ## 使用方法 ``` # 探测活动实例(猜测常见 collection 名称) npx directus-security --url https://directus.example.com # 探测特定 collection npx directus-security --url https://directus.example.com --collections posts,authors # 从 Directus schema 快照中获知您的确切 collection 名称,然后进行探测 npx directus-security --url https://directus.example.com --snapshot ./snapshot.json # 编写可共享的 HTML 报告 npx directus-security --url https://directus.example.com --html report.html # 仅静态分析(不发送请求) npx directus-security --url https://directus.example.com --no-probe ``` 输出为 stdout 上的 JSON(可通过管道传入 CI)以及 stderr 上的一行摘要。 仅在用法错误时才会以非零状态退出 —— 请根据 JSON `summary` 来管控你的 pipeline。 ## 安装(可选) ``` npm i -g directus-security directus-security --url https://directus.example.com ``` 零 dependencies。你的数据和凭证永远不会离开你的本机 —— 每个 请求都直接从该工具发送到你的 Directus 实例。 ## 姊妹工具 针对其余后端技术栈采用同样的主动探测理念,全部基于 MIT 协议: [strapi-security](https://github.com/Perufitlife/strapi-security) · [supabase-security](https://github.com/Perufitlife/supabase-security-skill) · [pocketbase-security](https://github.com/Perufitlife/pocketbase-security-skill) · [firebase-security](https://github.com/Perufitlife/firebase-security-skill) · [appwrite-security](https://github.com/Perufitlife/appwrite-security-skill) · [nhost-security](https://github.com/Perufitlife/nhost-security-skill) ## 许可证 MIT © [Renzo Madueno](https://github.com/Perufitlife)
标签:API安全, Directus, GNU通用公共许可证, JSON输出, MITM代理, Node.js, 实时处理, 密码管理, 文档结构分析, 暗色界面, 自定义脚本