GXO
サイバーセキュリティ

プロンプトインジェクションは運用ルールだけで防げない|CodeQLで発注コードを検査する100点仕様

9分で読める

QUICK CHECK

本文を読みながら、自社で進めるべきか、相談前に何を整理するかを確認できます。

5分で自社の状況を診断する

GXO COLUMN

サイバーセキュリティ

結論:プロンプト文面ではなく、未信頼データの流れを検査する

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層

横にスクロールして確認できます

確認内容代表的な証拠
Sourceuser、Web、RAG、email、API等の未信頼入力データフロー図、機密区分
Transform検証、構造化、分離、長さ・文字種・schema制約validation code、test
Sinksystem prompt、tool引数、SQL、外部送信CodeQL finding、code review
Impact読取、更新、削除、送信、決済、権限変更tool permission、approval、rollback

AI開発で起きる6つの失敗

  1. 禁止文をsystem promptへ追加して終わる。 未信頼入力との境界をコードで分離しません。
  2. チャット入力だけを攻撃面と考える。 RAG、Web、メール、添付、API値を信頼します。
  3. SASTを一度実行して完了にする。 query、SDK、モデル、コード変更後に再実行しません。
  4. finding件数だけ受領する。 sourceからsinkまでの経路と修正差分が残りません。
  5. 検出ゼロを安全証明にする。 実行時の間接prompt injectionや業務権限を試験しません。
  6. 開発会社の環境だけで検査する。 発注者が設定・結果・例外・版を再現できません。

FREE DOWNLOAD

AI導入チェックリスト(PoC 失敗要因 10項目)

情シス部門が PoC 前に押さえるべき失敗要因を10項目に整理した無料チェックリスト。

GXO式「AIコード受入5ゲート100点」

横にスクロールして確認できます

ゲート配点満点の証拠レッドフラグ
信頼境界20source、data owner、機密区分、正規化を図示入力はすべて文字列扱い
静的解析20CodeQL版、query、scope、finding、再現手順を保存「scan済み」の画面だけ
修正・レビュー20flow遮断、構造分離、差分、独立reviewを確認promptへ注意文を追加だけ
攻撃テスト25direct/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/20CodeQL結果はあるがquery版を未記録
修正・レビュー8/20「指示を無視しないで」を追記
攻撃テスト10/25チャット入力だけで添付HTMLを未試験
受入・継続7/15SDK更新時の再試験条件なし
合計49/100自動返信を停止し、分類下書きへ限定

メール本文はdata messageとして固定schemaへ格納し、system instructionと分離します。外部リンク・添付・HTMLは未信頼sourceとして処理し、分類結果は人が確認します。CodeQLと攻撃テストをCIの受入条件へ追加します。

RFP・契約・納品へ入れる10項目

  1. 未信頼sourceとAI/tool sinkのデータフロー図
  2. 使用するCodeQL bundle、query suite、version、対象language
  3. js/system-prompt-injectionを含む実行設定と対象branch
  4. finding一覧、source-to-sink path、severity、owner、期限
  5. 除外・抑制の根拠、承認者、有効期限
  6. 修正前後のcode diffと独立review記録
  7. direct/indirect prompt injectionのテストケース
  8. tool権限、引数validation、人承認、実行上限
  9. model、SDK、RAG、prompt、tool変更時の回帰試験
  10. 納品後のCritical対応SLA、再scan、保守責任

受入証拠パック

横にスクロールして確認できます

成果物最低限の内容
Flow mapsource、transform、sink、権限、owner
Scan manifestcommit SHA、branch、CodeQL/query版、設定
Finding register状態、根拠、修正、例外期限、承認
Attack testpayload種別、期待結果、実結果、証拠
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成果物を要求すれば、第三者レビュー可能な状態を作れます。

出典・確認日

検出対応API、query、severity、実験的機能、サポートlanguageは変更される可能性があります。本記事の配点と仮想例はGXO独自であり、CodeQL単独で安全性を保証するものではありません。

関連 HUB

この記事は以下の業種・悩み hub にも掲載されています。同じテーマの実務ナレッジと支援サービスをまとめてご覧いただけます。

お気軽にご相談ください

AI・DXに関するご質問やお見積もりなど

無料相談する

FREE DOWNLOAD

この記事と関連する 実践資料

費用相場、選定チェックリスト、補助金活用など、続きをより深く掘り下げた資料を無料でダウンロードできます(営業電話なし / 即DL / 社内共有OK)。

CONTACT

まずは 無料相談 から始めませんか。

サービスについてのご相談・ご質問などお気軽にお問い合わせください。
※ 営業電話はしません | オンライン対応可 | 相談だけでもOK