OpenAI Codex SecurityがSASTレポートを採用しない理由

SAST の限界

データフロー追跡だけでは不十分
サニタイザー存在と安全性は別問題
変換チェーン後の制約維持が課題
順序・正規化の不整合が実際の脆弱性

エージェント型検証の設計

リポジトリ構造と脅威モデルから出発
z3ソルバーで制約充足を形式検証
サンドボックスでPoC実行検証
トリアージ前に証拠を確立

SAST起点を避ける理由

既存結果への早期収束リスク
暗黙の前提が推論を歪める
詳細を読む

OpenAIは自社のコードセキュリティ製品「Codex Security」において、従来の静的解析(SAST)レポートを起点としない設計を採用しました。代わりにリポジトリのアーキテクチャ、信頼境界、意図された動作から分析を開始し、人間に報告する前に検証を行う方針です。

SASTは入力源から危険なシンクまでのデータフロー追跡に優れますが、実際のコードベースでは間接呼び出しやリフレクション、フレームワーク固有の制御フローにより近似処理が必要になります。より根本的な問題は、サニタイザーが存在しても、その制約が変換チェーン全体で維持されるかを判定できない点にあります。

具体例として、JSONペイロードから取得したリダイレクトURLに対し正規表現チェック後にURLデコードを行うパターンがあります。CVE-2024-29041ではExpressにおいて、不正なURLがデコード・解釈の過程で許可リストを迂回できる脆弱性が発見されました。データフローは明白でも、変換後に検証が有効かが真の問題でした。

Codex Securityはコードパスをセキュリティ研究者のように読み、検証と実装の不一致を探します。最小のテスト可能な単位に分解してマイクロファザーを生成し、Python環境のz3ソルバーで制約充足問題として形式化することも可能です。サンドボックス環境でエンドツーエンドのPoCを実行し、疑惑と確証を区別します。

SASTレポートを起点としない理由は3つあります。第一に、既存の検出結果が探索範囲の早期収束を招きます。第二に、SASTが内包する暗黙の前提が推論を歪め、調査ではなく確認作業に陥ります。第三に、エージェント自身の発見能力の評価が困難になり、システム改善の妨げとなります。