脆弱性・CVE速報深刻度: 緊急

Python のエージェント基盤 Agno で、FunctionCall の field_type が eval() に渡されコード実行の恐れ(CVE-2026-35002): 2.3.24 で修正

目次(5)

CVE-2026-35002

エージェントを組むための Python ライブラリ Agno に、FunctionCall の入力項目 field_type が Python の eval() にそのまま渡される不具合(CVE-2026-35002)があり、2.3.24 で修正されました。GitHub Advisory(GHSA-m4w4-3r8h-jw98)は 10/27 公開で、深刻度は Critical、CWE-95(動的評価コードの不適切な無害化)です。GitHub の CVSS v3.1 は 9.8(AV:N/AC:L/PR:N/UI:N)です。CISA の KEV には載っていません。EPSS は 0.86%(10/30 時点)です。

何が起きるか

  • 勧告によると、FunctionCall の user_input_fields にある field_type が文字列のとき、型名の解釈のために eval() が呼ばれていました。この値を攻撃者が左右できると、Agno のプロセス内で任意の Python コードを実行させられます。
  • 勧告は、API や Web 画面、信頼できないツールの出力などを通じて、利用者の影響を受けた FunctionCall の入力が Agno に届く構成が該当するとしています。
  • 実行されるのは Agno を動かしているプロセスの権限です。エージェントの基盤は、外部サービスの認証情報や社内システムへのアクセス権を持つことが多いため、侵害されたときの影響は広がり得ます(これは本記事の見立てです)。

修正の内容

  • 修正コミット cbf6755(2026-01-07 UTC、PR #5912)は、eval() を固定の対応表(str・int・float・bool・list・dict)の参照に置き換えています。表にない文字列は str として扱い、型オブジェクトはそのまま、それ以外は str にします。
  • 差分は models/base.py の同期・非同期の 2 か所と、tools/function.py の UserInputField.from_dict の eval() で、同じ置き換えが入っています。
  • 修正版 2.3.24 は PyPI で 2026-01-08(UTC)に公開されました。勧告の公開(10/27)は、その約 9.5 か月後です。NVD への登録は 2026-04-02 でした。この間の経緯は未確認です。

影響を受ける版と条件

  • 勧告・NVD ともに、2.3.24 より前の版が対象です。修正版は 2.3.24 で、勧告は現行の 2.6 系にも修正が含まれると書いています。本記事の確認時点の PyPI の最新版は 3.1.12 です。
  • 回避策について、勧告は「安全な回避策はない」とし、更新できない場合は信頼できない入力が field_type に届かないようにするよう求めています。
  • 自社のエージェントで該当するかは、agno の版、ユーザー入力を受ける FunctionCall の使用(人が入力を補う機能を含む)、ツールやモデルの出力を経由した入力の有無で確かめられます。

対応

  1. Agno を 2.3.24 以上(できれば現行の版)に更新します。
  2. 古い版を固定している環境(ロックファイルやコンテナ)がないか、依存関係を洗い出します。
  3. すぐ更新できない場合は、利用者や外部ツールの出力が field_type に到達しない構成かを確認します(勧告が示す対処の読み取りです)。
  4. エージェントを動かすプロセスは、最小の権限・隔離した環境で動かし、保存された認証情報や外向きの通信を絞ります。
  5. 該当版を動かしていたサーバーで、心当たりのないプロセス起動や外向きの通信がなかったかを確認します。

未確認の点

  • NVD の状態は Analyzed です。NVD 自身の CVSS v3.1 は 9.8、別の登録元(VulnCheck)の CVSS v4.0 は 9.3 です。なお、GitHub の勧告の本文には「CVSS 3.1 score: 9.3」とあり、勧告の構造化データ(9.8)と食い違っています。どちらが正しいかは確認できていません。
  • 悪用の報告は見つかっていません(KEV 掲載なし)。EPSS は今後変わり得ます。
  • 実際の環境での再現は確認していません。記載は勧告、修正コミット、公開情報に基づきます。

この記事について

出典

この記事を共有