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.
86 items
Claude Code versions before 2.1.251 have a flaw in the Edit tool, which validates target paths by pathname and symlink resolution without binding them to the directory inode or file descriptor. On macOS, code running in the Bash sandbox can atomically replace an in-workspace parent directory with a symlink after validation, so the unsandboxed Edit implementation overwrites a user-writable file outside the workspace. Exploitation requires attacker-controlled code to run inside the sandbox, such as from a malicious repository or dependency script.
Fix: Fixed in version 2.1.251.
NVD/CVE DatabaseClaude Desktop on Windows, prior to 1.8089.0, calls git.exe through uv_spawn without an absolute path. Windows search-path resolution can therefore pick a malicious git.exe placed in the opened project's current working directory, so opening an attacker-controlled or shared repository executes the substituted program with the user's privileges.
Fix: Fixed in version 1.8089.0.
NVD/CVE Databasepraktor, a multi-agent Claude Code orchestrator with Telegram input, has a path traversal flaw in both Telegram upload sites in `internal/telegram/bot.go` before 0.9.1. The attacker-controlled document filename is concatenated into the destination path without sanitization, and `path.Join` collapses parent-directory traversal, so a remote Telegram user can write outside `uploads/` within the persistent agent workspace mounted at `/workspace/agent`. With `allow_from: []`, which permits all senders by default, no authentication is needed, and the attacker can plant or overwrite `CLAUDE.md`, instruction, skill, hook or configuration files that the agent reads on later runs. The demonstrated write scope is the workspace volume, not the unrestricted host filesystem.
The MCP Python SDK's server-side bearer authentication did not check that a token was issued for the receiving server (its audience). Where one authorization server issues tokens for several services, a valid token for another service was accepted by the MCP server. Affected versions are mcp 1.10.0 through 1.29.1 and 2.0.0 through 2.1.1.
Fix: Upgrade to mcp 1.30.0 or later (1.x) or mcp 2.2.0 or later (2.x), then set validate_token_resource=True in AuthSettings with resource_server_url set to the audience the authorization server puts in tokens, and return the token's audience from verify_token() as AccessToken.resource. Upgrading alone changes nothing. If your TokenVerifier already checks the audience, set validate_token_resource=False to silence the deprecation warning. If you cannot upgrade yet, reject any token whose aud does not include your server inside verify_token().
The Model Context Protocol Python SDK's Streamable HTTP and SSE client transports, and its OAuth client providers, followed HTTP redirects to any host. Custom headers such as an X-API-Key credential were sent to the redirect target, and on 307 or 308 redirects the request body was re-sent too, while a lone Authorization bearer header was dropped by the HTTP library. Affected versions are 1.8.0 through 1.29.1 and 2.0.0 through 2.1.1, and exploitation requires a trusted endpoint to redirect to a different origin.
The Model Context Protocol Python SDK's client validated tool results against server-declared outputSchema using jsonschema's default resolver, which fetched any unresolved $ref by opening the URL. A malicious server could make the client request http, https or file URLs from its own network position on every call, and because the fetch ran synchronously with no timeout, a target that stalled would freeze all sessions in the process. Affected versions are 1.10.0 through 1.29.1 and 2.0.0 through 2.1.1, for applications that use the SDK as a client.
Affected versions of the MCP TypeScript SDK put no limit on the size of HTTP POST bodies or on the number of messages in a JSON-RPC batch, so large requests can exhaust server memory and a long batch can block other clients. Exploitation needs no credentials unless the application authenticates requests before they reach the SDK, and stdio-only servers are not affected.
Fix: Upgrade @modelcontextprotocol/sdk to 1.30.1 or later for 1.x, and to @modelcontextprotocol/server 2.1.0, @modelcontextprotocol/node 2.1.0 and @modelcontextprotocol/hono 2.0.1 or later for 2.x, upgrading every installed package. Bodies over 4 MiB now get 413 and batches over 100 messages get 400; raise the maxRequestBodySize option if clients send larger bodies. If upgrading is not possible yet, cap request body size in a reverse proxy.
The MCP TypeScript SDK (`@modelcontextprotocol/sdk` 1.3.0 through 1.31.0, and `@modelcontextprotocol/server` 2.0.0 through 2.2.0) placed no limit on the number of array elements and object keys it validated per request. A single HTTP request within the default 4 MiB size limit can exhaust server memory and abort the process with `JavaScript heap out of memory`. No credentials are needed unless requests are authenticated before reaching the SDK, and stdio-only servers are not affected.
Upgrade to `@modelcontextprotocol/sdk` 1.32.0 or later, or `@modelcontextprotocol/server` 2.3.0 or later, then set the new `maxToolInputElements` option on `McpServer` (off by default), for example `new McpServer(info, { maxToolInputElements: 10_000 })`. Also lower the request size limit with `maxRequestBodySize` on the transport or `createMcpHandler()`, or the body parser's limit if the body is parsed manually. If upgrading is not possible yet, set `maxRequestBodySize`, which requires `@modelcontextprotocol/sdk` 1.30.1 or `@modelcontextprotocol/server` 2.1.0, or use a reverse proxy.
Affected versions of the MCP TypeScript SDK (@modelcontextprotocol/sdk 1.24.0 through 1.31.0) did not check which session created an experimental task. Clients sharing one InMemoryTaskStore could list, read and cancel each other's tasks. Only servers that pass taskStore to McpServer or Server are affected.
Fix: Upgrade to @modelcontextprotocol/sdk 1.32.0 or later. If you cannot upgrade yet, remove taskStore, or create one InMemoryTaskStore per session.
Affected versions of the MCP TypeScript SDK, including @modelcontextprotocol/sdk through 1.31.0 and @modelcontextprotocol/client 2.0.0 through 2.2.0, followed HTTP redirects to any origin in StreamableHTTPClientTransport, SSEClientTransport and the OAuth client functions such as auth(). A cross-origin redirect sent custom headers such as X-API-Key and the mcp-session-id header to the new origin, and on a 307 or 308 response it also sent the request body, including OAuth refresh_token and client_secret values. stdio clients are not affected.
Claude Agent SDK for Python, prior to 0.2.121, passes the resume option to the Claude CLI as a separate token without validation. A dash-leading value is parsed as an independent CLI flag, so an attacker can inject --mcp-config to define a stdio MCP server and execute arbitrary commands at CLI startup, outside SDK permission controls. Exploitation requires an application that passes untrusted input as the session ID to resume.
Fix: Fixed in version 0.2.121.
The MCP Python SDK's Streamable HTTP transport in stateful mode, the default, never reclaimed session state in affected versions 1.8.0 through 1.29.1 and 2.0.0 through 2.1.1. Sessions did not expire, DELETE left entries registered, and refused sessions kept running tasks, so any client that could reach the endpoint could grow server memory without bound until a restart.
Fix: Upgrade to mcp 1.30.0 (1.x) or 2.2.0 (2.x) or later, which add session_idle_timeout (default 1800 seconds) and max_sessions (default 10000) and discard sessions as soon as they end. If you cannot upgrade yet, pass stateless_http=True (1.12.0 or later) where no per-session state is needed, or restrict who can reach the endpoint.
Prior to version 2.1.179, the Claude Code and Claude Desktop plugin installation flow ran git checkout for a marketplace-pinned commit without checking that the resulting HEAD matched the pinned 40-character SHA. An attacker controlling a plugin repository on a Git host that allows SHA-shaped branch names could create a branch named after the reviewed commit, so checkout selected the branch tip and installed attacker-controlled plugin code. Exploitation requires a user to install the malicious plugin and pin it to the apparently safe hash.
A missing authorization flaw (CWE-863-style access control misconfiguration, as the source describes it as 'Exploiting Incorrectly Configured Access Control Security Levels') affects VideoWhisper Site Manager for ChatGPT, Claude, Codex (videowhisper-site-manager) from n/a through 1.2.10. The source tracks it as CVE-2026-107430 and does not describe the attack path or what an attacker gains.
Docker Sandboxes could fail open while masking credentials in protected proxy responses. When a response-body read returned data together with an error, affected handlers forwarded unmasked bytes. Code inside an authorized sandbox could use this to recover host-managed OAuth access and refresh tokens, or a derived Anthropic API key, that were meant to stay outside the sandbox.
Claude Code checked that a target file path was inside the project working directory at permission-check time, but re-resolved the path at write time without repeating the check. An attacker with write access to the shared workspace who could win a race condition could atomically replace a project file with a symlink, redirecting Claude Code's output to an arbitrary file outside the project sandbox. The flaw let a lower-privileged attacker redirect benign edits to sensitive files, such as shell configuration, in a higher-privileged session.
Users on standard Claude Code auto-update have already received the fix. Users performing manual updates are advised to update to the latest version.
Claude Code selected an API key stored on the device, such as one from an earlier `/login` or written into its configuration, over the user's valid Claude Enterprise or Team sign-in when fetching server-managed settings. If the settings endpoint rejected that key, the session ran without the organization's policy, or kept applying a stale cached copy, while still operating as the organization's account. Exploitation required local access to a device holding such a key, and the no-policy case also required that no managed settings had been cached. Endpoint-managed (MDM or file-based) settings were not affected. Claude for Enterprise was affected from version 2.0.68, and Claude for Work (Team) from version 2.1.38.
OpenClaw (npm package `openclaw`) before 2026.7.1 does not enforce the owner-only authorization requirement for Claude Code permission prompts delivered through the MCP channel bridge. An authorized non-owner channel sender with channel command access can approve or deny a pending permission request meant for the owner, so the requested action can proceed without owner consent. The practical impact depends on the pending action and the host capabilities requested by the Claude Code run.
Fixed in version 2026.7.1.
The upload_attachment methods in MCP Atlassian's Confluence and Jira integrations accept arbitrary file paths without path traversal validation. The validate_safe_path utility is used in the download paths but never called in the upload paths, so an authenticated MCP client, or an AI assistant manipulated via prompt injection, can read any file the server process can access and upload it to an attacker-chosen Confluence page or Jira issue.
Fix: Fixed in version 0.9.1.
NVD/CVE DatabaseFix: Upgrade to mcp 1.30.0 (1.x) or 2.2.0 (2.x) or later; no code changes are needed. Until upgrading, supply your own HTTP client with follow_redirects left at False (http_client= on streamable_http_client; httpx_client_factory= on sse_client and streamablehttp_client), and rotate any credentials a client may have sent to a host you do not control.
Fix: Fixed in mcp 1.30.0 (1.x) and 2.2.0 (2.x). The client now resolves references only within the server-sent schema document plus the standard JSON Schema metaschemas. Until upgrading, call tools only on trusted servers. As a partial stopgap, skip tools whose outputSchema contains an $id, or a $ref or $dynamicRef that does not start with #.
Fix: Upgrade @modelcontextprotocol/sdk to 1.32.0 or later, or @modelcontextprotocol/client to 2.3.0 or later. Redirects are now followed only within the same origin, and not at all in browsers. If a redirect may have reached a host you do not control, rotate the API keys and client_secret and revoke tokens. If you cannot upgrade yet, pass a fetch that refuses redirects, for example (url, init) => fetch(url, { ...init, redirect: 'error' }).
Fix: Fixed in version 2.1.179.
NVD/CVE DatabaseFix: Users on standard Claude Code auto-update have already received the fix. Users performing manual updates are advised to update to version 2.1.260 or later.
NVD/CVE Database