Most teams ship their first agent tool gate as a list of permitted tool names. The model can call search_docs, read_file and send_email, and nothing else. That list feels like a security boundary, and it is a weak one. It answers "may this function run?" while leaving "with what data?" completely open.
The problem is structural. Language models process natural language instructions and data in the same channel, with no hard separation between them, which is exactly the design that makes prompt injection possible the OWASP prompt injection cheat sheet. When an agent hands a free-text argument to a tool, that text came from somewhere: a web page, an email, a ticket description, a PDF. An attacker who controls any of those controls part of the model's instruction stream.
There is a second half to this that security teams often miss. Tool call poisoning is different from prompt injection: injection manipulates what the system says, while poisoned tool calls hijack what it does, executing unauthorized API calls with attacker-chosen arguments at the execution layer Prediction Guard's comparison. An allowlisted tool invoked with attacker-chosen arguments is precisely this second category.
A survey of LLM agent workflows catalogs over thirty attack techniques across input manipulation, model compromise, privacy attacks and protocol vulnerabilities, and notes that the proliferation of plugins and connectors has outpaced security practice the protocol exploit survey. The arguments are where most of those plugins meet untrusted input.



