AI コーディング エージェント 10種に共通する構造的欠陥 GuardFall-数十年前のBashの欠陥がガードレールを回避

セキュリティニュース

投稿日時: 更新日時:

AI コーディング エージェント 10種に共通する構造的欠陥 GuardFall-数十年前のBashの欠陥がガードレールを回避

セキュリティ企業Adversa AIは、オープンソースのAIコーディングエージェントの多くに共通する構造的な欠陥を発見し、GuardFallと名付けて公表しました。この問題は特定のバグや単一のCVEに紐づくものではなく、エージェントが危険なコマンドを検査する仕組みそのものに内在する設計上の弱点です。Adversaが人気の高いオープンソースのAIコーディング・コンピュータ操作エージェント11種を検証したところ、Continueという1つを除く10種すべてで、Bashシェルが持つ数十年来のクセを使ってガードレールをすり抜けられることが確認されています。当サイトでも以前、Claude Codeのネットワークサンドボックス迂回CursorのサンドボックスにまつわるDuneSlide脆弱性を取り上げましたが、今回のGuardFallは特定の製品というより、業界全体で採用されているコマンド検査の方式そのものに疑問を投げかける内容です。

サマリー

  • Adversa AIは、AIコーディングエージェントに共通する構造的な欠陥をGuardFallと名付けて公表した
  • 原因は、多くのエージェントがコマンドを危険なパターンのブロックリストと照合する際にコマンドをプレーンテキストとして検査している一方、実際に実行されるのはBashシェルが解釈・書き換えた後の内容であるという、検査対象と実行対象のずれにある
  • 具体例として、rmというコマンドを空の引用符を挟んでr”mのように記述すると、テキストマッチによるフィルタはこれをrmとは異なる文字列として素通りさせてしまうが、Bashは空の引用符を除去してそのままrmとして実行してしまう
  • 同様の手口は、base64エンコードしたコマンドをシェルへパイプする方法や、findやddといった一見無害なツールを破壊的なオプションと組み合わせる方法でも成立する
  • Adversaは人気の高いオープンソースのAIコーディング・コンピュータ操作エージェント11種を検証し、Continueを除く10種すべてでこの回避が成立することを確認した
  • 唯一の例外であるContinueは、コマンドをBashが実際に解釈するのと同じ方法で事前に分解し、実行される内容そのものを検査したうえで、破壊的なコマンドのハードブロックリストも併用するという設計により、この問題を回避していた
  • 攻撃が成立するには、AIエージェントが悪意あるコマンドを生成することと、エージェントが自動実行モードやサンドボックス無効の状態で動作していることという2つの条件が必要で、いずれもCI/CDパイプラインなど自動化された環境では珍しくない
項目 内容
発見者 Adversa AI(主任研究者:Omer Ben Simon氏)
脆弱性名 GuardFall
CVE番号 なし(特定のバグではなく構造的な問題として扱われている)
検証対象 人気の高いオープンソースAIコーディング・コンピュータ操作エージェント11種
影響を受けたツール opencode、Goose、Cline、Roo-Code、Aider、Plandex、Open Interpreter、OpenHands、SWE-agent、Hermes(NousResearch/hermes-agent)
唯一防御に成功したツール Continue
根本原因 コマンドをプレーンテキストで検査する一方、Bashが実行前にテキストを書き換える(引用符除去・変数展開等)ことによる検査対象と実行対象のずれ
悪用手口の例 引用符除去、単語分割、base64エンコードのパイプ実行、find・dd等の正規ツールの悪用
検証時に使用したモデル Claude Sonnet 4.6
対象ツールの規模 2026年5月時点でGitHubスター合計約54.8万件

何が起きたか

AIコーディングエージェントの多くは、開発者に代わってシェルコマンドを実行できる強力な機能を持っています。この機能が暴走しないよう、多くのエージェントはコマンドを実行する前に、危険なパターンのブロックリストと照合するというガードレールを設けています。Adversa AIが発見したのは、このガードレールの検査対象と、実際にシェルが実行する内容との間に、構造的なずれが存在するという問題です。

発端は、NousResearchが提供するHermesというエージェントのGitHub上のイシュートラッカーに、承認ゲートをシェルの書き換えによってすり抜けられるという報告が上がっていたことでした。Adversaはこれをきっかけに調査を広げ、同種の問題が業界内の他の多くのエージェントにも共通して存在することを突き止め、GuardFallという名称で体系化しています。Adversa自身も、これは単発のバグではなく、危険な慣習であり一つの問題群だと位置づけており、ブロックリストにパターンを追加し続けるという対症療法では根本的な解決にならないと指摘しています。

rmをr”mと書くだけで通過する-検査と実行のずれが生む抜け道

多くのエージェントが採用しているガードレールは、これから実行しようとしているコマンドの文字列を、危険なパターンのブロックリストとそのまま比較するという方式です。しかし実際にコマンドを実行するBashシェルは、渡された文字列をそのまま実行するわけではなく、引用符の除去や変数の展開といった書き換えを行ってから実行に移ります。ガードレールが検査しているのは書き換え前の文字列であるのに対し、実際に実行されるのは書き換え後の内容であるため、両者の間にずれが生じるわけです。

最も単純な例は、rmという危険なコマンドを、空の引用符を挟んでr”mのように記述する方法です。テキストとして単純に照合するフィルタから見れば、r”mはrmとは異なる文字列であるため、危険なパターンとして検出されません。ところがBashはこの空の引用符をコマンドの実行前に取り除いてしまうため、結果としてrmがそのまま実行されてしまいます。同様の考え方は他の形でも成立し、base64でエンコードしたコマンドをシェルへパイプで渡す方法や、findやddといった本来は正規の用途で使われるツールを、破壊的な結果をもたらすオプションと組み合わせて使う方法でも同じ抜け道が生まれます。Adversaは、この問題を解消するために個別のパターンをブロックリストへ追加し続けても意味がないと説明しています。書き換え後の姿を想定せずに書き換え前の文字列だけを見て判断するという設計方針そのものを変えない限り、新しい書き換えパターンが次々と抜け道になり得るからです。

