Agno’s create_pandas_dataframe tool accepted a create_using_function name and dispatched it through getattr on the pandas module. The code checked the returned object’s type only after invoking the selected function, so a dangerous call such as read_pickle could already have performed unsafe deserialization. The relevant attacker route is influencing the…
Inspect the ClaimsCase · DiggingBeagle record
Agno PandasTools let a model-selectable function reach unsafe pickle loading
PandasTools invoked pandas functions from an unchecked parameter, allowing a chosen read_pickle function before DataFrame validation.
Agno installation with the PandasTools helper enabled and a party able to influence its selected tool function; actual external reachability and fixed version are not confirmed.
Assessment profile
Assessment method- Setting
- research demonstration
- Exploitation
- demonstrated
- Evidence
- Grade B
- AI role
- AGAINST AI
Basis and provenance
The primary issue establishes the dangerous dispatch path but not a publicly confirmed fixed version or live victim. Impact remains unrated because the scoped record does not establish a calibrated severity-to-impact-band mapping.
Assessed Oct 31, 2026 using diggingbeagle.assessment/1.
Evidence basis: CLM-C26-AGNO-PANDAS-READPICKLE-1 · Agno issue 8699: unrestricted PandasTools dispatch
At a glance
The post-call output-type check cannot retroactively stop the side effects of an unsafe constructor.
Read the implicationsAn independently verified release containing the intended allowlist fix is not established. No observed production compromise has been documented.
Limits and uncertaintyFull account
Agno’s create_pandas_dataframe tool accepted a create_using_function name and dispatched it through getattr on the pandas module. The code checked the returned object’s type only after invoking the selected function, so a dangerous call such as read_pickle could already have performed unsafe deserialization. The relevant attacker route is influencing the tool’s function name and arguments, not merely mentioning a pickle file in an unrelated prompt.
The reported affected series includes 3.1.11, while a fixed package version was not established in the evidence available here. The finding does not document a confirmed real-world victim or a universally exposed HTTP entry point. The proper regression test is to restrict the available constructors before dispatch and verify that malicious or unsupported function names never invoke pandas in the first place.
Mechanism and trust boundary
- 01
Step
- 02
Step
- 03
Step
Timeline
- Oct 29, 2026disclosure
Public disclosure
Claims & evidence
CLM-C26-AGNO-PANDAS-READPICKLE-1Agno issue 8699 describes unrestricted pandas function dispatch through getattr before output-type validation, allowing an unsafe read_pickle call when inputs are attacker-influenced.supported
Basis: reported finding
- supportsAgno issue 8699: unrestricted PandasTools dispatchprimary disclosure
Agno issue 8699, create_pandas_dataframe selected function and read_pickle discussion
Implications
The post-call output-type check cannot retroactively stop the side effects of an unsafe constructor.
Controls and mitigations
- Apply a constructor allowlist before function lookup and enforce sandboxed, authenticated data-source access; test harmless rejected method names.
Unknowns and contradictions
- An independently verified release containing the intended allowlist fix is not established.
- No observed production compromise has been documented.
Sources and citation
Material revision history
- Oct 31, 2026 · Canonical change recorded · new in release · revision 208