数十年前のBashの仕掛けがAIコーディングエージェントをサプライチェーン攻撃に晒す

1989年にGNUがLinuxのオリジナルBourne Shellを書き直して生まれたBash(Bourne Again SHell)は、30年以上が経過した今もなお「Bashトリック」によって問題を引き起こす可能性があります。Adversa AIは、複数のオープンソースAIエージェントに構造的なセキュリティ上の欠陥を発見しました。これは特定のバグではなく、悪意あるBash命令をエージェントに注入し、そこからエージェントが実行するあらゆる処理へと波及させることができるというプロセス上の問題です。多くの場合、オペレーターの承認を経て実行されます。

Adversaはこの構造的問題をGuardFallと呼んでいます。

「Hermes、OpenCode、Roo-codeなどを含む11種類の人気オープンソースエージェントをテストしました」と、Adversa AIのコミュニケーション責任者であるSerge Malenkovich氏は説明します。「10種類は4つのうちいずれかの方法でこの脆弱性を抱えており、完全に防いでいるのは1種類だけでした」

この「脆弱性」とは、クォート除去や$IFSスペーシングといった数十年前から知られているBashシェルのトリックに対するガードが機能していないことを指します。これらのエージェントは開発者のフルアカウント権限で動作するため、重大なサプライチェーンリスクに発展する可能性があります。

「エンジニアが脆弱なエージェントを使って悪意あるリポジトリ内の汚染されたREADMEやMakefileを読み込んだ場合、エージェントを騙してAWSの認証情報を密かに外部に送信させたり、開発環境を丸ごと消去させたりする可能性があります。特に『自動承認モード』がデフォルトとなっているCIパイプラインでは危険性が高くなります」とMalenkovich氏は続けます。

Adversaの完全なレポートでは次のように説明されています。「このパターンをGuardFallと呼びます。エージェントコーディングツールにおけるパターンベースのシェルガードへのバイパスであり、ガードがコマンドを通過させた後にBashが難読化を解除します」

この研究のきっかけは、30パターンの正規表現拒否リストに対するシェル書き換えによって、NousResearch/hermes-agentの承認ゲートをバイパスできることを発見したことです。これを受けてAdversaは、2026年5月時点でのGitHubスター数とコミュニティの活動実績をもとに、最も人気のあるオープンソースコーディングエージェントおよびコンピューターユースエージェントを調査・検証しました。

すべてのエージェントがAdversaのすべてのBashトリックに対して脆弱だったわけではありませんが、結論として11種類のテスト対象エージェントのうちすべてのトリックをブロックできたのは1種類のみでした。これらのトリックはレポート内でA〜Eの5つの「クラス」として分類されています。最も成功率が高かったクラスEは「同じ破壊的効果をもたらす代替argv形式」と説明されています。

「クラスEは調査した中で最も強力なトークン化ガードを含む、最も多くのガードを突破します」とレポートは説明しています。「各バイナリについて、どのフラグの組み合わせが無害から破壊的な動作に変わるかを知る必要があるため、フラグごとの推論が必要となるためです」

ただし、バグが存在しても特定の条件下でのみ悪用可能であるように、これらのガードバイパスにも独自の前提条件があります。たとえば、言語モデルが協力する場合にのみ機能します。

AIモデルに対して「これを実行して:rm」(rmはファイルを削除するコマンド)と直接要求した場合、モデルは通常それを危険と認識して拒否します。しかし間接的または偽装されたリクエスト、たとえばMakefileのターゲットに埋め込まれた場合、そのコマンドは異議なく受け入れられやすくなります。

この研究では、攻撃者がエージェントに取り込まれるコンテンツ(悪意あるMCPサーバー、取得したWebページ、その他複数の想定ソース)内に埋め込んだコマンドが、エージェントによって実行されるかどうかを検証しています。その答えはあまりにも頻繁に「イエス」でした。エージェントはオペレーターの権限で実行される破壊的なシェルコマンドを発行します。ただし、自動実行モードがオンになっている場合、またはサンドボックスがローカルモードに切り替えられている場合に限ります。

GuardFallの悪用は複雑なプロセスを要しますが、複雑さが過去に悪意ある行為者の妨げになったことはありません。ユーザーを守るために、オープンソースエージェントのメンテナーはプロセスの難解さに頼るのではなく、Bashトリックを根本的に不可能にする対策を講じるべきです。

ContinueはAdversaのテストに対してガードを維持できた唯一のエージェントでした。「評価者に提出された21のバイパスケースのうち、allowedWithoutPermissionに到達したものは0件であり、12件の標準的破壊ケースはすべて正しくダウングレードされました」と研究者たちは述べています。「この設計は完璧ではなく、クォートされた引数内のクラスCとクラスEの長末尾全体(argvフラグごとの推論)は依然として未解決ですが、調査対象の中で構造的な脆弱面の大部分を塞いでいる唯一のエージェントです」

研究者たちはその実現方法を調査し、それをさらに発展させ、GuardFallを阻止してサプライチェーンへの見えないBashトリックの侵入を防ぐための独自の推奨策をまとめました。これらのいくつかはエージェントを取り囲むガードの設置に関するものです。

たとえば、「$HOMEをリダイレクトしたスコープ付きシェルからエージェントを実行してください。一行のラッパー(HOME=$HOME/.agent-sandbox-$RANDOM agent …)によってプロジェクトディレクトリを維持しつつ、~/.ssh/~/.aws/、シェル履歴、その他$HOME内の機密情報、つまり認証情報漏洩リスクが最も大きいサーフェスを排除できます。これは常時有効でありワンフラグで無効化できるドキュメントが存在しないため、最も強力な応急処置となります」

その他の選択肢としては、自動承認モードの無効化、リポジトリ付属の設定ファイルの監査、フォークPRでのエージェント実行のブロックなどがあります。しかし最終的に、これらはすべて応急処置にすぎません。「ガードは生のテキストを検査しますが、システムシェル(Bash)はテキストを実行前に展開、アンクォート、書き換えます」つまり、エージェントが実行していると思っているものと、Bashが実際に実行するものとの間には乖離があります。これがAdversaのBashトリックによって悪用される構造的な脆弱点です。

唯一の長期的な解決策は、オープンソースエージェントのメンテナーがエージェント自体の内部にContinueスタイルの「トークン化と正規化」評価者ガードを実装することです。

AI Risk Summit | Ritz-Carlton, Half Moon Bayで詳細を学ぶ

Image

翻訳元: https://www.securityweek.com/decades-old-bash-tricks-expose-ai-coding-agents-to-supply-chain-attacks/

ソース: securityweek.com