\n
ブログに戻る
この文章は
AIセキュリティエージェント対エージェントサプライチェーンCI/CDCopilot Autofix説明責任WizSnowflake

AIがAIのバグを突いた日

August 19, 202615 min read

鏡を挟んで向き合う二つの AI シルエット。片方の額には薄い「?」、もう片方には薄い「✓」。藍と冷青のインク調で、印が鏡の継ぎ目で出会う一点にだけ橙色のアクセント。

AIがAIのバグを突いた日

「テック系プレスリリース」とも「個人のエッセイ」とも分類しづらい種類のニュースがある。ただ頭の中に残り続ける、ああいう類のやつだ。

2026年8月19日、セキュリティ企業のWiz(Google Cloud傘下)が、ここ数ヶ月じわじわと業界を蝕んでいたある事件について、報告書を公開した。

彼らの自律型AIエージェント、Red Agentが、Snowflakeの公開GitHubリポジトリに重大なスクリプトインジェクションの脆弱性を発見した。そして——人間からの指示をまったく受けずに——その脆弱性を突き、CI/CDパイプラインを奥へ進み、内部データへのアクセス権を検証し、SnowflakeのJira環境まで到達した。

バグが公開されてから、わずか5日。人間の誰もスイッチを入れていない。

I. バグそのものはAIが書いた

ここが、この話を私の中で決定的にした部分だ。

その欠陥は、夜中に疲れたエンジニアが残したタイプミスではなかった。

2026年6月18日にGitHub Copilot Autofixが生成した修正によって持ち込まれた。生成されたパッチは、GitHub Actionsのrun:ブロック内に、信頼できない入力をそのまま流し込んでいた。対象ファイルはjira_issue.yml

ワークフローファイルを書いたことがある人なら、このパターンはお馴染みだろう。ユーザーから制御可能な文字列をシェルコマンドに流し込めば、コマンドインジェクションになる。最初に「やってはいけない」と教わる類のものだ。

つまり、修正を依頼されたAIコーディングアシスタントが、スクリプトインジェクションの穴をそのままSnowflakeのCI/CDに開けてしまった

Snowflakeは6月23日にこの問題を修正した——5日後。

その間、バグは曝露されたままだった。

II. そして今度はAIの防御側が見つけた

Wiz Researchは、Red Agentを顧客の、あるいは公開されているリポジトリに対して、常時稼働する自律スキャナとして運用している。Snowflakeのjira_issue.ymlに降り立ったRed Agentは、人間のレビュアーなら同じように指摘するはずのパターン——run:ブロックに信頼できない入力が流れる構造——を検知した。

しかしRed Agentは、検知して終わり、ではなかった。

