結論:プロンプト文面ではなく、未信頼データの流れを検査する
GitHubは2026年7月10日、CodeQL 2.26.0にJavaScript/TypeScript向けのjs/system-prompt-injection queryを追加したと発表しました。未信頼のユーザー入力がAIモデルのsystem promptへ流れ、攻撃者にモデルの振る舞いを操作される可能性を検出します。
OpenAI、Anthropic、Google GenAI SDKの追加APIもprompt injection sinkとしてモデル化されたと説明されています。対象には、system instructions、cached content、Realtime session instructions等が含まれます。
重要なのは、CodeQLを入れれば安全という話ではありません。静的解析はコード上の既知のデータフローを見つける一手段です。RAG文書、Webページ、メール、添付ファイル、MCPの戻り値、実行時に組み立てるprompt、tool権限まで含めて検証します。
この記事は、生成AI・RAG・AIエージェントの開発を外注する経営者、CTO、情シス、受入責任者向けです。
FREE CONSULTATION
この記事の内容について、専門家に相談できます
AI・DX・セキュリティに関するご質問やお見積もりなど、お気軽にお問い合わせください。
発注者が分けて確認する4層
横にスクロールして確認できます
| 層 | 確認内容 | 代表的な証拠 |
|---|---|---|
| Source | user、Web、RAG、email、API等の未信頼入力 | データフロー図、機密区分 |
| Transform | 検証、構造化、分離、長さ・文字種・schema制約 | validation code、test |
| Sink | system prompt、tool引数、SQL、外部送信 | CodeQL finding、code review |
| Impact | 読取、更新、削除、送信、決済、権限変更 | tool permission、approval、rollback |
AI開発で起きる6つの失敗
- 禁止文をsystem promptへ追加して終わる。 未信頼入力との境界をコードで分離しません。
- チャット入力だけを攻撃面と考える。 RAG、Web、メール、添付、API値を信頼します。
- SASTを一度実行して完了にする。 query、SDK、モデル、コード変更後に再実行しません。
- finding件数だけ受領する。 sourceからsinkまでの経路と修正差分が残りません。
- 検出ゼロを安全証明にする。 実行時の間接prompt injectionや業務権限を試験しません。
- 開発会社の環境だけで検査する。 発注者が設定・結果・例外・版を再現できません。
FREE DOWNLOAD
AI導入チェックリスト(PoC 失敗要因 10項目)
情シス部門が PoC 前に押さえるべき失敗要因を10項目に整理した無料チェックリスト。
GXO式「AIコード受入5ゲート100点」
横にスクロールして確認できます
| ゲート | 配点 | 満点の証拠 | レッドフラグ |
|---|---|---|---|
| 信頼境界 | 20 | source、data owner、機密区分、正規化を図示 | 入力はすべて文字列扱い |
| 静的解析 | 20 | CodeQL版、query、scope、finding、再現手順を保存 | 「scan済み」の画面だけ |
| 修正・レビュー | 20 | flow遮断、構造分離、差分、独立reviewを確認 | promptへ注意文を追加だけ |
| 攻撃テスト | 25 | direct/indirect injection、tool abuse、exfiltrationを試験 | 正常系だけ |
| 受入・継続 | 15 | 重大欠陥、例外期限、再scan、model/SDK変更条件 | 納品後の責任者不在 |
合計点に関係なく受入を止める条件
- 顧客入力や外部文書をsystem promptへ連結している
- model出力を無検証でshell、SQL、送信、削除、決済へ渡す
- CodeQL設定、query版、対象branch、結果を発注者へ渡さない
- Critical/High findingを「AIの誤検知」として証拠なく除外する
- 本番権限を使った攻撃テストしかなく、安全な検証環境がない
仮想記入例:問い合わせ分類AI
横にスクロールして確認できます
| ゲート | 得点 | 不足 |
|---|---|---|
| 信頼境界 | 10/20 | メール本文と署名をsystem promptへ連結 |
| 静的解析 | 14/20 | CodeQL結果はあるがquery版を未記録 |
| 修正・レビュー | 8/20 | 「指示を無視しないで」を追記 |
| 攻撃テスト | 10/25 | チャット入力だけで添付HTMLを未試験 |
| 受入・継続 | 7/15 | SDK更新時の再試験条件なし |
| 合計 | 49/100 | 自動返信を停止し、分類下書きへ限定 |
メール本文はdata messageとして固定schemaへ格納し、system instructionと分離します。外部リンク・添付・HTMLは未信頼sourceとして処理し、分類結果は人が確認します。CodeQLと攻撃テストをCIの受入条件へ追加します。
RFP・契約・納品へ入れる10項目
- 未信頼sourceとAI/tool sinkのデータフロー図
- 使用するCodeQL bundle、query suite、version、対象language
js/system-prompt-injectionを含む実行設定と対象branch- finding一覧、source-to-sink path、severity、owner、期限
- 除外・抑制の根拠、承認者、有効期限
- 修正前後のcode diffと独立review記録
- direct/indirect prompt injectionのテストケース
- tool権限、引数validation、人承認、実行上限
- model、SDK、RAG、prompt、tool変更時の回帰試験
- 納品後のCritical対応SLA、再scan、保守責任
受入証拠パック
横にスクロールして確認できます
| 成果物 | 最低限の内容 |
|---|---|
| Flow map | source、transform、sink、権限、owner |
| Scan manifest | commit SHA、branch、CodeQL/query版、設定 |
| Finding register | 状態、根拠、修正、例外期限、承認 |
| Attack test | payload種別、期待結果、実結果、証拠 |
| Acceptance | 未解決risk、残余risk、停止条件、署名 |
30日で発注基準へ入れる順序
- 1週目:既存AI機能のsource、prompt、tool、外部送信を棚卸し
- 2週目:CodeQL 2.26.0以降を検証環境で実行し、重大flowを修正
- 3週目:RAG、Web、メール、添付、MCPを使った攻撃テスト
- 4週目:RFP、CI、受入判定、保守契約へ証拠要件を反映
GXOの生成AIセキュリティでは、prompt、RAG、MCP、tool、権限を一体で診断します。発注仕様・見積・納品条件の第三者確認はシステム開発セカンドオピニオン、コード全体の技術検査は脆弱性診断へ接続します。
FAQ
CodeQLのqueryが0件なら安全ですか
いいえ。対象language、query、build、実行時データ、間接攻撃、tool権限など検出範囲外が残ります。動的な攻撃テストと業務統制を併用します。
system promptを外部入力から分ければ十分ですか
重要な一歩ですが、RAG contextやtool outputに攻撃指示が混ざる場合もあります。入力分離、出力validation、最小権限、人承認が必要です。
発注者にソースコードの知識がなくても確認できますか
scan manifest、flow map、finding register、attack test、受入署名の5成果物を要求すれば、第三者レビュー可能な状態を作れます。
出典・確認日
- GitHub「CodeQL 2.26.0 adds Kotlin 2.4.0 support and AI prompt injection detection」(2026年7月10日発表、7月14日確認)
- OWASP GenAI Security Project(2026年7月14日確認)
- AIブラウザエージェントAutoJackの安全設計
検出対応API、query、severity、実験的機能、サポートlanguageは変更される可能性があります。本記事の配点と仮想例はGXO独自であり、CodeQL単独で安全性を保証するものではありません。







