FixVibe

// docs / security guides / ai-code scanner

AI 生成コードのセキュリティスキャン: vibe-coded アプリ向け DAST

Cursor、Claude Code、Lovable、Bolt、v0、Replit、Windsurf で構築されたアプリは、前世代の Web ソフトウェアよりも早く出荷されます。また、予測可能な一連のセキュリティ ギャップを備えた状態で出荷されます。このページでは、AI- で生成されたアプリに従来の侵入テスト ツールとは異なるスキャンが必要な理由、どの脆弱性クラスが過剰に表れているか、コードベースが半分マシンで生成されている場合の DAST と SAST の違い、このワークロード用に構築されたスキャナーで何を探すべきかについて説明します。

AI-生成されたコードに別のセキュリティ スキャンが必要な理由

AI コーディング ツールは、オープンソース リポジトリで大規模にトレーニングされています。そのトレーニング データは make it secure よりも make it work に偏っています。そこからいくつかの構造パターンが導き出されます。

  • Autocomplete bias. 最も近い一致するインポートが優先されます。 service_role キーを使用する Supabase スニペットを 1 つのファイルに貼り付けると、そのキーが次のファイルでオートコンプリート候補になります。これは、そのキーが属していなかったクライアント側の React コンポーネントでも同様です。
  • No long-term context. LLM には、最後の RLS バイパスやチームの事件事後分析の記憶がありません。生成された各ファイルは新鮮ですが、多くの場合、人間がファイル間で保持する防御パターンが欠落しています。
  • Speed as the rewarded metric. ユーザーはスピードを賞賛します。 LLM トレーニングはそれを強化します。レイテンシ フィードバック信号に関しては、「最速の Next.js 認証を生成する」は、「最も安全な Next.js 認証を生成する」よりも優れています。
  • Training data gaps. 古いコードベースはトレーニング データを支配しており、最新のセキュリティのデフォルト (厳密な CSP、SameSite=Lax、HSTS、RLS) よりも古いものです。生成されたコードは、2019 年には正常だったが、現在では安全ではないパターンを反映しています。
  • Implicit platform trust. Cursor が Vercel アプリを生成するとき、Vercel のデフォルトが安全であると想定します。一部は (auto-HTTPS、署名付き Cookie) です。多くはそうではありません (デフォルトでは CSP はなく、寛容な CORS、デフォルトの Next.js デバッグ ルート)。

バイブコード化されたアプリで過剰に発生する 10 の脆弱性クラス

AI- で生成されたアプリを何千回もスキャンすると、同じ検出クラスが不均衡に表示されます。

  1. Exposed Supabase service-role keys. クライアント バンドルにコミットされた service_role JWT (eyJ で始まる) は、プロジェクトのすべての RLS ポリシーをバイパスします。 Cursor は境界の間違った側でオートコンプリートします。キーは /_next/static/... で発送されます。
  2. Missing Row-Level Security (RLS). モデルは CREATE TABLE public.items を認識し、RLS を有効にせずに続行します。匿名ユーザーは、公開 anon キーを介して任意の行を読み書きできるようになります。 baas.supabase-rlsを参照してください。
  3. Open Firebase / Firestore rules. 生成されたルール ファイルでは、allow read, write: if true; が読み取られるか、ルール ファイル全体がスキップされることがよくあります。デフォルトのテストモード ルールは 30 日後に期限切れになり、データベースをロックしますが、これは開発者が気づいた場合に限られます。
  4. Hardcoded API keys in bundles. Stripe ライブ キー、Anthropic sk-ant-*、OpenAI sk-*、Google AIza*、AWS AKIA* キーは、env-var 規律が失われると JS ペイロードにインライン化されます。 secrets.browser-storage は、レンダリングされたページ レベルでフラグを立てます。
  5. Missing Content Security Policy. いいえ Content-Security-Policy 応答ヘッダーは、すべてのインライン スクリプト XSS が 1 クリックでアカウントの完全な乗っ取りを意味します。 CSP は抽象的です。 codegen は定期的にそれをスキップします。 headers.security-headers は、デプロイプラットフォーム固有の修正ガイダンスとのギャップを報告します。
  6. Next.js middleware misplacement. src/ レイアウトでは、Next.js は src/middleware.ts のみを選択します。ルートレベルの middleware.ts は暗黙的に無視されます。ページが requireAuth() を呼び出すため、認証はまだ機能しているように見えますが、ヘッダー、CSP、およびレート制限は適用されません。
  7. IDOR via unsigned IDs. 生成された GET /api/items/[id] ハンドラーは path パラメーターを信頼し、所有権を検証しません。整数または UUID 空間をたどると、すべてのテナントのデータが公開されます。
  8. Broken auth flows. expires_at のないマジックリンク トークン。 audexp をスキップする JWT 検証。サーバー側 getUser() の代わりに、クライアント側 getSession() を呼び出します (未検証の Cookie を読み取ります)。
  9. Debug endpoints in production. 生成された /api/debug/api/health/api/__nextjs_original-stack-frame、または /.next/trace ルート リーク内部。 discovery.platform-vercel は、SPA フォールバックでの誤検知を回避するために、コンテンツ検証を使用してそれらを調査します。
  10. Plaintext sensitive fields. パスワード、API キー、および PII は、移行が pgcrypto または外部ボールトに到達しなかったため、Postgres にプレーン テキストとして保存されました。

