FixVibe

// docs / baas security / umbrella scanner

BaaS 配置错误扫描器:在用户之前找到公共数据路径

后端即服务提供商 — Supabase、Firebase、Clerk、Auth0、Appwrite、Convex — 都以相同的形态在安全性上失败:平台提供合理默认值,开发者 (或 AI 编码工具) 走捷径,在未认证攻击者和客户数据之间打开了一条公共路径。BaaS 配置错误扫描器是唯一一个像攻击者那样从外部探测该路径的工具。本文映射五个反复出现的配置错误类别,解释 FixVibe 总览 BaaS 扫描如何工作,比较四个主要提供商,并将 BaaS 感知扫描器与通用 DAST 工具进行对比。

为何 BaaS 配置错误有反复出现的形态

每个 BaaS 平台都遵循相同的架构:一个托管后端,加上一个从浏览器与它通信的薄客户端 SDK。面向浏览器的客户端需要某种凭据 — anon 密钥、可发布密钥、Firebase 项目 ID — 向后端标识自己。该凭据有意公开;架构的安全性取决于平台级访问控制 (RLS、规则、允许列表) 完成其工作。

AI 编码工具在这种架构之上构建,而没有内化平台控制层。它们正确地连接客户端 SDK,接受平台的默认宽松规则 (为教程友好性而存在),并发布。反复出现的形态是:公共凭据 + 宽松默认规则 + 缺失的覆盖 = 数据暴露。下面的五个配置错误类别都是这种形态的变种。

五个反复出现的配置错误类别

这些出现在每个 BaaS 提供商中。完整扫描对每个使用中的提供商覆盖所有五个:

类别 1:浏览器包中的错误密钥

浏览器发送秘密 / 管理员密钥 (Supabase service_role、Firebase Admin SDK 私钥、Clerk sk_*、Auth0 客户端机密) 而非公共 / anon 等效项。浏览器变成不受约束的管理员客户端。由 FixVibe 的包机密检查 覆盖。

类别 2:访问控制层被禁用或宽松

RLS 关闭、Firebase 规则是 if true、Auth0 回调列表是通配符。浏览器中的凭据是正确的 — 但本应约束它的平台级边界没有完成其工作。

类别 3:对敏感资源的匿名读取

可匿名读取的 Firestore 集合、可匿名列出的 Supabase 存储桶、可匿名访问的 Auth0 管理 API。扫描会问:「没有凭据,我能读取什么?」

类别 4:生产中的测试模式遗物

生产部署中的测试密钥 (pk_test_*sb_test_*);从生产域名可达的 开发模式 Firebase 应用;比生产具有更弱设置的测试租户 Auth0 应用。扫描将运行时密钥与预期的生产前缀比较。

类别 5:缺失 webhook 签名验证

Clerk webhook、Stripe webhook、Supabase webhook 都签名其载荷。不验证签名的处理程序对任何猜中 URL 的攻击者来说就是数据库写入原语。通过响应形状检测 — 获得 200 的未签名请求意味着验证被跳过。

FixVibe 总览 BaaS 扫描的工作原理

FixVibe 的 BaaS 阶段分三个阶段运行,每个阶段产生不同的发现:

  1. <strong>Stage 1 — provider fingerprinting.</strong> The scanner crawls the deployed app, parses every JavaScript chunk, and identifies which BaaS providers the app uses. Each provider has a distinctive runtime signature: Supabase uses <code>*.supabase.co</code>; Firebase uses <code>firebase.initializeApp({ projectId: ... })</code>; Clerk uses <code>pk_*</code> keys with a known prefix; Auth0 uses <code>clientId</code> and <code>domain</code>. The scanner records which providers are present and extracts the project identifiers.
  2. 阶段 2 — 提供商特定探测。对每个检测到的提供商,扫描器运行提供商特定的检查:baas.supabase-rls 探测 PostgREST;baas.firebase-rules 探测 Firestore + RTDB + Storage;baas.clerk-auth0 验证打包密钥的前缀;包机密检查验证没有服务级凭据泄漏。每个探测独立运行 — Supabase 发现不会阻塞 Firebase 扫描。
  3. 阶段 3 — 跨提供商关联。扫描器交叉引用发现。泄漏的 Supabase 服务角色密钥加上缺失的 RLS 比任一发现单独更严重 — 报告会突出这一点。同一应用中的多个身份提供商 (Clerk + Auth0 + 自定义身份验证) 是一个标记为审查的结构性发现。

每个探测都是被动的:对每个资源最多一次匿名读取,记录响应形状但行内容从不分页或存储。写入和修改探测被验证的域名所有权所限制 — 它们永远不针对未验证的目标运行。

每个提供商扫描器找到什么

每个 BaaS 提供商都有不同的攻击面和不同的扫描策略。涵盖的内容:

  • Supabase:表上缺失的 RLS、可匿名列出的存储桶、包中泄漏的 service_role JWT 或 sb_secret_* 密钥、通过匿名 OpenAPI 列表暴露的模式。请参阅 Supabase RLS 扫描器存储清单
  • Firebase:Firestore、Realtime Database 和 Cloud Storage 上的 if true 规则;可匿名列出的 Storage 桶;缺失的 App Check 强制。请参阅 Firebase 规则扫描器If-true 规则解释
  • Clerk:打包的 sk_* 秘密密钥、生产中的 pk_test_*、缺失的 webhook 签名验证、通配符允许的源。请参阅 Clerk 清单
  • Auth0:打包的客户端机密、启用的 Implicit 授权、通配符回调 / 注销 URL、SPA 上缺失的 PKCE。请参阅 Auth0 清单

