0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubが低品質AIコードを拒否し始めた — AI生成コードのセキュリティリスクを93ルールでスキャンした結果

0
Posted at

GitHubの決断

GitHubが低品質なAI生成コードによるContributeを拒否する仕組みを検討・実装中だというニュースが話題になっています。

同時期に、AI評価機関METRが「SWE-benchのテストに合格したPRでも、人間のレビュアーはマージを拒否する」という調査結果を発表しました。

テストが通る ≠ 本番に出せるコード

この当たり前のことが、AI生成コードの時代に改めて突きつけられています。

実際にAI生成コードをスキャンして分かったこと

私はここ2週間、AI生成コードに特化したセキュリティスキャナー「CodeHeal」を開発しています。14カテゴリ・93ルールの静的解析エンジンで、LLMは一切使わず、パターンマッチと正規表現だけで検出します。

開発中に実際のAI生成コードをスキャンして気づいたのは、テストでは絶対に見つからない脆弱性パターンが大量に存在するということでした。

パターン1: 「動くけど危険な」シークレット管理

// AIが生成しがちなコード
const API_KEY = "sk-proj-abc123...";
const response = await fetch(url, {
  headers: { Authorization: `Bearer ${API_KEY}` }
});

テストは通ります。アプリも動きます。でもAPIキーがソースコードにハードコードされています。

最初のスキャン精度テストで6ファイルを通したとき、2ファイルでルールのバグを発見しました。1つはrm -rfの変数展開が未クォートのケース、もう1つはfetch()のURL検証漏れ。修正後に全6ファイルが正しく検出できるようになりましたが、ルールを書く側も見落とすレベルの微妙な問題がAI生成コードには潜んでいます。

パターン2: 過剰に寛容なCORS設定

// Express/Next.jsでAIが頻繁に生成するパターン
app.use(cors({ origin: '*' }));

開発環境では問題なく動きます。テストも通ります。でも本番環境でこれは、任意のドメインからAPIを叩ける状態です。

パターン3: パラメータ化されていないSQLクエリ

// テンプレートリテラルでの直接埋め込み
const result = await db.query(
  `SELECT * FROM users WHERE id = ${userId}`
);

テストデータはクリーンなので通ります。本番でuserId1 OR 1=1が来たら全データ流出です。

パターン4: 入力バリデーションの欠如

AI生成コードは「ハッピーパス」を完璧に実装します。でも信頼境界でのバリデーションが抜けがちです。文字列長のチェック、型の検証、サニタイズ処理 — テストでは正常値しか渡さないので問題が顕在化しません。

なぜ既存ツールでは不十分なのか

開発の最初の1週間、SemgrepとESLintでAI生成コード特有のパターンを検出できないか試しました。結論: できなくはないが、ルール設計の前提が違う

既存のSASTツールは「人間が書くコードのパターン」を前提に設計されています。経験のあるエンジニアが書くミス(バッファオーバーフロー、既知のCVE)は得意ですが、AI特有の「表面上は正しいが意図が危険な」パターンへの対応は限定的です。

例えば:

  • 難読化コード検出: 人間の悪意あるコードだけでなく、AIが「最適化」と称して生成する読みにくいコードも検出する必要がある
  • 同意ギャップ検出: コードの説明と実際の動作が乖離しているケース(AIのハルシネーション由来)
  • メタデータ品質: package.jsonの不審な設定、存在しないリポジトリURLなど

これらはAI生成コード特有の問題で、従来のセキュリティスキャナーの守備範囲外です。

Google Wiz買収が示すもの

今週、GoogleがセキュリティスタートアップWizの買収を正式に完了しました。評価額は約320億ドル(約5兆円)。セキュリティ市場はAIの普及に比例して急拡大しています。

日本市場に目を向けると、AI生成コードに特化した日本語対応のセキュリティスキャナーは現時点で存在しません。Snyk、SonarQube、Semgrep — いずれも優れたツールですが、AI生成コード特化という切り口はありません。

数字で見る現状

CodeHealの検出エンジンの現在のスペック:

項目 数値
検出カテゴリ 14
検出ルール数 93+
精度テスト合格率 6/6 (100%)
LLM使用 なし(静的解析のみ)
API費用 $0
再現性 100%(同じコード → 同じ結果)

LLMを使わない理由は単純で、再現性が欲しかったからです。LLMベースのスキャンは実行するたびに結果が変わります。5回スキャンして5回とも違う結果が返ってきたとき、「これはセキュリティツールとして根本的に破綻している」と気づきました。


コードをスキャンしてみませんか?

AI生成コードを本番に出す前に、テストでは見つからない脆弱性パターンをチェックできます。無料でスキャン可能です。

CodeHeal — AI生成コード特化セキュリティスキャナー
無料でスキャンする →

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?