Advisories
Security vulnerabilities, privacy incidents, safety concerns, and policy updates affecting LLMs and AI agents.
Security vulnerabilities, privacy incidents, safety concerns, and policy updates affecting LLMs and AI agents.
3,134 items
The default FileSessionManager in Strands Agents (strands-py) writes session data under /tmp/strands/sessions and relies on the process umask for permissions. With the common umask 022, session directories are 0755 and JSON files are 0644, so other local users can read persisted session data such as prompts, model output, tool inputs and outputs, and any secrets that pass through the agent. The issue was reproduced on commit dd7b41de38cb.
Fix: Suggested fixes: use a private per-user data directory by default rather than /tmp, or create /tmp/strands and its descendants with 0700; write session JSON atomically with 0600 permissions; consider refusing to use an existing default storage directory that is not owned by the current user or is group or world accessible; and document that callers should set storage_dir explicitly when they need shared storage.
GitHub Advisory DatabaseAn authenticated LiteLLM proxy user with only the internal_user_viewer role could send a crafted vertex_ai_credentials value to /utils/transform_request. The request-body blocklist blocked vertex_credentials but missed this alias, letting the value reach the Vertex AI credential loader and read arbitrary local files sent to an attacker-controlled URL. Reading /proc/self/environ can expose LITELLM_MASTER_KEY and provider API keys, escalating to full proxy-admin control.
Fix: Upgrade to 1.95.0 or later. The fix adds the missing alias to the request-body blocklist, so no configuration change is needed once you upgrade. There is no reliable configuration workaround on affected versions.
LiteLLM's proxy endpoint /sso/debug/callback reflected identity-provider-controlled fields into an inline script block using json.dumps, which does not escape HTML context characters such as </script>. An IdP string containing </script> could run attacker JavaScript in the proxy origin. The route needs no authentication, so an attacker with an account on the configured IdP could lure a logged-in proxy admin into opening the callback URL, enabling session cookie theft and potentially full admin account takeover.
hagent through commit 761eec6 contains an OS command injection flaw in the args parameter of the hagent_arduino and hagent_esp32 tools. Crafted args are interpolated into arduino-cli and idf.py commands run with subprocess.run(shell=True), so MCP clients, or prompt-injected agents, can execute shell commands as the MCP server user.
Kali-GPT through commit a608c74 contains an OS command injection flaw in execute_tool() in kali_gpt/tools/mcp_server.py. The function passes unsanitized scanner parameters such as target, ports, domain, wordlist, or url to subprocess.run with shell=True, so MCP clients can run commands. An attacker or a prompt-injected agent can embed shell metacharacters in these parameters, and the commands run as the MCP server user.
esp-mcp through commit 28afddf contains an OS command injection vulnerability that lets attackers run arbitrary commands by supplying shell metacharacters in MCP tool parameters. Attackers who influence agent tool calls through prompt injection can inject metacharacters into the target, port, project_path, or project_name values passed to asyncio.create_subprocess_shell, executing commands as the MCP server user.
ATXP Gemini CLI extension through 1.0.0 has an OS command injection flaw in runAtxp(), which fails to sanitize MCP tool parameters. An attacker can plant instructions in email or SMS content that inject $() or backtick substitutions into parameters such as message_id, subject, or query, running commands as the user.
DroidMind through 0.4.0 contains a command injection flaw (CVE-2026-117559) that lets MCP clients bypass the shell command allowlist using $(...) or backtick substitution. Attackers, including prompt-injected agents, can pass commands through parameters interpolated into Device.run_shell() or the unvalidated Device.list_directory() to run blocked commands such as reboot on connected Android devices.
The ai-sdlc plugin MCP server through 0.31.2 contains an OS command injection vulnerability. Attackers can run commands by supplying shell metacharacters in the repo argument, which is interpolated unvalidated into gh issue view or gh pr view commands executed via execSync(). Prompt-injected agents can trigger this, executing commands as the MCP server user.
CVE-2026-92546 is an authentication bypass by spoofing vulnerability in Keepnet Labs Cybersecurity Inc.'s Agentic AI / Agentic Ally, which allows authentication bypass. It affects Agentic AI / Agentic Ally before 0ef61f2e.
CVE-2026-116843 affects Mistral Vibe before 3.0.3. Attacker-defined git filter drivers in an untrusted repository's .git/config are executed when Vibe is started with --worktree, because git worktree add applies .gitattributes and runs filter smudge, clean, or process commands before the trusted-folder check. The result is execution of attacker commands with user privileges.
Mem0's Python SDK before 2.0.18 and TypeScript SDK before 3.1.6 build session scope keys by joining caller-controlled user_id, agent_id, and run_id values with unescaped & and = delimiters in _build_session_scope() and Memory.buildSessionScope(). A caller can embed another scope component in an identifier so that distinct tenant tuples yield the same session_scope key, which Memory.add(), AsyncMemory.add(), and POST /memories use to read and save recent raw messages. This enables cross-tenant conversation disclosure and eviction or interleaving of another tenant's history.
Rembg versions before 2.0.82 expose the public /api/remove endpoint, which passes the attacker-controlled extras.sam_model value into SAM filenames and GitHub download URLs fetched by pooch.retrieve() without a pinned hash. An unauthenticated attacker can use path traversal combined with URL fragment syntax to make attacker-chosen ONNX encoder and decoder files download beside a target file, which the graphs can read via ONNX external data and encode into the returned PNG mask, disclosing complete files readable by the rembg process and enabling arbitrary ONNX computation.
ONNX versions prior to 1.22.0 have a flaw in _unpack_2bit() and _unpack_4bit(), which resize unpacked arrays based on attacker-controlled TensorProto.dims without checking that raw_data or int32_data holds the declared number of elements. Materializing an untrusted UINT2, INT2, UINT4, INT4, or FLOAT4E2M1 tensor via onnx.numpy_helper.to_array() or onnx.reference.ReferenceEvaluator can expand a small packed payload into a disproportionately large allocation, exhausting memory.
Fixed in version 1.22.0.
ONNX versions 1.4.0 through 1.22.0 contain a flaw in ScanInferenceFunction, ScanInferenceFunction_opset8 and ScanInferenceFunction_opset9, which do not safely validate the required num_scan_inputs attribute. A missing attribute is dereferenced as a null pointer, and a negative value is converted to size_t and can reach an oversized allocation path. An untrusted model can terminate or disrupt shape inference, including a negative-value model that passes onnx.checker.check_model().
Fixed in version 1.22.0.
From ONNX 1.2.1 through 1.22.0, ConvTranspose shape inference indexes an empty effective_kernel_shape when a weight tensor has fewer than three dimensions and no kernel_shape attribute is set. An untrusted model that passes onnx.checker.check_model() can crash onnx.shape_inference.infer_shapes(), causing denial of service; no confidentiality or integrity impact was demonstrated.
Fix: Fixed in 1.22.0.
ONNX versions prior to 1.22.0 have a flaw in RNNShapeInference_opset1_to_6(), which handles malformed RNN and LSTM nodes from opsets 1 through 6 and GRU nodes from opsets 3 through 6 without checking that the first input has rank three. The function reads dim(0) and dim(1) on an undersized protobuf shape, which can read outside the intended repeated field. An untrusted model that passes onnx.checker.check_model() can terminate an application that calls onnx.shape_inference.infer_shapes().
Fixed in version 1.22.0.
CVE-2026-115918 affects vLLM, an inference and serving engine for large language models, from version 0.16.0 through 0.32.0. An authenticated caller of the /v1/responses endpoint can supply an attacker-controlled template in chat_template_kwargs[chat_template] when no server template is configured, because ChatParams.get_apply_chat_template_kwargs() keeps that value without enforcing trust_request_chat_template. The bypassed trust policy lets the attacker exhaust CPU or memory through Jinja rendering.
Fixed in 0.32.0.
vLLM versions prior to 0.32.0 configure the OpenAI-compatible server's Starlette CORSMiddleware with allowed_origins set to a wildcard by default. A malicious web page can use a victim's browser to call unauthenticated vLLM endpoints such as GET /v1/models and POST /v1/chat/completions on localhost, an internal network, or a VPN, consuming GPU resources and reading responses. Credentials are disabled by default, so cookie-based cross-site request forgery does not apply, and deployments using bearer authentication are exposed only when the caller already holds a usable token.
vLLM versions prior to 0.32.0 contain an off-by-one error in vllm/tokenizers/hf.py, where max_token_id is computed with an incorrect upper bound. A pre-tokenized prompt ID equal to the vocabulary size passes validation, and with tensor-parallel size one and a vocabulary that is an exact multiple of 64, VocabParallelEmbedding.forward does not mask it before F.embedding uses it. This triggers a CUDA device-side assertion that terminates the engine.
Fix: Fixed in 0.32.0.
Fix: Fixed in Python SDK 2.0.18 and TypeScript SDK 3.1.6.
Fix: This issue is fixed in version 2.0.82.
Fix: Fixed in version 0.32.0.