AgnoのPandasToolsに脆弱性、コード実行や情報読み取りの恐れ
AIエージェント基盤のAgnoにあるPandasToolsに、AIモデルの出力をきっかけに任意のコード実行やローカルファイルの読み取りが起きる脆弱性が見つかりました。PandasToolsを組み込んだエージェントを動かしている組織が対象です。まず版とPandasToolsの使用有無を確認し、修正版の告知を追ってください。
急ぎ度: 早めに
CVSS v3は8.1、v4は9.2と高く、影響範囲はAgno 3.1.11以前ですが、修正版の版番号がまだ確認できないためです。
関係があるか
Pythonのパッケージagnoで、pandasのデータ分析機能をエージェントに使わせるPandasToolsを組み込んでいる環境が対象です。社内の分析アシスタントや業務自動化のエージェントを自作している組織が当てはまります。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| agno(agno-agi)のPandasTools | 3.1.11以前 | 版番号は未確認。ベンダーのGitHubで告知を確認してください |
確かめ方
- 1エージェントの実行環境で
pip show agnoを実行し、Versionが3.1.11以前か確認する - 2ソースコードや設定を
grep -rn "PandasTools" .で検索し、PandasToolsを読み込んでいるエージェントがないか確認する - 3requirements.txtやpyproject.tomlだけでなく、コンテナイメージや仮想環境に入っているagnoの版も確認する
何が起きたか
AgnoのPandasToolsで、AIモデルが指定した名前のpandas関数を、そのまま呼び出してしまう脆弱性が見つかりました。悪用されると、エージェントが動くサーバー上で任意のコードが実行されたり、ローカルファイルが読み取られたりします。
原因は、モデルが返した関数名を使ってgetattr()でpandasの機能を呼び出す際に、呼べる関数を絞っていないことです。CWE-470(外部から与えられた入力でクラスやコードを選んでしまう問題)に分類されています。
説明では、プロンプトインジェクションでモデルにpandas.read_pickleを呼ばせると、攻撃者が指定したパスのファイルを読み込む過程でコードが実行されるとされています。ほかの読み込み用関数を呼ばせれば、サーバー内のファイルの中身を読み出せます。
攻撃の流れ
-
1
指示の混入
エージェントが処理する文章やデータに、攻撃者の指示を紛れ込ませます。
-
2
関数名の指定
モデルが指示に従い、呼び出すpandas関数の名前としてread_pickleなどを出力します。
-
3
無検証で呼出
PandasToolsがその関数名を確認せず、getattr()で実行します。
-
4
コード実行・読取
サーバー上でコードが動いたり、ローカルファイルが読み出されたりします。
どう悪用されるか
攻撃者にアカウントは要らず、ネットワーク経由で仕掛けられ、利用者が何か操作する必要もありません。CVSSの攻撃条件の複雑さは高です。攻撃者の指示がエージェントの入力に届くことなど、条件がそろう必要があるためです。
被害は、エージェントを動かすプロセスの権限で起きます。任意のコード実行が成立すれば、サーバー内のデータの読み取り、書き換え、サービス停止のすべてが起こりえます。このプロセスがクラウドの認証情報やデータベースへの接続情報を持っていれば、影響はサーバーの外にも広がります。コード実行まで至らない場合でも、設定ファイルなどのローカルファイルが読み出されるおそれがあります。
今すぐやること
-
1
agnoの版とPandasToolsの使用を確認する
本番・検証・開発の各環境で、agnoが3.1.11以前か、PandasToolsを読み込んでいるエージェントがあるかを洗い出します。
pip show agno -
2
エージェントの権限と到達先を点検する
PandasToolsを使うエージェントの実行ユーザーが、どのファイル、認証情報、社内ネットワークに触れられるかを一覧にします。影響の大きさはここで決まります。
-
3
修正版が出たら更新する
ベンダーのGitHubのissueとリポジトリで修正版の告知を確認し、公開され次第、修正版に更新します。更新後は、エージェントの動作を検証環境で確認してから本番に反映します。
-
4
過去の実行ログを見直す
PandasToolsが呼んだ関数名の記録が残っていれば、通常の分析用途にない読み込み関数が呼ばれていないかを確認します。記録が無ければ、今後残すように設定します。
すぐ更新できないとき
修正版を当てられない間は、PandasToolsをエージェントのツール一覧から外すのが確実です。外せない場合は、外部から取り込む文書・Webページ・メールなどを、PandasToolsを持つエージェントに渡さないようにします。あわせて、エージェントの実行環境をコンテナなどで隔離し、実行ユーザーの権限を最小限にします。読み取れるファイルと外部への通信先も絞ってください。
背景
Agnoは、AIモデルに関数やツールを持たせ、自律的に作業させるエージェントを組み立てるためのPythonのフレームワークです。PandasToolsは、そのエージェントに表形式データの読み込みや集計をさせるための部品にあたります。売上データや業務ログをエージェントに分析させる用途で、社内の実データに近い場所で動かされることが多い部品です。
今回の問題は、モデルが出力した文字列が、実行する関数の名前としてそのまま使われた点にあります。エージェントでは、モデルの出力は文書やWebページに仕込まれた指示に影響されるため、信頼できる入力とは言えません。さらに、pandas.read_pickleが使うpickle形式は、信頼できないデータを読み込むとコードが実行されうるため、pandasの公式ドキュメントでも注意が促されています。この2つが重なったことで、データの読み込み機能がコード実行の入口になっています。
よくある質問
Q.pandasを最新版に更新すれば解消しますか。
Q.社内の利用者しか使わないエージェントでも対象ですか。
まだ分かっていないこと
- 修正版の版番号と公開時期は分かっていません。ベンダーのGitHubのissueとリポジトリで確認してください。
- 実際の攻撃で悪用されたかどうかは分かっていません。
- PandasToolsが既定で有効になるのか、利用者が明示的に組み込んだときだけ有効になるのかは分かっていません。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| agno-agi | agno |
3.1.11 以前 |
— |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Agno through 3.1.11 contains an unsafe reflection vulnerability in PandasTools that allows attackers to invoke arbitrary pandas functions by supplying model-controlled function names to getattr(). Attackers can use prompt injection to make the agent call pandas.read_pickle on attacker-controlled paths for code execution, or call other readers to read local files.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory