
プロジェクトのRLS設定ミス、露出したキー、認証バイパス、ストレージの脆弱性を監査するClaude Skill。CVE-2025-48757と10件のセキュリティ研究に由来する27のアンチパターン。本番環境でも安全に使用できます。
データベースバックエンドのセキュリティ脆弱性を監査するClaudeスキル。
Claude Code、Cursor、またはClaudeを搭載したあらゆる環境にドロップするだけです。「audit my database」と伝えると、正確な修正コード付きの包括的なセキュリティレポートを、数日ではなく数分で入手できます。
170以上のLovableアプリが侵害された。 YCスタートアップ全体で2,010万件のレコードが露出。約87,000のMongoDBインスタンスがMongoBleed (CVE-2025-14847、CISA KEV) に対して脆弱なまま残された。2025年の単一インシデントで180万件のFirebaseパスワードが漏洩。AI生成コードの45%がOWASP Top 10の脆弱性を生み出している。Database Sentinelは、セキュリティ設定が実際に機能するかをテストします — 存在するかどうかだけではありません。
Database Sentinelは、プロジェクトが使用するバックエンドに対して7段階のセキュリティ監査を実行します:
tx=rollback、カナリアコレクション、オプトインのMongoBleed検出器)クロスバックエンド推論により、単一バックエンドのスキャナが見逃す問題を検出します (例: JWT検証なしでPostgres APIに信頼されるFirebase Auth UID)。
| フェーズ | バックエンド | ステータス |
|---|---|---|
| 1 | Supabase | ✅ リリース済み |
| 2 | MongoDB (セルフホスト + Atlas) | ✅ リリース済み |
| 3 | Firebase (Firestore / RTDB / Storage / Functions / Remote Config) | 🚧 予定 |
| 4 | PostgreSQL (セルフホスト、pgBouncerを含む) | 🚧 予定 |
| 5 | MySQL (セルフホスト) | 🚧 予定 |
| 6 | クロスバックエンド相互作用分析 | 🚧 予定 |
| 7 | 配布 + 仕上げ | 🚧 予定 |
Database Sentinelは、以前はSupabase Sentinel (単一バックエンド) でした。名称変更はマルチバックエンド拡張のフェーズ1中に行われました。compat/supabase-sentinel/にある後方互換シムにより、少なくとも次のマイナーリリースまでは旧スキル名が維持されます — 既存ユーザーは後退を経験しません。
スキルをプロジェクトのスキルディレクトリ、または中央のディレクトリにクローンします:
git clone https://github.com/Farenhytee/database-sentinel.git ~/claude-skills/database-sentinel
次にClaudeに依頼します:
Audit my database
Database Sentinelは、プロジェクトが使用するバックエンドを検出し、関連する監査を実行して、統合レポートを生成します。複数のバックエンドが存在する場合 (Firebase Auth + Postgresデータなど)、フェーズ6の実装後にはレポートにクロスバックエンド相互作用セクションが含まれます。
特定のバックエンドのみを監査したい場合は、明示的に依頼します:
Audit my Supabase project
Audit my MongoDB instance
ディスパッチャーがスコープを絞り込みます。
SKILL.mdの内容と関連するbackends/<name>/workflow.mdをシステムプロンプトにコピーします。認証情報を使って7つのステップを実行します。
MongoBleedネットワークプローブ (backends/mongodb/mongobleed-probe.md) には、実行時に悪用可能性を確認する単一パケット検出器が同梱されています — mongo:7.0.20 (脆弱) とmongo:7.0.28 (パッチ適用済み) で検証済み。読み取り専用で、2つのオプトイン確認の背後にゲートされており、コンテンツを抽出することはありません。
╔════════════════════════════════════════════════════════╗
║ SENTINEL SECURITY AUDIT ║
╠════════════════════════════════════════════════════════╣
║ Backends: supabase, mongodb ║
║ Scanned: 2026-04-30 14:30 UTC ║
║ Score: 0/100 🔴 ║
║ Summary: 2 backends, 8 findings (3C / 4H / 1M) ║
╚════════════════════════════════════════════════════════╝
─────────────────────────────────────────────────────────
Supabase 35/100 🔴
─────────────────────────────────────────────────────────
🔴 CRITICAL — public.users: RLS Disabled [SB-001]
Risk: Anyone on the internet can read your entire users table.
Attack: Open browser DevTools → copy anon key → curl the API → dump
all emails, names, and metadata.
Proof: curl returns [{"id":"...","email":"[email protected]",...}]
Source: CVE-2025-48757 / Splinter 0013_rls_disabled_in_public
Fix:
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
CREATE POLICY "users_select_own"
ON public.users FOR SELECT TO authenticated
USING ((SELECT auth.uid()) = id);
─────────────────────────────────────────────────────────
MongoDB 0/100 🔴
─────────────────────────────────────────────────────────
🔴 CRITICAL — mongod 7.0.20: MongoBleed (CVE-2025-14847) [MG-SH-001]
Risk: A single TCP packet leaks fragments of MongoDB's memory —
including credentials, queries, and document data — without
requiring any login.
Attack: Public PoC available since Dec 26 2025; CISA KEV. Repeated
requests progressively dump more of the working set.
Proof: buildInfo.version = "7.0.20" (vulnerable; patched in 7.0.28)
zlib compression enabled (default): true
Active probe returned: vulnerable (opCode=2012, 163 bytes)
Source: CVE-2025-14847 / CISA KEV / MongoDB Server Security Update Dec 2025
Fix:
Upgrade to 7.0.28+. Same-day mitigation if upgrade is blocked:
net.compression.compressors = "snappy,zstd" in mongod.conf
✅ PASSING — Supabase: orders, payments, invoices, subscriptions
database-sentinel/
├── SKILL.md # Dispatcher — detects backends, routes audits (~2K tokens)
├── DECISIONS.md # Locked architecture decisions (D1-D4 + supersessions)
├── core/
│ ├── workflow.md # Universal 7-step audit workflow
│ ├── detection.md # Backend detection + JSON manifest
│ ├── scoring.md # Per-backend weights, min-aggregation
│ ├── reporting.md # Unified report format (text + JSON)
│ └── credentials.md # Public-vs-privileged key handling
├── backends/
│ ├── supabase/ # Phase 1 — implemented
│ │ ├── workflow.md # 7-step audit specialized for Supabase
│ │ ├── audit-queries.md # 20 SQL queries for schema introspection
│ │ ├── anti-patterns.md # 27 patterns (SB-001..SB-027)
│ │ └── fix-templates.md # SQL fix templates (7 RLS patterns + more)
│ └── mongodb/ # Phase 2 — implemented
│ ├── workflow.md # 7-step audit specialized for MongoDB
│ ├── introspection.md # mongosh + Atlas Admin API + IaC scan
│ ├── anti-patterns.md # 20 patterns (MG-SH-001..014, MG-AT-001..006)
│ ├── mongobleed-probe.md # Safe CVE-2025-14847 single-packet detector
│ ├── fix-templates.md # Version matrix + mongod.conf + validators + Atlas TF
│ └── test-recipe.md # Document-only end-to-end test recipe
├── compat/
│ └── supabase-sentinel/ # Backwards-compat shim (forces backend=supabase)
│ └── SKILL.md
├── references/
│ ├── vibe-coding-context.md # CVE-2025-48757, breach studies — cross-backend
│ └── cve-feed.md # Cross-backend CVE list (MongoBleed seeded)
├── assets/
│ └── ci/
│ ├── github-action-supabase.yml # 1 job — security audit
│ └── github-action-mongodb.yml # 3 jobs — static IaC, live audit, MongoBleed probe
├── README.md # this file
├── LICENSE # MIT
├── DECISIONS.md
└── sentinel-implementation-plan.md # Multi-backend expansion roadmap
プログレッシブ開示の仕組み: Claudeは、最初にSKILL.md (約2Kトークン) とcore/*のみを読み込みます。検出によってバックエンドが特定されると、対応するbackends/<name>/workflow.mdとオンデマンドのリファレンスファイルが読み込まれます。Supabaseのみの監査ではMongoDBコンテンツのコストを負担しません。将来のFirebase / Postgres / MySQL拡張も同じパターンに従います。
実装済みの各バックエンドにはCIワークフローテンプレートが同梱されています:
| バックエンド | ワークフロー | ジョブモード |
|---|---|---|
| Supabase | assets/ci/github-action-supabase.yml | 単一ジョブ — セキュリティ監査 (イントロスペクション + 動的プローブ) |
| MongoDB |
ワークフローは、関連ファイルの変更 (マイグレーション、ルールファイル、IaC、依存関係マニフェスト)、毎週のcron (月曜06:00 UTC)、および手動実行でトリガーされます。PRコメントを投稿し、レポートの成果物をアップロードし、重大な検出結果があるとビルドを失敗させます。
あとは、「Set up continuous security monitoring for this project.」と依頼するだけです。
Database Sentinelのアンチパターンデータベースは以下から収集されています:
$whereインジェクション完全な引用セットについては、references/vibe-coding-context.mdとreferences/cve-feed.mdを参照してください。
Database Sentinelは、本番環境での使用に安全なように設計されています:
pg_tables、pg_policies、getCmdLineOpts など) のみを読み取ります。デフォルトではDDLもDMLも実行されません。Prefer: tx=rollback (PostgRESTネイティブ; 変更されるデータはゼロ)BEGIN…ROLLBACK (トランザクションDDL)abortTransaction()/_sentinel_probe/{random} のカナリアコレクション_sentinel_probeスキーマ + DROP DATABASE (オプトイン、破壊的 — 明示的な警告).invalid TLDを使用。 テストメールには、メールを受信できないRFC 6761予約ドメインを使用します。コントリビューションを歓迎します。最も価値の高い貢献:
backends/<name>/anti-patterns.mdに追加してください。backends/<name>/fix-templates.mdにおける、より良いポリシーパターン、エッジケース、パフォーマンス最適化。backends/mongodb/mongobleed-probe.mdの「経験的に検証済み」注釈を参照)。backends/mongodb/とbackends/supabase/の構造に従ってください。実装計画 (sentinel-implementation-plan.md) に各フェーズの契約が記載されています。git checkout -b add-new-pattern)mysql_native_password非推奨化対応)BACKENDS.mdクイックリファレンス、supabase-sentinelシムの非推奨化タイムラインnpx database-sentinel auditsupabase-sentinelスキル名は、compat/supabase-sentinel/の互換シムを介して引き続き機能します。監査をSupabaseのみに限定し、v1と区別できない出力を生成します。廃止予定日: 未定 (TBD)。少なくとも次のマイナーリリースまでは維持されます。
MIT — 商用かどうかにかかわらず、好きなように使用できます。
vibe-coding時代のために作られました。
「動くこと」と「安全であること」は、まったく別のものだからです。
| 重大度 | パターン | 内容 |
|---|
| 🔴 重大 | SB-001 RLS_DISABLED | 行レベルセキュリティ (RLS) がないテーブル — インターネットに完全に露出 |
| 🔴 重大 | SB-002 SERVICE_ROLE_EXPOSED | フロントエンドコード内のservice_roleキー — すべてのセキュリティをバイパス |
| 🔴 重大 | SB-003 POLICIES_BUT_NO_RLS | ポリシーは作成済みだがRLSが有効化されていない — 偽りのセキュリティ |
| 🔴 重大 | SB-005 WRITE_USING_TRUE | USING(true)を使用したINSERT/UPDATE/DELETE — 誰でも変更可能 |
| 🟠 高 | SB-006 USING_TRUE_SELECT | 機密テーブルの全行が匿名ユーザーに読み取り可能 |
| 🟠 高 | SB-007 VIEW_NO_SECURITY_INVOKER | ビューがRLSをバイパスし、スーパーユーザーとして実行 |
| 🟠 高 | SB-008 SECURITY_DEFINER_EXPOSED | publicスキーマ内の関数がRLSをバイパスし、API経由で呼び出し可能 |
| 🟠 高 | SB-009 USER_METADATA_IN_POLICY | ポリシーがユーザー変更可能なメタデータを参照 — 権限昇格 |
| 🟠 高 | SB-010 UPDATE_NO_WITHCHECK | WITH CHECKのないUPDATEポリシー — マスアサインメントのリスク |
| 🟠 高 | SB-011 GHOST_AUTH | 未確認メールでの登録が認証済みセッションを付与 |
| 🟠 高 | SB-012 STORAGE_NO_RLS | アクセス制御ポリシーのないストレージバケット |
| 🟠 高 | SB-013 JWT_SECRET_EXPOSED | JWT署名シークレットの漏洩 — 任意のユーザーのトークンを偽造可能 |
| 🟡 中 | + さらに15パターン | backends/supabase/anti-patterns.mdを参照 |
| 重大度 | パターン | 内容 |
|---|
| 🔴 重大 | MG-SH-001 MongoBleed (CVE-2025-14847、CISA KEV) | 巧妙に細工された圧縮パケットによる認証前のヒープメモリ開示。開示時点で約87Kインスタンスが露出。 |
| 🔴 重大 | MG-SH-002 認証無効 | 認証なしで実行されているmongod — Meowランサムウェアの攻撃対象 |
| 🔴 重大 | MG-SH-003 インターネット公開mongod | --bind_ip_all + 27017に到達可能 — MG-SH-002と組み合わせると完全に侵害 |
| 🔴 重大 | MG-AT-001 Atlas許可リスト 0.0.0.0/0 | インターネット上のどこからでも到達可能なAtlasクラスター |
| 🟠 高 | MG-SH-004 localhost認証バイパス + コンテナ実行 | enableLocalhostAuthBypassがtrue + docker execアクセス |
| 🟠 高 | MG-SH-005 サーバーサイドJS有効 | $where / $function / mapReduceに到達可能 — NoSQL-RCEの攻撃面 |
| 🟠 高 | MG-SH-006 TLS不要 | ネットワーク上の平文トラフィック |
| 🟠 高 | MG-SH-007 アプリユーザーへの特権ロール | アプリがroot / dbAdminAnyDatabase などで接続 |
| 🟠 高 | MG-SH-008 自己変更可能なロールドキュメント | findByIdAndUpdate(id, req.body) + バリデータなし + roleフィールド |
| 🟠 高 | MG-AT-002 Atlas FunctionのDBパススルー | HTTPS経由のNoSQLインジェクション — Data API廃止後に拡散 |
| 🟠 高 | MG-AT-003 コード内に残るAtlas Data API | 2025年9月30日に非推奨化。壊れている上、監査が甘いFunctionsに移行されている可能性が高い |
| 🟡 中 | MG-SH-009 Mongoose < 8.9.5 | CVE-2024-53900 / CVE-2025-23061 — populate-match $whereインジェクション |
| 🟡 中 | + さらに8パターン | backends/mongodb/anti-patterns.mdを参照 |
assets/ci/github-action-mongodb.yml |
3つのジョブ — 静的IaCスキャン (常に実行、シークレット不要)、ライブ監査 (vars.AUDIT_LIVE == 'true'でゲート)、MongoBleedプローブ (vars.MONGOBLEED_PROBE == 'true' + 所有権の確認でゲート) |
| バックエンド | 組み込みツール | 見逃す内容 | Database Sentinelの対応 |
|---|
| Supabase | Splinter (16 lint) | ポリシーが実際に不正アクセスを防いでいるかどうか | 全テーブルに対する全CRUDパスのライブtx=rollbackテスト |
| Supabase | Splinter | ゴースト認証 (メール確認バイパス) | .invalid TLDを使用したサインアッププローブ |
| Supabase | Splinter | WITH CHECKのないUPDATEによるマスアサインメント + 機密列 | 列名とポリシーの形状を相互参照 |
| Supabase | Splinter | コードベースのスキャン | フロントエンドコード内のservice_roleキー、ハードコードされたJWT、コミットされた.envファイルを検出 |
| MongoDB | Atlas Advisor | MongoBleedの実行時確認 | 単一パケットのプロトコルレベル検出器 (7.0.20 + 7.0.28で検証済み) |
| MongoDB | Atlas Advisor | 自己変更可能なロールドキュメント | ソースパターン + コレクションバリデータのクロスチェック |
| MongoDB | Trivy / Aikido | Atlas固有の設定 (許可リスト、IAM、CMK) | Atlas Admin APIの直接監査 |
| MongoDB | mongoaudit (2018年に開発停止) | 2025年以降もアクティブ | 2025〜2026年のCVEを含む保守されたパターンカタログ |