DAST と SAST: AI-生成されたコードにとって両方が重要な理由

静的解析 (SAST) と動的解析 (DAST) は補完的なものであり、代替品ではありません。分割は、手書きのコードよりも AI-生成されたコードの方が重要です。

SAST はディスク上のソース コードを読み取ります。ビルドが実行される前に、ソース ファイル内の秘密、危険な関数呼び出し、危険なパターンを検出します。ランタイム構成、デプロイされた環境変数、またはバンドラーがコードをどのように変換したかを確認することはできません。

DAST は、デプロイされたアプリケーションをユーザーと同様にヒットします。出荷された応答を確認し、本番バンドルに対して実行し、リポジトリとデプロイの間の構成のドリフトを捕捉します。トランスパイルされた JavaScript 内で、SAST がビルド時に process.env 割り当てを介して入力したために認識されなかったハードコーディングされたキーを検出します。

For AI-generated code, DAST is essential 出荷されるものはモデルが書いたものと異なるためです。バンドル、ツリーシェイキング、トランスパイル、環境変数のインライン化はすべて、新しいサーフェスを作成します。ソース上の SAST は、バンドルに埋め込まれたシークレットを完全に欠落する可能性があります。 DAST は両方のレイヤーをキャッチします。成熟したパイプラインは、デプロイされたプレビューに対して CI および DAST で SAST を実行します。これが FixVibe パターンです。

AI-コード スキャナーで何を探すか

ほとんどの汎用 DAST スキャナー (Burp Suite、OWASP ZAP、Nessus) は、モノリシック アプリと従来の認証フロー向けに設計されています。 Vercel + Supabase + Stripe AI- で生成されたアプリをスキャンするには、次のものが必要です。

  • BaaS coverage. Supabase RLS、Firebase / Firestore ルール、Clerk config、AWS Amplify、およびこれらのサービスが発行する JWT シェイプに対して実際のチェックを行います。一般的な OWASP ルールでは、何をフラグを立てるべきかがわかりません。
  • JS bundle inspection. API-key 形式、署名付きトークン、およびプロバイダー固有のパターン (Stripe sk_live_、Anthropic sk-ant-eyJ で始まる Supabase JWTs) 用に調整された正規表現。一般的なエントロピー ヒューリスティックでは、誤検知が多すぎます。
  • Passive + active split. パッシブ チェック (ヘッダー、Cookie、シークレット、BaaS 構成、DNS) は、あらゆる URL に対して安全に実行されます。アクティブ プローブ (SQLi、XSS、SSTI、IDOR ウォーキング) は、攻撃形式のペイロードを起動するため、承認境界が必要です。
  • Framework awareness. Next.js App Router と Pages Router を認識し、Vite SPA 書き換え、Vercel 導入保護、Cloudflare ページ ルーティング。 Vite SPA フォールバックと実際の /_next/build-manifest.json を区別しないスキャナーはノイズを生成します。
  • Rate-limit safety. スキャンごとの制限付きリクエスト バジェット、WAF-混乱を招く誤検知を回避するためのベースラインとレスポンスの比較、ブランケット 403 導入を検出するためのランダム化されたパスプローブ ベースライン。
  • Authorization gating for intrusive payloads. 所有していないドメインに SQLi または OS- コマンド ペイロードを送信することは、ほとんどの管轄区域で違法です。実際のスキャナでは、ターゲットに対してアクティブ モードを実行する前に、DNS または HTTP- ファイルの所有権を確認する必要があります。

