The vulnerability lies in the handle_message and handle_message_async methods of the ChatAgent class in langroid/agent/base.py. These methods were responsible for processing incoming messages and dispatching tool calls. However, they failed to differentiate between messages originating from the user and messages from the LLM. This allowed a user to craft a message containing a raw JSON payload for a tool and have it executed, even if the tool was configured with use=False, which is intended to prevent the LLM from using it. The patch introduces a new method, _filter_user_origin_tools, which is called from both handle_message and handle_message_async. This new method checks if a message originates from a user and, if so, filters out any tools that are not explicitly marked as usable by the LLM. This ensures that users cannot directly invoke tools that they are not supposed to have access to.