攻撃が成立する2つの条件

Adversaの説明によれば、この問題が実際の被害につながるには2つの条件がそろう必要があります。

1つ目は、AIエージェント自身が悪意あるコマンドを生成してしまうことです。あからさまにrm -rfの実行を指示するようなプロンプトは、通常であれば拒否されます。しかし、ビルドファイルやREADMEファイル、あるいはツールが返す説明文のような、一見すると通常の作業の一部に見える形で悪意ある指示を紛れ込ませておけば、エージェントはそれを日常的な作業の一環として何気なく実行してしまう可能性があります。攻撃者から見れば、悪意あるリポジトリやパッケージの中にこうした指示を仕込んでおくだけで、開発者がそのリポジトリをエージェントに読み込ませた瞬間に攻撃が成立しうるということです。

2つ目の条件は、エージェントが人間の承認を介さずに自律的に動作している状態であることです。具体的には、自動実行のフラグが有効になっている場合や、コンテナによるサンドボックスが無効化されている場合が該当します。こうした設定は、CI/CDパイプラインのような自動化された環境では標準的に使われていることが多く、決して特殊な状況ではありません。Adversaは実際に、本番運用されているPlandexのバイナリに対してこの攻撃を最初から最後まで実演しており、同様の手法が他の8種のツールに対しても機能したとしています。なお、今回の検証は研究室内での実証実験であり、実際の悪用事例は本稿執筆時点で報告されていません。

唯一防御に成功したContinueの設計

検証対象となった11種のエージェントのうち、唯一GuardFallへの耐性を示したのがContinueです。Continueがこの問題を回避できた理由は、コマンドを検査する仕組みの根本的な設計思想が他のツールと異なるためです。Continueは、コマンドの文字列をブロックリストと単純に照合するのではなく、Bashが実際に解釈するのと同じ方法でコマンドをあらかじめ分解し、書き換えられた後にどのような内容が実際に実行されるのかを踏まえたうえで判断を行います。そのうえで、破壊的なコマンドについては状況にかかわらず実行を拒否するハードブロックリストも併用しているとされています。

ただし、この防御が完全というわけではありません。Continueの標準的なエディタモードではすべての攻撃パターンを防いだ一方、コマンドラインの自動実行モードではやや防御が弱く、一部のペイロードは通過してしまったとされています。それでも、最も破壊的な部類のコマンドについては、このモードでもハードブロックによって防がれていたとのことです。Adversaは、Continueが採用しているこの設計は他のツールへも移植可能であり、経験のあるエンジニアであればおおむね2日程度の作業で再実装できる規模だとコメントしています。

原因はブロックリスト方式そのものの限界にある

今回の問題の根本原因は、危険なコマンドを検出する手段として、実行前の文字列をブロックリストと照合するという、比較的単純な方式に依存してきたことにあります。サーバサイドエンジニアとしてシェルスクリプトを扱ってきた経験から言うと、Bashの引用符除去や変数展開、単語分割といった挙動は目新しいものではなく、シェルスクリプトを書く上で誰もが一度はつまずくような、非常に基本的で古くからある仕様です。今回のAdversaの指摘が興味深いのは、こうした古典的な知識が、AIエージェントという新しい文脈の中で、防御側が見落としがちな抜け道として再び顔を出したという点です。AIエージェントの多くは開発者のアカウント権限をそのまま引き継いで動作するため、この種の抜け道はSSH鍵やクラウドの認証情報、ホームディレクトリ内のあらゆるファイルへのアクセスに直結しかねません。

Adversaは今回のGuardFallについて、同社が過去に発表したTrustFall(Claude Code・Cursor・Gemini CLI・Copilot CLIを対象にした一連の脆弱性)や、Claude Codeにおける拒否ルールのバイパスといった、今年報告されてきた一連の研究の延長線上にあるものだと位置づけています。信頼できない外部コンテンツが、ガードレールがBashの実際の挙動を理解しないままシェルへ到達してしまうという構図は、AIコーディングエージェント全般に共通する課題だといえます。

情報システム部門への示唆

自組織でオープンソースのAIコーディングエージェントを利用している場合、まず自社が採用しているツールが今回の検証対象に含まれていないかを確認してください。含まれている場合は、ベンダーやプロジェクト側から今回の問題を踏まえた修正が提供されていないかを確認することをお勧めします。この問題には単一のCVEが存在しないため、通常の脆弱性管理のフローだけでは見落とされやすい点に注意が必要です。

暫定的な対策としては、エージェントを実行する際のホームディレクトリを使い捨ての一時フォルダに向けることで、SSH鍵やクラウドの認証情報といった機密情報へのアクセス経路を断つことが有効です。あわせて、自動実行フラグは業務上どうしても必要な場合を除いて無効化し、フォークされたリポジトリからのプルリクエストに対してエージェントを自動実行させない運用にすることをお勧めします。また、リポジトリに同梱された設定ファイルについても、信頼できるコードと同列に扱わず、未検証のコードとして扱う姿勢が重要です。設定ファイルを読み込んだ最初の編集の時点で攻撃が成立しうるため、リポジトリをクローンする段階での警戒も必要になります。ブロックリスト方式のガードレールに依存しているツールを使い続ける場合は、その限界を理解したうえで、あくまで多層防御の1枚として位置づけ、実行環境そのものの権限を絞り込む対策とあわせて運用することをお勧めします。

出典