FixVibe のアプローチ: 証拠に基づくスキャン、低い誤検知負荷

FixVibe is a DAST built specifically for AI-generated web apps. The passive phase runs 200+ checks on the rendered page (headers, CSP, cookies, leaked secrets, BaaS misconfiguration, tech fingerprinting, DNS, attack-surface discovery). The active phase adds payload-firing probes (SQLi, XSS, SSTI, CORS, redirects, IDOR walking, CSRF, account enumeration, blind-SSRF) gated behind verified-domain ownership. Repo scans add code-phase checks against connected GitHub repositories. Every finding includes evidence, a CWE link, a remediation recipe, and either a coding-agent prompt or operator steps depending on who can actually apply the fix. The scan engine is open in the changelog — every new check, accuracy improvement, and false-positive fix is logged publicly.

FixVibe vs Burp Suite、ZAP、Nessus: 各ツールが勝ったとき

すべてのワークフローを単一のツールでカバーできるわけではありません。 FixVibe が当てはまる場所の正直な枠組み:

Aspectげっぷスイート / OWASP ZAPネッスス / クアリスFixVibe
Setupプロキシとブラウザの手動構成ネットワークエージェントのインストールURLを貼り付けてサインインしてください
最初の発見までの時間数分から数時間数時間から数日数秒から数分
BaaS 設定チェックファーストクラスのサポートなしNoSupabase RLS、Firebase ルール、店員、JWT 図形
JS バンドル シークレットの検出一般的なエントロピー正規表現NoProvider 固有のパターン + ブラウザ ストレージ スキャン
AI-コーディングされたフレームワークの認識UnawareUnawareNext.js、Vite、Vercel、Cloudflare ページ、Supabase
アクティブスキャン認証ゲート手動スコープ規律手動スコープ規律必須: DNS または HTTP- ファイル ドメインの検証
ファーストクラス API + MCPAPI が存在しますAPI が存在しますREST + MCP クロード用サーバー / Cursor / Continue

ツールが相互に補完し合う場所

  • Start with FixVibe passive は、あらゆる展開プレビューに対する無料の 30 秒ベースラインとして使用できます。何も表面化していない場合は、すぐに信頼シグナルが得られます。
  • 独自のインフラストラクチャに対する完全なアクティブ カバレッジ (SQLi/SSTI/IDOR/etc.) が必要な場合は、検証済みドメインの Move to FixVibe active
  • Layer SAST (Semgrep、CodeQL、Snyk) の CI のソース コード。 SAST は、ランタイムが認識できないもの、つまりデプロイに到達しないコード パス内の危険なパターンを捕捉します。
  • Reach for Burp Suite カスタム攻撃チェーン (特定の認証バイパス、複雑な IDOR シナリオ、ビジネス ロジックの欠陥) が必要な場合。げっぷは、利用可能な最も深い手動作業台です。 FixVibe は、最も高速な自動ベースラインです。

次のステップ

Continue と Vibe coding security checklist を組み合わせて 44 項目の出荷前監査を行うか、How to secure an app built with AI coding tools にジャンプしてコード スニペットを使用して段階的に強化します。

// scan your app

読むのは終わりにして、自分のアプリの穴を見つけよう。

URL を追加 — FixVibe は、このガイドのすべてのパッシブ チェックに加え、他の 200 以上のチェックを 1 分以内に実行します。 Free、インストールもカードもありません。

  • Free 層 — 月あたり 3 回のスキャン、カードなし。
  • あらゆる URL に対するパッシブ スキャン - ドメイン検証は必要ありません。
  • Cursor、Claude Code、Lovable、Bolt、v0、Replit 用に調整されています。
  • Coding-agent prompts for code/config findings, plus operator steps for DNS/provider fixes.
無料スキャンを実行

サインアップ不要

AI 生成コードのセキュリティスキャン: vibe-coded アプリ向け DAST — Docs · FixVibe