はじめに
AWS Security Agent は、開発ライフサイクル全体でアプリケーションを保護する AI エージェントです。主に以下の3つの機能を提供します:
- Design security review – 設計ドキュメントのセキュリティレビュー
- Code security review – Pull Request のコードレビュー
- Penetration testing on-demand – オンデマンドペネトレーションテスト
今回は、この中の Code security review 機能(GitHub PR に対する自動セキュリティレビュー)を検証しました。「OWASP Top 10 の脆弱性を検出できる」という触れ込みですが、実際に試してみるとかなり挙動が不安定でした。
検証環境
- リポジトリ: https://github.com/skurihara-cw/todo-api
- 技術スタック: FastAPI + Python
- 検証方法: 意図的に脆弱性を含むコードを PR で追加
試した脆弱性と検出結果
1. ハードコードされたシークレット
# Hardcoded secrets - VULNERABLE
API_KEY = "sk-1234567890abcdef"
AWS_SECRET = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
結果: ✅ 検出された(ただし遅延あり)
最初のコミットでは「No issues identified.」と表示されましたが、後続のコミット(コマンドインジェクション追加時)のスキャンで突然検出されました。

↑ 1st commit: シークレット追加時は「No issues identified.」

↑ 3rd commit: コマンドインジェクション追加時に突然シークレットが検出される
2. SQL インジェクション
@app.get("/search")
async def search_todos(query: str):
# ユーザー入力を直接 SQL クエリに埋め込み
cursor.execute(f"SELECT * FROM todos WHERE title LIKE '%{query}%'")
results = cursor.fetchall()
return results
結果: ❌ 検出されず
典型的な SQL インジェクション脆弱性ですが、Security Agent は完全にスルーしました。

↑ SQL インジェクションのコミット後も「No issues identified.」
3. コマンドインジェクション
@app.post("/ping")
async def ping_server(host: str):
# shell=True + ユーザー入力の直接埋め込み
result = subprocess.run(f"ping -c 1 {host}", shell=True, capture_output=True)
return {"output": result.stdout.decode()}
結果: ❌ 検出されず
shell=True を使った危険なコマンド実行も検出されませんでした。
気になった点:挙動の不安定さ
1. スキャンタイミングの謎
ハードコードされたシークレットは最初のコミットでは検出されず、3つ目のコミット(コマンドインジェクション追加時)で突然検出されました。
- 1st commit: シークレット追加 → No issues identified.
- 2nd commit: SQL インジェクション追加 → No issues identified.
- 3rd commit: コマンドインジェクション追加 → シークレットが検出される
推測:
- 差分スキャンではなく、PR 全体を再スキャンしている?
- スキャンのトリガータイミングが不安定?
- 非同期処理で遅延が発生している?
2. ダミー値の判定ロジック?
使用したシークレット値:
API_KEY = "sk-1234567890abcdef" # OpenAI API キー風
AWS_SECRET = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" # AWS 公式ドキュメントのサンプル値
最初は検出されなかったことから、以下の可能性が考えられます:
- エントロピー(ランダム性)が低い値は除外される
sk-1234567890abcdefは明らかに連番EXAMPLEKEYという文字列が含まれている
- AWS 公式ドキュメントのサンプル値はホワイトリスト化されている
- 初回スキャンでは軽量チェックのみ、後続で詳細スキャン
3. OWASP Top 10 への対応は限定的
公式には「OWASP Top 10 関連の脆弱性を検出」とありますが、実際には:
- ✅ ハードコードされたクレデンシャル: 検出可能(遅延あり)
- ❌ SQL インジェクション: 検出されず
- ❌ コマンドインジェクション: 検出されず
- ❓ XSS、CSRF、認証不備など: 未検証
推測:
- シークレットスキャンに特化している
- 動的解析ではなく静的パターンマッチング
- Python の
sqlite3やsubprocessは検出パターンに含まれていない可能性
Security Agent の指摘内容(検出された場合)
検出された際のフィードバックは非常に詳細でした:

↑ 検出時の詳細なフィードバック(問題点、重要性、推奨対策、参考リンク)
The application contains hardcoded API credentials and AWS secrets
directly in the source code, which poses a critical security risk...
Recommendation:
- Remove hardcoded secrets and load them from environment variables
- Use AWS Secrets Manager, HashiCorp Vault, or Azure Key Vault
- Refer to: <https://owasp.org/www-community/vulnerabilities/Use_of_hard-coded_password>
修正方法や参考リンクまで提示してくれるのは良い点です。
まとめ
良かった点
- ハードコードされたシークレットは検出できる
- 検出時のフィードバックが詳細で実用的
- GitHub PR に自動コメントされるので気づきやすい
気になった点
- 挙動が不安定(スキャンタイミングが予測不能)
- 検出範囲が限定的(SQL/コマンドインジェクションは未検出)
- ダミー値の扱いが不明瞭(最初は検出されず後で検出)
参考リンク
- 検証用リポジトリ: https://github.com/skurihara-cw/todo-api
- OWASP Top 10: https://owasp.org/www-project-top-ten/
免責事項: この記事は教育目的での検証結果です。実際の本番環境では絶対に脆弱なコードを使用しないでください。