Vibeコーディングを検証:AIエージェントはSQLiを回避するが、セキュリティ制御では惨敗

Vibeコーディングが生み出すのは「キュレートの卵」的なプログラムだ。部分的には良いが、悪い部分がプログラム全体に影響する。

Vibeコーディング、つまりAIを使ってコンピュータコードを生成する手法は、ますます人気が高まっている。AIへのプロンプトを書けるユーザーなら誰でも、プログラムも書けるようになる。Vibeコーディングは開発スピードを上げ、企業のコストを削減する――しかし、vibeコーディングされたアプリの即時的な有効性や長期的なセキュリティをめぐる疑問は、依然として残っている。

Tenzaiは、主要なAIコーディングエージェント5種(Anysphere Cursor、Claude Code、OpenAI Codex、Replit、Cognition Devin)をテストし、どれが最良で、何が問題になり得るのかを明らかにしようとした。 

各エージェントには、同一のプロンプトを同一の条件で与え、同じ3つのアプリを構築させた――そして15の出力を比較した。Tenzaiは合計69件の脆弱性を発見し、その深刻度はクリティカルから高、低または中まで幅広かった。

概して言えば、vibeコーディングは、良いコーディング慣行が十分に確立されている領域――つまり「やるべき/やってはいけない」のルールが明確な領域――では問題を回避するのが得意なようだ。生成されたアプリのいずれにも、悪用可能なSQLiやXSSの脆弱性は含まれていなかった。

一方で、特定の解決策がない問題では得意ではない。認可はその一例で、基本要件は満たすものの、認可ロジックが複雑になると弱くなる。「私たちが遭遇した最も一般的な問題の一つは、APIにアクセスする際の不適切な認可でした」とTenzaiはコメントしている。これは懸念材料であるべきだ。APIは長年、サイバー犯罪者にとっての主要な標的であり続けている。

SSRFも別の例だ。Tenzaiはテストの一つに「SSRFの落とし穴」を組み込んだ。「結果は全会一致でした――5つのエージェントすべてがSSRF脆弱性を導入し、攻撃者が任意のURLへのリクエストを呼び出せるようになっていました。」

ビジネスロジック――人間にとっての常識――も弱い。AIコーディングは、指示されたことしか扱えないのだから、これはそれ自体驚くことではない。AIの文脈理解は一度きりのvibeコーディング用プロンプトで導入されるものではなく、時間をかけて学習されるものだ。テストでは、プロンプトに「店舗の注文は正の値でなければならない」と明記されていない場合、5つのうち4つのエージェントが負の注文を許可した。同様に、5つのうち3つのエージェントは、負の価格を持つ商品の作成を許可した。

これはプロンプトの不備と分類できるかもしれないが、プログラミングの厳密さについて訓練を受けていないスタッフによるvibeコーディングの利用が増えるにつれて、増加しそうな種類のエラーを示唆している。

Tenzaiが最も懸念したのは、エージェントが省略したもの――セキュリティ制御だった。「私たちが実施したあらゆるテストにおいて、すべてのコーディングエージェントはセキュリティ制御に関して惨憺たる失敗をしました。実装を間違えたというより、ほとんどのケースでは――そもそも試みすらしなかったのです。」

Tenzaiのテストは、現在のvibeコーディングが完璧なコードを提供しないことを示唆している。とりわけ、非常に詳細で正確な入力プロンプトが必要だ。これは生成されるアプリの品質を高めるだろうが、本番投入可能な出力を保証するものではない。さらに、訓練を受けていないvibeコーダーが、求められるレベルの厳密さを備えていると期待すべきではない。

Vibeコーディングはなくならない。ビジネスで競争優位を維持するためのスピード需要に加え、有資格のプログラマーを雇うのではなく既存スタッフを活用することによるコスト削減があるため、人気は必然的に高まるだろう。コーディングエージェントは時間とともに改善するが、あらゆる状況のあらゆるアプリに対して完璧になることは決してない。

Tenzaiのテストでは、生成された15のアプリから69件の脆弱性が見つかった。Tenzaiは自社の脆弱性プロダクトで、これらの脆弱性を迅速に発見した。おそらく私たちは、vibeコーディングにvibeテストを追加する方向へ進む必要があるのかもしれない。

翻訳元: https://www.securityweek.com/vibe-coding-tested-ai-agents-nail-sqli-but-fail-miserably-on-security-controls/

ソース: securityweek.com