Copilot AutofixがSnowflake Jiraの認証情報を露出、AIが5日で侵入を実証

AIが生んだセキュリティ退行を別のAIが5日で発見し、Snowflakeの社内Jira認証情報を取得できるところまで実証した。Wiz Researchの公開報告によると、GitHub Copilot Autofixが共同作成したSnowflakeの公開リポジトリの変更は、安全な入力処理を削除し、攻撃者が操作できるIssueタイトルをシェルスクリプトへ直接展開していた。認証されていないGitHubユーザーでも、細工したIssueを開くだけでGitHub Actionsランナー上の任意コマンド実行を狙える状態だった。

欠陥はsnowflakedb/snowflake-connector-netのjira_issue.ymlワークフローに入った。2026年6月18日のPR #1218は、Issueタイトルをenv変数で渡し、jq --argでJSONを組み立てる既存方式を削除した。代わりに${{ github.event.issue.title }}をrun:ブロックへ直接挿入した。引用符を処理するsedはGitHubのテンプレート展開後に動くため、タイトル内のシングルクォートでシェル文字列を抜け、コマンドを注入できた。

防御に見えた条件式も門番にならなかった。ワークフローはIssue作成時に起動する一方、条件はIssueイベントに存在しないgithub.event.pull_requestを参照していた。この値は常にnullで、比較結果は全ユーザーに対して真となる。公開入力と社内連携用シークレットが、同じ自動化経路で接触してしまった。

Wiz Red AgentはSnowflakeのGitHub組織を走査してこのパターンを検出し、悪用可能性を自律的に検証した。最初のペイロードがBashの構文エラーになると、エラーを解析してシェル式の閉じ方を修正し、GitHub Actionsランナーから外部コールバックを受信した。取得したトークンはqa@snowflake.netとして認証され、エンジニアリング、セキュリティ準拠、バグ報奨金に関するSnowflake社内Jiraプロジェクトを読み取れた。発見、攻撃の再現、影響範囲の評価まで人の介入なしで進んだとWizは説明する。

Wizは6月23日にHackerOne経由で報告し、Snowflakeは同日中に安全なenvとjq --argの方式を復元した。Jiraトークンは6月24日に交換された。5日間の露出期間を調べた監査ログでは、Wizの検証用IP以外からアクセスされた証拠はなかった。Wizも概念実証で取得したデータをすべて削除したとしている。

焦点はCopilotの一度の誤りより、変更を通したレビュー工程にある。過去にセキュリティ上の理由で選ばれた実装をAIが単純な整理対象と判断すれば、自動修正が権限境界を消す可能性がある。AIが書いたPRにも人間の変更と同じ静的解析とセキュリティ審査が必要であり、構造化パーサーを直接文字列展開へ変える差分は自動検知すべきだ。攻撃側エージェントが発見期間を時間単位へ縮めるなか、短命な認証情報と迅速なローテーションは標準の防御策になる。