セキュリティ研究者らが、AIコーディングエージェントに対してBashの複雑なコマンド表現を悪用し、サプライチェーン攻撃を仕掛ける新たな手法「GuardFall」を発見した。この攻撃は、AIエージェントのガードレール(防御機構)を回避し、悪意のあるコマンドを実行させるもので、調査対象となった11種類のAIエージェントのうち、10種類が影響を受けることが確認された。
GuardFall攻撃の仕組み
GuardFallは、Bash自体の脆弱性ではなく、AIコーディングエージェントのコマンド判定を回避する攻撃手法である。Bashには多様なコマンド表現が存在し、例えば「rm -rf」のような危険なコマンドを「r''m -rf」と記述しても、同じ動作を実行できる。AIエージェントのガードレールは通常、正規表現で危険コマンドを検出するが、このような別表記パターンには対応できていない。
攻撃者は、$IFSの展開、コマンド置換、Base64を用いた難読化、コマンド引数などを利用して、悪意のあるコマンドを難読化する。AIエージェントがこれを正常なコマンドと判断すると、ガードレールを突破して実行される可能性がある。
攻撃の実現方法
研究者によると、直接的な悪意のあるプロンプトを指示しても、AIエージェントは拒否する可能性が高い。そこで、悪意のある命令を一見正常なレスポンスに見せかける手法が開発された。具体的には、MCPサーバの応答、Webコンテンツ、READMEファイル、パッケージ説明、ワークフロー内のメールやチャットなどに偽装する。
Adversa AIのセキュリティレポートでは、「この手法を用いると、悪意のあるコマンドが通常の処理として実行される」と説明されている。攻撃対象となったAIエージェントは以下の11種類で、ソースコード非公開のエージェント(Cursor、Claude Code、GitHub Copilotなど)はテスト対象外とされた。
- NousResearch/hermes-agent
- sst/opencode
- block/goose(現在のaaif-goose/goose)
- cline/cline
- RooCodeInc/Roo-Code
- continuedev/continue
- Aider-AI/aider
- plandex-ai/plandex
- OpenInterpreter/open-interpreter
- All-Hands-AI/OpenHands
- SWE-agent/SWE-agent
唯一の防御成功例:continue
11種類のAIエージェントの中で、唯一「continuedev/continue」だけがGuardFall攻撃を防御できた。その理由は、コマンド展開の徹底した評価にある。continueは内部でコマンド展開を繰り返し実行し、各段階でリスクを再帰的に評価することで、破壊的なパターンを検出する。
ただし、研究者によると、「この機能も完全ではなく、今回準備した評価パターンのブロックに成功したに過ぎない。一部の設計は不完全で、未解決の課題を含む」と指摘されている。
暫定的な対策
レポートでは、GuardFallの影響を受けるエージェント利用者に向けて、暫定的な対策として、エージェント実行時の環境変数「HOME」を変更し、疑似的なサンドボックス内で実行するよう推奨している。この方法で攻撃自体を回避することはできないが、$HOME/.sshや$HOME/.awsなどの機密情報の流出を阻止できる可能性が高い。
より確実な対策としては、continueと同等の仕組みの実装が挙げられる。各AIエージェントの開発者には、continueの仕組みを解析し、弱点を補ったガードレールの導入が望まれている。
今後の展望
AIコーディングエージェントの普及が進む中、Bashの複雑なコマンド表現を前提とした新たな防御手法の整備が求められている。今回のGuardFallの発見は、AIエージェントのセキュリティ設計における重要な警鐘となった。



