AI生成のGitHub Copilot AutofixがSnowflakeのJira侵害を招く

GitHub CopilotによるAI生成の「Autofix」が、Snowflakeの公開リポジトリにスクリプト注入の脆弱性を導入し、その後、自律型AIセキュリティエージェントによって発見・悪用されました。この事案は、AIアシスタントがコードを簡素化するために安全なコーディングパターンを削除し、意図せずセキュリティホールを作成してしまうという、AI生成コードのデグレ(退行)に伴う重大なリスクを浮き彫りにしています。

脆弱性:AI主導のデグレ

2026年6月、Copilot Autofix powered by AI(PR #1218)によって共同作成されたコミットが、snowflakedb/snowflake-connector-netリポジトリにマージされました。AIアシスタントは、構造化データのパースにenv:変数とjqを使用していた安全なパターンを、GitHub Actionsワークフロー(jira_issue.yml)内のシェルスクリプトへの、Issueタイトルの直接的な文字列補完へと置き換えてしまいました。

この変更により、サニタイズされた入力パターンが、直接的なスクリプト注入ベクトルへと変貌しました。GitHub Issueのタイトルに含まれるシングルクォート一つで、echo '...'ブロックを脱出し、GitHub Actionsランナー上で任意のコマンドを実行することが可能になります。

悪用と自律的な発見

Wiz Researchの「Red Agent」という自律型AI搭載セキュリティツールは、脆弱なコードが導入されてから5日以内に、この脆弱性を特定し、悪用することに成功しました。

攻撃ベクトル

脆弱性はissues: openedイベントによってトリガーされました。ワークフローに、null値をチェックする不備のあるif:条件(github.event.pull_request.user.login != 'whitesource-for-github-com[bot]')があったため、セキュリティゲートが「フェイルオープン」状態となり、認証されていないユーザーでもワークフローをトリガーできるようになっていました。

自律的なペイロード調整

悪用プロセスにおいて、Red Agentは高度な自律能力を示しました。標準的なコメント文字(#)を使用してデータを持ち出す最初の試みが、bashの構文エラー(EOF)により失敗した際、エージェントはエラーを自律的に分析し、シェルブロックを適切に閉じるために; echo 'を使用するようにペイロードを調整しました。この調整により、エージェントはbase64エンコードされた認証情報を正常に持ち出すことに成功しました。

影響と修正

持ち出されたトークンはqa@snowflake.netとして認証され、攻撃者にSnowflakeの内部Jiraポータルへの読み取りアクセス権を与えました。これには、エンジニアリング、セキュリティコンプライアンス、およびバグバウンティ追跡プロジェクトが含まれます。

修正手順

Snowflakeは2026年6月23日にこの開示に対応し、以下の措置を講じました:

  • 即時パッチ適用: 脆弱なワークフローは、安全なenv: + jq --argパースパターンを復元するためにパッチが適用されました(コミット 1dc7766、PR #1402)。
  • 認証情報のローテーション: 侵害されたJiraトークンは無効化され、ローテーションされました。
  • フォレンジック検証: 監査ログにより、公開期間中に外部の第三者がエンドポイントにアクセスしたことは確認されませんでした。検出されたのはWizのテスト用IPのみでした。

技術的な教訓と業界の洞察

AIコード生成とレビュー

AIコーディングツールは確率的なパターンに基づいて動作しており、なぜ安全なパターンが選択されていたのかという歴史的な文脈を欠いていることがよくあります。この事案は、AI生成のPRが、人間が作成したコードと同じ、あるいはそれ以上に厳格なセキュリティレビューを受ける必要があることを強調しています。

"AIは変更を導入するコストを大幅に下げますが、一方で、それらの変更をレビューするコストはそれほど下がっていません。ボトルネックは、コード生成からコード検証へと移行しています。"

「LGTM」文化の危険性

コミュニティの議論では、危険なのはAIだけでなく、人間のレビューの失敗であると強調されています。PRを承認するだけの「Looks Good To Me」(LGTM)文化は、AIによってさらに悪化します。以前なら人間が無視していたであろう、価値の低いテクニカルデット(技術的負債)の修正が、大量にコードベースへとマージされるようになるからです。

AIエージェントへのガードレール

AIによるセキュリティのデグレを防ぐため、組織は、AIエージェントがシェルスクリプト内で構造化データパーサー(jqなど)を構造化データではない直接的な文字列補完に置き換えることを具体的にブロックするガードレールを実装すべきです。さらに、CI/CDパイプラインにおいて静的解析ツール(GitHub Actions用のzizmorなど)を使用することで、マージされる前にテンプレート注入の脆弱性を検出できます。

Sources

関連