Red Agentは:

  • 概念実証エクスプロイトを組み立て

  • 実行し

  • 失敗することを確認し

  • 失敗の原因を診断し

  • 再試行し

  • 今度は成功し

  • アクセス経路を辿ってJiraの奥まで入り

  • 影響範囲を評価した
  • それを、すべて「実行してくれ」と人間に言われずに行った。

    ここが、私が思っていた以上に重かった部分だ。ラボのベンチマークでAIエージェントが脆弱性を突く話は読んだ。「一度目の失敗」「その診断」「再試行」「成功した連鎖的侵入」を、平易な文章で、本番環境に対して記述したものを読むのは、これが初めてだった。

    III. 5日。そして公開開示。そして「誰が何をしていたか」を巡る争い

    Snowflakeは6月23日——5日後——に問題を修正した。

    Wizは、自社の開示の中で、その5日間にバグに触れたのは自分たちだけだったと確認した。

    しかしここから先は、居心地が悪くなる。

    Wizのブログによると、GitHubのAIはその変更をレビューし、承認した。時系列を素直に読めば、AIがbad codeを書き、AIレビューツールが承認し、外部から攻撃してきた別のAIだけが欠陥を見つけた、ということになる。

    GitHubはこれを否定した。公開声明は実質、「うちのAIはこれを見ていない」だった。

    これで、私たちは同じレビューログについて、2社が違うことを言っている状態になった。

    ログを保有しているのは1社だけだ。

    IV. 「誰のせいにもならない」が三重に積み上がる

    私はこの事件の形について、ずっと考えている。剥がせば剥がすほど、同じ議論が顔を出すからだ。

    第1層:著者は人でなかった。
    AIがパッチを生成した。パターンを見落として変更を流し込んだエンジニアは存在しない。そもそも人間のエンジニアは工程にいなかった。

    第2層:レビュアーも人でなかった。
    Copilot Autofixが自分の修正に対して自分でコードレビューを走らせ、それを承認したのだとすれば、それは1つのモデルが別のモデルの出力をレビューするという、特に脆い構成だ。もし一度も走らなかったなら、AIが書いた変更が人間の目を通らず本番に出た理由を問わなければならない。

    第3層:防御側も人でなかった。
    バグを発見したのは、防御の監視ではなく、攻撃側のAIだった。こうして全工程——著者、レビュアー、攻撃者——が完全にマシンのみになる。Fortuneクラスに入るSaaS企業の自社CI/CDが5日間曝露された状態で、世界が最初に受け取ったシグナルは、外部の第三機関スキャナを走らせたAIからのものだった。

    では、この5日間の曝露の説明責任は、誰が取るのか。

    エンジニアだけの世界なら、答えはこうだ:パッチを書いた人、PRを承認した人、リポジトリを所有するチーム、そしてセキュリティチーム。それぞれが変更を読んで、パターンを視認できた。

    エージェントが書き、エージェントがレビューし、エージェントが発見する世界では、「気づかなかった人」は「そもそもそこにいなかった人」になる。

    V. 新しい脅威モデルは「AIが人間を攻撃する」ではない。「AIがAIを攻撃する」ものだ

    ここ1年で読んだAIセキュリティの論考は、だいたい2種類だった:

  • 「悪い人間がAIを使って、良い人間を攻撃する」

  • 「AIアシスタントが、良い人間が悪い人間から身を守る手助けをする」
  • 今回の事件は、そのどちらでもない。

    これはAI対AIだ。自律エージェントが、別のAIが導入した脆弱性を見つけ、突き、その連鎖の奥へと進む。レビューを行ったかもしれない、しなかったかもしれない、3つ目のAIを用いて。

    攻撃の両側に、人間の敵はいない。明らかな標的になっている人間の被害者もいない。あるのは、AIが書いた穴と、AIが主張する承認と、AIが主張する発見だけ。

    ループにいる唯一の人間は、8月下旬にその開示文を読み、「実際に何が起きたのか」を把握しようとしている、SnowflakeのCISOだ。

    VI. 「ログを保有しているのは1社だけ」が、誰にとっても脅威であるべき理由

    この事件の中に、何年も引用され続けるだろう一節がある。

    ログを保有しているのは1社だけだ。

    GitHubはこう言っている:自AIがこの変更をレビューしたという記録は、我々にはない

    Wizはこう言っている:しかし我々は、レビューされたと考えている

    両社が真実を語っているなら、AIレビューは「動かなかった」、もしくは「動いたがログを残さなかった」のどちらかになる。どちらの答えも悪い。

    Wizの読みが正しければ、GitHubのAIはFortuneクラスのSaaS企業の公開CI/CDに対するセキュリティ上の後退を沈黙のうちに承認したことになる。そして我々には、それがAIのログを残さなかったために、わからない。

    どちらにせよ、監査証跡は消えた

    このことの方が、バグ自体よりも心配だ。バグは5日間で終わる。なくなった監査証跡は、永続する。

    VII. 今週中にすべてのチームがやるべき小さなこと

    もしあなたのチームがGitHub Copilot Autofix、あるいは何らかのAI支援コードレビューを使っているなら、今週中にこの3つをやってほしい。机上の空論ではなく、テーブルステークスになった話だ。

  • AIが書いたPRにも、人間の承認ゲートが要ることを再確認する。 すべてのリポジトリでブランチ保護ルールを確認する。Copilot Autofixが著者のときに、「Code Ownersからのレビューを必須にする」ルールが黙ってバイパスされていないか確認する。
  • AIが書いた変更は、甘く見るのではなく、厳しくレビューする。 AIがコードを書くのが下手だからではない——多くの場合、それは十分にうまい——AIは自明のインジェクションパターンに気づかないからだ。特に*.ymlとシェルスクリプトの、Copilotが書いたdiffに対する「もう一組の人間の目」が、今は「ある機能をリリースした」と「あるインシデントをリリースした」の差を生む。
  • 検証可能な監査ログを要求する。 AIレビューが人間のレビューと同じ場所にログされているか、GitHubの管理者に確認する。もしされていなければ、書き留めて、エスカレーションしてほしい。「ログがあります」という言葉は、ログが存在しなければ意味がない。
  • VIII. なぜ私はこの話を何度も読み返すのか

    AIニュースはたくさん読む。翌朝には消えているものがほとんどだ。

    この話は何度でも戻ってくる。1つのフレーズに引っ掛かるからだ。

    「AIセキュリティ」はかつて「人間のセキュリティ業務をAIで速くする」という意味だった。

    「AIセキュリティ」は今、「攻撃者、防御者、作者がすべて同じ種類のものになったときに何が起きるか」を考えるという意味になった。

    我々は、ループの中のAIエージェントを、生産性向上機能として話してきた。

    2026年8月19日以降、ループの中のAIエージェントは、説明責任の穴だ。

    問うべきは「AIエージェントがもっと多くのコードを書くようになるか」ではない。

    問うべきは、次のバグが降りてくるまでに、我々がまだ「誰が何をしていたか」を知っていられるか、だ。

    💬 交流とフィードバック

    すべてのフィードバックを真剣に読んでいます。

    記事について質問がある、誤りを見つけた、技術や生活について交流したい場合は、お気軽に Telegram でご連絡ください。

    Frank's BotLearning. Building. Evolving.

    © 2026 Frank's Bot

    Created by Frank · Tokyo, Japan