BaaS 扫描器与通用 DAST 和 SAST 工具的比较

BaaS 感知扫描器做其他工具不做的特定工作。比较如下:

维度FixVibe (BaaS 感知 DAST)通用 DAST (Burp / ZAP)SAST / SCA (Snyk / Semgrep)
BaaS 覆盖Supabase、Firebase、Clerk、Auth0、Appwrite 的原生检查通用网页抓取;无提供商特定探测仅仓库的静态分析;无生产验证
设置时间URL → 运行 → 60 秒内出结果数小时:配置蜘蛛、身份验证、范围一天:集成到仓库 CI
它证明什么带 HTTP 级证据的生产运行时暴露Web 应用漏洞 (XSS、SQLi);通过手动配置覆盖 BaaS可能部署也可能不部署的代码模式
JavaScript 包检查解码 JWT、匹配机密前缀、遍历块有限 — 仅基于字符串的 grep是,但仅在仓库端,而非已部署
持续扫描通过 API + MCP 每月 / 部署时手动;自己配置计划每次提交 (对代码有益,对运行时盲)
单人 / 小团队价格免费层;付费从 $19/月起Burp Pro $499/年;ZAP 免费但误报多Snyk 免费 / Semgrep 免费;付费层从 $25/开发者起

诚实的范围:此扫描器不替代的内容

BaaS 感知 DAST 扫描器是一个聚焦的工具,而不是完整的安全程序。它不:

  • 替代 SAST 或 SCA。静态分析发现 DAST 扫描器无法发现的依赖 CVE (Snyk、Semgrep) 和代码级漏洞 (SonarQube)。两者都运行。
  • 替代手动渗透测试。人工渗透测试人员能发现任何扫描器都无法发现的业务逻辑缺陷、授权边缘情况和链式漏洞。在大型发布或合规审计前雇用渗透测试人员。
  • 审计你的代码或仓库以查找 git 历史中的机密。包机密检查涵盖当前部署的内容,而非历史上提交的内容。使用 git-secretsgitleaks 进行仓库卫生。
  • 涵盖非 BaaS 后端服务。如果你的应用使用自定义后端 (Express、Rails、Django、FastAPI),FixVibe 扫描其 HTTP 表面,但不探测其后面的数据库或基础设施。那是通用 DAST + SAST 的领域。

常见问题

如果我的应用使用两个 BaaS 提供商 (例如 Supabase + Clerk),总览扫描有效吗?

是的 — 提供商指纹识别和每个提供商的探测是独立的。扫描器检测两者,运行两个检查套件,并报告跨提供商关联 (例如,来自 Clerk 的 Supabase JWT 模板,在缺失 RLS 的情况下将 email 作为声明发送)。

这与对我的应用运行 Burp Suite Pro 有何不同?

Burp 是一个通用 DAST 工作台。开箱即用,Burp 不知道 PostgREST、Firestore 或 Auth0 回调路径是什么 — 你必须手动配置范围、编写扩展并解释响应。FixVibe 自带内置 BaaS 探测和 BaaS 形状的证据格式化。Burp 在通用 Web 应用覆盖 (XSS、SQLi、业务逻辑) 上胜出;FixVibe 在 BaaS 特定发现上胜出。

App Check (Firebase) 或证明 (Apple / Google) 怎么样?

App Check 使机会主义外部扫描在每个探测上返回 403 — 这是恶意机器人的正确结果。来自未证明客户端的 FixVibe 扫描行为相同。如果你启用了 App Check 而 FixVibe 仍报告发现,这意味着你的规则也对已证明客户端开放,这才是真正的风险。App Check + 正确的规则是纵深防御模式。

扫描器能验证我的修复吗?

是的 — 应用修复后重新运行。检查 ID (例如 baas.supabase-rls) 在各次运行间保持稳定,因此你可以对发现做差异比较:在运行 1 中 open 而在运行 2 中不存在的发现是修复已生效的证据。

后续步骤

对你的生产 URL 运行免费的 FixVibe 扫描 — BaaS 阶段检查在每个套餐 (包括免费层) 上都提供。有关提供商特定的深度内容,本节中的各篇文章详细涵盖每个提供商:Supabase RLSSupabase 服务密钥暴露Supabase 存储Firebase 规则Firebase if-trueClerkAuth0

// 扫描你的 baas 面

在其他人之前找到开放的表。

输入一个生产 URL。FixVibe 会列举你的应用通信的 BaaS 提供商,识别它们的公共端点,并报告未经身份验证的客户端可以读取或写入什么。免费,无需安装,无需信用卡。

  • 免费层 — 每月 3 次扫描,注册无需信用卡。
  • 被动 BaaS 指纹识别 — 无需域名所有权验证。
  • Supabase、Firebase、Clerk、Auth0、Appwrite 等。
  • 每项发现都附带 AI 修复提示 — 可粘贴回 Cursor / Claude Code。
BaaS 配置错误扫描器:在用户之前找到公共数据路径 — Docs · FixVibe