TIP
← 記事

セキュリティ

AI生成コードの脆弱性混入率 — 「Vibe Coding」時代のセキュリティ品質を、実データで見る

2026/07/20

1. 実例:コードを一行も書かずに作られたアプリの情報漏洩

2025年7月、女性向けの安全マッチングアプリ「Tea」で、大規模な情報漏洩が発覚した。設定ミスのあったFirebaseのストレージバケットが認証なしでアクセス可能な状態になっており、運転免許証や自撮り画像を含む約7万2,000件のユーザー画像が流出。さらに5日後には、過去2年分にわたる110万件のダイレクトメッセージまで流出していたことが追加で確認されている。原因は「開発者用の管理画面が、ログインなしで誰でもアクセスできる状態になっていた」という、基本的なアクセス制御の欠落だった。

Teaは、いわゆる「Vibe Coding」(AIに自然言語で指示するだけでコードの大部分を生成させる開発スタイル。2025年2月にAndrej Karpathy氏が提唱し広まった用語)で開発されたと報じられている。スピード優先で作られたアプリが、基本的なセキュリティレビューを経ないまま公開されてしまう、という懸念を象徴する事例として、この事件は繰り返し引用されている。

2. 個別事例ではなく、プラットフォーム単位で見つかったパターン

Teaが単発の失敗事例だとすれば、「Vibe Coding」プラットフォームそのものに構造的な弱点があることを示したのが、CVE-2025-48757だ。Replit社のセキュリティ研究者Matt Palmerらが2025年3月20日に発見し、同年5月29日に公開した。対象は、AIへの指示だけでアプリを生成できるプラットフォーム「Lovable」(バックエンドにSupabaseを使う構成が標準)だ。

Lovableが生成するプロジェクトの多くで、データベースの行単位アクセス制御(Row Level Security、RLS)が有効化されていない、あるいは実質的に無効に等しい設定(USING (true)のような、誰にでも許可するポリシー)のまま生成されてしまうことが分かった。フロントエンドに埋め込まれた公開APIキーだけで、認証を経ずに任意のテーブルを直接クエリできる状態だ。研究者が1,645個のLovable製アプリを調査したところ、170個(全体の約10.3%)で、データベースが実質的に無防備な状態で公開されており、合計303個の脆弱なAPIエンドポイントが見つかったという。ユーザー一覧、決済記録、APIキーといった機微な情報が、ログインなしで読み書きできる状態だった。

この事例が重要なのは、「たまたま雑に作られた1つのアプリ」の話ではなく、AIが生成するデータベース設計そのものに、アクセス制御を省略しがちな系統的な傾向があることを、1,645件という規模で裏付けている点にある。

3. どのくらいの割合で、脆弱性が混入するのか

個別事例だけでなく、統計的にはどうなのか。セキュリティ企業Veracodeが2025年9月9日に公開した「GenAI Code Security Report」は、100以上のLLMを対象に、4つのプログラミング言語・80種類のセキュリティ関連コーディングタスクで検証した、現時点で最大規模級の調査の一つだ。

結果は次の通りだった。

  • 全体の45%のAI生成コードに、OWASP Top10に該当する脆弱性が混入していた(安全に書けていたのは55%のみ)
  • 言語別の合格率は、Java 29%(最悪)、C# 55%、JavaScript 57%、Python 62%(最良)
  • 脆弱性の種類別では、クロスサイトスクリプティング(XSS)で86%が失敗、ログインジェクションで88%が失敗。一方、SQLインジェクション(80%合格)や暗号化まわり(86%合格)は比較的守れていた
  • 人間が書いたコードとの比較では、AI生成コードはXSS脆弱性が2.74倍、安全でない直接オブジェクト参照が1.91倍、パスワード処理の不備が1.88倍という結果になった

つまり、AIは「よく知られた」「頻出する」脆弱性は避けられる一方、XSSやログインジェクションのような、出力のエスケープ処理やログ設計といった、地味だが手間のかかる対策は特に苦手にしている、という傾向が見える。

4. 「直してもらう」ほど、悪化するという逆説

Vibe Codingの実務でよくあるのが、「このコードをもっと良くして」「このバグを直して」とAIに繰り返し依頼しながら仕上げていく進め方だ。ここに、直感に反する研究結果がある。

論文「Security Degradation in Iterative AI Code Generation」(arXiv:2506.11022)は、400件のコードサンプルを、4種類のプロンプト戦略で40ラウンドにわたって反復的に改善させる実験を行い、わずか5回の反復改善の後、重大な脆弱性が37.6%も増加したと報告している。論文はこれを「改善のはずの反復が、逆に新しいセキュリティ問題を生み出すパラドックス」と呼んでおり、人間によるレビューを反復の間に挟むことの重要性を強調している。

「AIに繰り返し磨いてもらえば、コードの品質は上がっていくはずだ」という直感は、少なくともセキュリティの観点では裏切られる可能性がある、ということになる。

5. 速度と引き換えに失っているもの

TeaアプリのようなVibe Codingの実例と、Veracodeの大規模統計、そして反復生成のパラドックスという3つの角度から見えてくるのは、「AIが書くコードは、書けと言われた機能は実装できても、書けと言われていない防御(入力値のエスケープ、権限チェック、ログの安全な扱いなど)は自発的には実装しない」という傾向だ。

Vibe Codingそのものを否定する必要はない。プロトタイピングや社内ツール、資金調達用のMVP開発など、速度が最優先される場面では引き続き有効な手法だろう。ただし、そこで生成されたコードがそのまま本番環境に、しかも個人情報を扱うサービスとしてリリースされる場合、Teaの事例が示すように、基本的なアクセス制御ひとつの欠落が数百万件規模の情報漏洩に直結しうる。「動いた」ことと「安全である」ことは別の基準で確認する必要があるという、当たり前だが見落とされがちな一線を、あらためて引き直す時期に来ているのかもしれない。