a running record of publicly disclosed security incidents in the Model
Context Protocol ecosystem. because what could possibly go wrong when
you let language models autonomously talk to everything?
149
incidents tracked
43
critical severity
67
high severity
219
CVEs assigned
numbers update as new incidents are disclosed.
filter:
2026 · october · 15
[high]no CVE assigned
The MCP TypeScript SDK's Cross-Client Leak Returns in the Package That Replaced It #
maxisbey published GHSA-jm63-cq47-j5jp on October 15, 2026 against @modelcontextprotocol/server 2.0.0 through 2.2.x, fixed in 2.3.0, crediting DavidCarliez and legitu1337. A server reached over HTTP that shares one stateless transport, or one McpServer or Server instance, across clients matches messages to connections by JSON-RPC id alone. Every SDK client numbers its requests from zero, so the ids collide and one client's responses and notifications travel down another client's connection. CVSS 7.7, no CVE. The advisory states that @modelcontextprotocol/sdk 1.26.0 and later are not affected, which is the version that fixed the same bug in February as GHSA-345p-7cg4-v4c7. It also states that the README examples for the Hono, Express, Fastify and Node packages showed the shared-instance pattern until this release. Upgrading is not enough on its own: 2.3.0 makes a second connect() fail with ALREADY_CONNECTED, so callers have to move to a per-request or per-session server.
EX.Aaj styles laughing with the undertaker behind him: the february fix, and version 2.0
commentary
February's advisory fixed this in @modelcontextprotocol/sdk at 1.26.0. The 2.x rewrite put the id collision back, and the quickstart examples taught the pattern that triggers it. Eight months to relearn that both clients start counting at zero.
impact
Concurrent users of a shared-instance HTTP MCP server receive each other's tool results, progress notifications and sampling requests. No attacker positioning is required, only ordinary concurrent traffic.
The TypeScript SDK Caps Its Request Bodies, Eight Weeks After Java and Two After Python #
maxisbey published two resource-limit advisories against the official TypeScript SDK on October 15, 2026, neither carrying a CVE. GHSA-f897-62hf-6gxq, CVSS 7.5, is HTTP server transports and handlers that cap neither POST body size nor JSON-RPC batch length; @modelcontextprotocol/sdk 1.30.1 adds a 4 MiB body limit and a 100-message batch cap, and the advisory notes that express.json() does not help because it does not limit batch length. GHSA-46jr-4wx8-v453, also 7.5, is the follow-on: one request inside that 4 MiB limit still exhausts the heap, because validation walks every array element and object key, so 1.32.0 adds a maxToolInputElements option that is off by default. The site carries the same server-side unbounded read in the Java SDK as id 149, published August 19, and in the Python SDK as id 148, published September 30. Credits on the TypeScript pair run to eight reporters, among them cybercraftsolutionsllc, hewei-gikaku, shmulc8 and root-Brainoverflow.
EX.Athree orangutans in silence: nobody mentioned the unbounded read to the other two
commentary
CVSS 7.5 four times across three SDKs, all Medium here, because a crash is all the attacker gets. The calendar is the better number. Java capped the body on August 19, Python on September 30, TypeScript on October 15, three teams reading the same specification and finding the same missing limit one at a time. The second TypeScript fix ships disabled, so the patched default still validates until it runs out of memory.
impact
An unauthenticated caller who can reach a Streamable HTTP server sends one oversized body, or one deeply nested tool argument under the size limit, and the process dies with a heap out-of-memory error. Stdio deployments are unaffected.
mac-shell-mcp Allows `pwd`, and Everything After the Semicolon #
VulnCheck published CVE-2026-108953 on October 12, 2026 against mac-shell-mcp before 2.0.0, credited to Bandana of HackWitHer and APIsec Research Labs. The server keeps a whitelist of commands an MCP client may run without an approval prompt. The whitelist decides on the command, and the arguments go to the shell, so calling an approved command such as pwd with an argument of ; followed by a second command runs the second command too. CVSS 8.5 at VulnCheck, vector AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H. Fixed in 2.0.0.
EX.Aanime man pointing at a butterfly: the whitelist deciding that pwd ; curl is pwd
commentary
An allowlist that reads the first token and hands the rest to a shell is not an allowlist. The approval prompt it suppresses is the whole product.
impact
Any MCP client, or any injected prompt that reaches one, runs arbitrary commands as the server user, with none of the approval prompts the whitelist exists to trigger.
Network-AI's Agent Hook Checks the First Field It Finds and Stops Looking #
VulnCheck published two Network-AI advisories on October 12, 2026, both fixed in 5.15.2. CVE-2026-109331 (7.5), credited to manus-use, is the ClaudeHookBridge PreToolUse hook, which matches its deny patterns against the first candidate field present in a tool call. An agent under prompt injection puts the payload in a field the matcher never reaches, Write content or an MCP script parameter, next to a benign file_path or command, and the deny list clears it. CVE-2026-109332 (2.3) is McpSseServer._handleRequest in lib/mcp-transport-sse.ts, which reflects any localhost Origin into Access-Control-Allow-Origin whatever interface the server bound, so a page the victim visits reads unauthenticated endpoints such as /health cross-origin from a non-loopback deployment.
EX.Aspongebob making a rainbow: the deny patterns, applied to whichever field came first
commentary
The deny patterns work exactly as written. They are reading a different field than the one the command comes out of, which is the failure mode every allow-or-deny layer bolted onto an agent will have until it reads the whole call.
impact
The hook sold as the guardrail between an injected agent and the filesystem passes web shells and scripts through, as long as an innocuous field comes first in the call.
The Eleven-Advisory Researcher Files Eight More in Four Days #
HaiND, filing as hieuPenguinnn, followed the eleven-advisory run of October 10 and 11 with eight more through VulnCheck. Seven are dated October 11. CVE-2026-108865 (8.8) is an OAuth2 server in AmoyLab Unla that never authenticates a resource owner, so anyone can register a client, take a code from /authorize and exchange it at /token for a token good for the gateway's OAuth2-protected MCP prefixes, its proxied upstream APIs and its injected credentials. CVE-2026-108859 (8.7) is mcp-go's StreamableHTTPServer.ServeHTTP reading POST bodies through io.ReadAll before validating anything. CVE-2026-108861 (5.3) is an Odoo MCP execute_method tool that reaches read and search_read with denied field names and gets their values back. CVE-2026-108851 (4.8) is phpMyFAQ's faq_search tool calling Search::searchDatabase(), which applies no user or group permission check. CVE-2026-108856, CVE-2026-108855 and CVE-2026-108854 (2.3 to 5.3) are three authorization failures around UnicomAI Wanwu's AppKeys, the first of which mints a key against another user's MCP server and opens sessions with the victim's upstream authentication. The eighth, CVE-2026-110616 (9.2) on October 14, is NullHub shipping an auth_token that defaults to null and is never assigned, leaving the /api/* management API open to anyone reaching a non-loopback listener.
commentary
Nineteen MCP advisories in five days from one person at one institute. The projects share no language, no vendor and no deployment model. What they share is that someone finally looked.
impact
Three of the eight need no credentials at all: a token minted out of Unla's OAuth2 server, NullHub's management API, which configures agent instances, provider credentials, cron jobs and MCP servers, and the memory exhaustion in mcp-go. The other five are ordinary users reading or revoking things that belong to other tenants.
One Researcher Files Eleven MCP Advisories in Two Days Across Eleven Unrelated Projects #
VulnCheck published eleven MCP advisories credited to HaiND of the Post and Telecommunication Institute of Technology, seven on October 10 and four on October 11, 2026, against eleven projects sharing nothing but the protocol. CVE-2026-108714 is the official MCP Kotlin SDK installing Ktor WebSockets with no maxFrameSize, so a small frame header declaring a payload near 2 GiB forces the allocation. CVE-2026-108716 is mcp-remote sending client secrets and receiving tokens over plain HTTP in its device-code grant whenever the discovered endpoints are non-loopback http URLs. CVE-2026-108585 is argocd-mcp passing an unvalidated applicationName into a URL, so a ../repositories/ value turns delete_application into an authenticated DELETE against repositories, clusters or projects. The rest run through Abilityai Trinity (CVE-2026-108756), Open Computer Use (CVE-2026-108721), Tabularis (CVE-2026-108604), InnoShop (CVE-2026-108591), 1MCP Agent (CVE-2026-108586), zotero-mcp (CVE-2026-108583), GenOffice (CVE-2026-108582) and Kortix Suna (CVE-2026-108115). VulnCheck's scores across the eleven run from 2.3 to 8.7.
EX.Atyrone biggums asking vulncheck for more MCP advisories on day two
commentary
The 8.7 is the Kotlin SDK one and it is availability only, so it does not lift the batch. A server that runs out of heap has given the attacker a crash and nothing else. The number worth looking at is eleven, filed by one researcher at one institute in two days, against projects whose only shared property is that each of them decided separately what an MCP tool argument is allowed to mean.
impact
Prompt-injected agents bypass read-only gates, delete Argo CD repositories, read `.env` files off disk and reach cloud metadata endpoints, and an on-path attacker collects mcp-remote's OAuth client secret along with its access and refresh tokens.
JeecgBoot's Permission Check on Its MCP Config Endpoint Is Commented Out #
VulnCheck published CVE-2026-108671 on October 10, 2026 against JeecgBoot through 3.9.5, credited to Yaqi Chao. The permission check on queryById in AiragMcpController is present in the source and commented out, so any authenticated user can read MCP server configurations. The record ids come from the /airag/app/queryById endpoint, which is not guarded either, and the configurations hand back MCP endpoint URLs, request headers and the outbound authentication tokens that go with them. VulnCheck scored it 7.1 under CVSS 4.0 and 6.5 under 3.1.
EX.Agesturing at the empty case where the queryById permission check used to run
commentary
The check is sitting in the file with two slashes in front of it. Whatever the reason, it shipped that way, and the endpoint handing out the record ids you need to use it was never guarded at all.
impact
Any authenticated JeecgBoot user collects the MCP endpoints the platform talks to and the tokens it authenticates to them with.
ToFu Fuzzes 273 MCP Servers and Verifies Bugs in 343 Tools #
Md Nazmul Islam Ananto, Pierre Prevost-Avenel, Colin Smith, Kyungtae Kim, Taegyu Kim and Arslan Khan submitted ToFu: Exploiting and Fuzzing the LLM-Orchestrator-Tool Trust Boundary to arXiv on October 9, 2026. The framework derives semantic security checks from the metadata a tool already publishes, adds a CWE-guided sanitizer corpus, and generates a fuzzing harness and an oracle per tool rather than per server. Run against 273 MCP servers exposing 3,405 tools, it reports 253 verified semantic security bugs in 118 servers, which the abstract counts the other way round as bugs in 343 tools across those same 118 servers. The paper's argument is about the boundary rather than the bug count: the orchestration layer does not enforce the input semantics a tool documents, and arguments the model generated get treated as trusted.
commentary
343 tools whose own schema was decoration, and 253 bugs behind them. The orchestrator is the part that was supposed to enforce the contract, and it is the part that does not.
impact
118 of the 273 open-source MCP servers tested carry at least one tool that does not enforce the input contract it advertises, and 343 individual tools do not. The paper is a preprint and has not been peer reviewed.
Splunk's MCP Server Sends Your Platform Token to Whatever URL the Tool Was Pointed At #
Splunk published SVD-2026-1004 on October 7, 2026 for CVE-2026-76286, affecting Splunk MCP Server below 1.2.1. A user holding mcp_tool_admin configures a custom API tool with a destination URL. When a user holding mcp_tool_execute runs that tool, the server sends the running user's Splunk platform authentication token to that URL. Whoever controls the destination captures the token and acts as the user who ran the tool. Splunk scored it 5.3, classified it CWE-918, credited Kuniyoshi Noguchi, and fixed it in 1.2.1.
commentary
Two capabilities, two different people, and the token travels from one to the other with nothing in between asking whether that URL should be getting it. Medium because the privileges it takes are real ones, not because a platform token walking out the door is a small thing.
impact
The configured destination receives a live Splunk platform token belonging to whoever invoked the tool, and can use it for that user's data and actions.
ToolHive's Filters Fail Open: Send a POST That Will Not Parse and the Middleware Waves It Through #
ToolHive published two more advisories on October 7 and 8, 2026. GHSA-g7gq-2r4g-3qw8, scored 7.1, covers a POST with a non-JSON Content-Type. Where Cedar authorization is not enabled, the validating webhook is never invoked, so an authenticated client calls methods and tools the webhook would have denied, mutating webhooks never apply their rewrites, and shared, per-user and per-tool rate limits are all exceeded. The audit log records only a generic event with no MCP method or tool name, so none of it shows up there. The same path skips the duplicate-member JSON check added for GHSA-hxx3-f8cg-r974. GHSA-rxgh-62mp-jq63 is the sibling: when the tool-call filter cannot decode the body, the tool allow-list is skipped, and so are tool name overrides, because the rewrite sits in the same branch. Both fixed in 0.51.4, and neither carries a CVE.
EX.Afry squinting at a Content-Type the filter could not read and allowed anyway
commentary
Both bugs are the same sentence: the component that decides whether to enforce the policy is the component that failed to parse the request. rdimitrov is credited as the finder on the first one, which is a maintainer auditing his own middleware, and that is the most encouraging detail in this entry.
impact
An authenticated client reaches tools the operator removed from the allow-list and methods the webhook would deny, at whatever rate it likes, and the audit log shows nothing useful afterwards.
OX Security Indexes 15,465 Public MCP Servers and Finds Six Sitting on Expired Domains #
OX Security published a census of 15,465 publicly indexed MCP servers drawn from five MCP registries, deduplicated to 5,095 unique hostnames. 15.6 percent of those hostnames resolve to infrastructure outside the United States, 19 of them in China and 18 in Russia. About 0.45 percent route through consumer tunneling services, mostly ngrok's free tier, which means the server is running on somebody's own machine. 2.3 percent no longer resolve at all, and six of those sit on lapsed domains that can be registered for between four and twelve dollars a year. Moshe Siman Tov Bustan, who leads the research team, wrote the public summary on October 6, 2026.
commentary
A registry entry is a promise that a hostname still means what it meant when somebody added it. Four dollars buys the other end of that promise. The report's own line about marketplaces is the one to keep: security is a recommendation, not a policy.
impact
Six listed MCP servers can be taken over by anyone willing to pay a domain registration fee, and agents still configured against them will keep connecting and sending whatever they were going to send.
Obot's CLI Login Mints an API Key and Hands It to Whoever Sent the Link #
Obot published four advisories on October 6 and 7, 2026. The worst is GHSA-2qcm-3gv6-2mfc, scored 8.1: an unauthenticated attacker starts a CLI login, sends the resulting link to a signed-in user, and receives that user's API key when they open it, with scopes and lifetime the attacker chose. CVE-2026-105138, scored 6.5, left static configuration values on MCP catalog entries readable by every user who could see the entry, which Obot's own advisory describes as the API keys and tokens for the services behind those MCP servers. CVE-2026-105139, scored 4.3, let a user read resources and use prompts from vMCP components their profile did not grant, the profile holding as a boundary for tools and nothing else. CVE-2026-105140, scored 4.2, is a race in auth provider group refreshes that could restore a group membership just revoked in the identity provider, for about one refresh interval. Reporters were daniel-mertz and xfscott. The patch release differs per advisory: the CLI login flaw is fixed in 0.26.0, the catalog and vMCP flaws in 0.26.2, and the group refresh race in 0.25.6 and 0.26.1, with 0.26.0 itself listed as affected by that last one.
commentary
Obot has been here before, for an authorization fix that covered /mcp-connect/ and left /mcp-connect-composite/ open, and the question is the same one again: who does this request belong to. The catalog entry is worse than it scores. Obot says plainly that upgrading moves the secrets into protected storage and cannot undo the exposure that already happened.
impact
One opened link gives an attacker a persistent API key carrying the victim's access to the Obot API, the LLM gateway and every MCP server behind it. If the victim is an admin, so is the attacker.
Grafana's mcp-k6 Reads Any File You Name, Unless You Prefix It With @ #
Grafana published CVE-2026-89039 on October 5, 2026 against mcp-k6, its MCP server for k6 load testing. A caller who can invoke the convert_playwright_script prompt passes a bare filesystem path as the playwright_script argument and receives the contents of any file the server process can read, including SSH keys and cloud credentials in that user's home directory. The server does apply a working-directory restriction, but only to arguments prefixed with @, and that restriction can itself be escaped with a symbolic link inside the working directory pointing outside it. Grafana scored it 6.5, filed it Medium, and fixed it in 0.7.0.
EX.Asquidward at the blinds watching a bare path skip the @-only working-directory check
commentary
The path check exists. It was wired to the one argument form that looks like it needs checking, and the bare path walks straight past it. Filed High against Grafana's 6.5 because what the attacker leaves with is the contents of ~/.ssh, which is not an information leak so much as a credential handover.
impact
Anyone able to reach the prompt reads arbitrary files as the user running the server, SSH private keys and cloud credential files included.
Both Official MCP SDKs Followed Cross-Origin Redirects With the Credentials Still Attached #
The TypeScript and Python SDK maintainers published matching advisories on October 2 and October 5, 2026. GHSA-6prh-2h8m-c8cw and GHSA-5h93-6whr-6q8j cover HTTP client transports and OAuth client providers that followed redirects to any origin. A redirected transport request handed the receiving origin its custom headers, an X-API-Key or a key set in requestInit.headers being the examples the advisories give, plus the mcp-session-id header in the TypeScript case, and on a 307 or 308 the request body as well. The same flaw applied to the OAuth providers' own discovery, registration and token requests, and the TypeScript advisory names refresh tokens and client secrets as what a redirected token request body can carry, recommending rotation. A lone Authorization bearer header was never exposed, because the HTTP libraries already drop it across origins, and the Python advisory is explicit that a malicious MCP server gains nothing here since it already receives the client's requests directly. The party who gains is a third origin the client gets sent to. GHSA-rvq5-wwqv-78pq and GHSA-w4fh-qvv9-3v23 are a separate finding: server-side bearer authentication could not itself check whether a token had been issued for the receiving server. A server is affected there only where it uses requireBearerAuth() or verifyBearerToken(), its authorization server issues tokens for other services, and its own verifyAccessToken() does not check the aud claim; a verifier that already validates the audience is not affected, and upgrading alone does not close it because the new expectedResource setting is off by default. TypeScript shipped a third on October 2, GHSA-22jm-h49p-29qw, in which the experimental taskStore never recorded which session created a task, so clients sharing one InMemoryTaskStore could list, read and cancel each other's tasks. Credits go to nickelsec, dodge1218, gdegrange and cipher-creator. None of the five advisories carries a CVE.
EX.Aphil swift patching rmcp in july while typescript and python keep pouring
commentary
The redirect fix is the interesting one, because the Rust SDK shipped it on July 2 as GHSA-9g45-5xwm-f3wc. rmcp spent three months patched while its two most-used siblings kept handing credentials to whoever answered the 302. The task-store bug has the same shape in reverse: Python fixed it on June 5, TypeScript on October 2. One protocol, five SDKs, and each one finds out separately.
impact
A third origin the client is redirected to receives the custom headers of whichever request was redirected, and on a 307 or 308 that request's body too. On a transport request that means an API key and the session header; on an OAuth token request it means a refresh token or client secret. Separately, a server whose own token verifier does not check the `aud` claim accepts tokens issued for any other service behind the same authorization server.
Patchstack Returns to the WordPress MCP Shelf for Three More, and One Has No Patch at All #
Ananda Dhakal published three further WordPress MCP plugin advisories through Patchstack on October 2, 2026, the same day as the last of the four the site already carries. CVE-2026-32582 is broken access control in IATO MCP through 1.12.0, scored 6.5 and fixed in 1.12.1. CVE-2026-39599 is broken access control in WDS MCP Content Manager through 3.10.4, scored 4.3, and Patchstack records no official patch available. CVE-2026-104402 is a different class, sensitive data exposure in Mindio Magic MCP through 0.5.6, scored 4.3, fixed in 0.7.1, with a Subscriber-level account listed as the prerequisite and no mechanism described. Patchstack's pre-embargo records state the vulnerability class, the affected versions and the fixed version, and carry no technical detail beyond that.
EX.Aleo laughing at the fixed-version field on WDS MCP Content Manager
commentary
Third Patchstack batch the site has carried in three weeks, all from the same researcher. The plugins change every time and the finding never does: software whose entire job is handing a WordPress install to an agent, shipped without checking who is asking. Thin entry because the source is thin, which is the honest way to write up an embargoed database record.
impact
On IATO MCP and WDS MCP Content Manager, low-privileged WordPress users reach MCP plugin functions their role does not grant, and on WDS there is nothing to upgrade to. Mindio Magic MCP is a Subscriber-level data exposure, which is as specific as its record gets.
Office-PowerPoint-MCP-Server Saves Your Presentation Wherever You Point It #
VulnCheck published CVE-2025-71427 on October 1, 2026, credited to Sonali Tyagi. Office-PowerPoint-MCP-Server through 2.0.7 takes file paths from its MCP callers and never confines them to the working directory, so an absolute path or a ../ sequence in save_presentation, open_presentation or the manage_imageoutput_path argument reads or writes anywhere the server process can reach. The advisory describes the practical route in as prompt injection: steer the agent with content it will read, and let it call the tool.
EX.Ahooded kermit: tell it to save the deck over ~/.ssh and it will
commentary
A tool whose whole job is writing a file to a given path, writing it to the given path. The prompt-injection step is nearly decorative. Anything that can already call save_presentation has the filesystem.
impact
Any file the server process can write gets overwritten, and any file it can read gets pulled into a presentation. The attacker needs no credentials of their own, only content the agent will act on.
Next.js Ships an MCP Endpoint in Its Dev Server, and Any Site You Visit Can Reach It #
Vercel published GHSA-39w2-rjm5-chcv on September 30, 2026, one of seven Next.js advisories published that day. The next dev development server exposes a Model Context Protocol endpoint and does not reliably restrict cross-site requests to it, so a malicious page a developer opens while the server is running can reach the endpoint and read back the project's location on disk, source code snippets out of error reports, the route inventory and the development logs. Production deployments do not serve the endpoint. Versions 16.0.0 up to 16.3.8 are affected, and 16.3.8 fixes it. Vercel rates it Low at CVSS 2.3.
EX.Atwo guys on a bus: production deployments, and whatever is running on your laptop
commentary
The Low rating is fair and the detail under it is the part worth keeping. A framework this widely deployed now starts an MCP endpoint on next dev by default, and the first advisory written against it is that nobody told it which origins may speak to it. NVD then copied this same description onto CVE-2026-94485, which is a separate Next.js bug with no MCP in it at all.
impact
A developer who opens the wrong page while running the dev server hands that page's operator their project file paths, route list and fragments of its source.
The MCP Python SDK Reads the Whole Body First and Never Lets a Session Go #
maxisbey published two advisories against the official Python SDK on September 30, 2026, both CVSS 7.5 and both CWE-770. CVE-2026-109527 (GHSA-fmmv-w9g8-j3gc) is every HTTP server transport and OAuth endpoint reading a request body into memory before checking its size, at two to three times the body's own size, with no credentials needed against the OAuth endpoints or against a server that does not require authentication, which is the default. 1.29.1 and 2.1.0 add one shared 4 MiB limit and a 413, though code that drives StreamableHTTPServerTransport directly rather than through the session manager still gets no limit and has to impose its own. CVE-2026-59951 (GHSA-84m7-p3x7-pcfv) is the other end of the same lifecycle: a stateful Streamable HTTP server never reclaimed a session, a client's DELETE ended the session without removing its entry, a refused opening request left a registered session with a task still running, and every session kept its parsed initialize parameters. 1.30.0 and 2.2.0 add a 1800 second idle timeout and a 10,000 session cap, both of which can be switched off by passing None. Credits run to razashariff and shmulc8 on the first, and rharang, evilgensec, Madan301 and nickelsec on the second.
commentary
Two 7.5s and both are Medium here, because availability is all either one buys. The pairing is the point: one advisory is the SDK reading too much at once and the other is the SDK forgetting to put anything down, published the same day by the same maintainer. The session fix ships with a documented off switch, which is how the next one of these gets filed.
impact
Anyone who can reach the endpoint grows the server's memory until it dies, either with one oversized body or with a stream of ordinary short requests that each leave a session behind. Only a restart clears the second one.
Patchstack Works Down the WordPress MCP Plugin Shelf and Finds Four Ways In #
Ananda Dhakal of Patchstack published advisories against four unrelated WordPress MCP plugins between September 29 and October 2, 2026. ByteCoreStack MCP Connector for AI Tools is the worst of them: CVE-2026-103068, scored 8.8, takes a subscriber to administrator, and is fixed in 1.2.4. MCP Content Manager Lite through 1.1.0 (CVE-2026-97239, 6.5) is broken access control reachable at the subscriber role and fixed in 1.2.0. WEBO MCP through 3.0.18 (CVE-2026-97242, 6.8) is arbitrary file deletion at the author role and fixed in 3.0.22. Airano MCP Bridge through 2.11.0 (CVE-2026-32585, 6.5) is broken access control at the contributor role, and Patchstack lists no official patch for it.
commentary
Four plugins, four vendors, one researcher, four days. Each one bolts an MCP tool surface onto WordPress and then leans on the role system to guard it, and subscriber is a role. The Airano bridge is the one to watch, because it is the one with nothing to upgrade to.
impact
On a site running the ByteCoreStack connector, anyone who can register as a subscriber takes the site. The other three turn the lowest roles that can log in into file deletion or access to data they were never granted.
OpenClaw's Read-Only Operators Can Mint a Ticket That Runs Write-Scoped MCP Tools #
VulnCheck published CVE-2026-102807 on September 29, 2026, credited to Wentao He. OpenClaw's mcp.app.view method issues a standalone ticket, and the MCP app view endpoint redeems that ticket to invoke tools without re-checking what the caller was allowed to do. An operator token carrying only operator.read therefore reaches MCP App tools that require operator.write. Versions before 2026.9.4 are affected. OpenClaw's own advisories do not cover this one; the batch it published on September 11 is a separate set.
EX.Athree-headed dragon: the scope check, the ticket, and the endpoint that took it
commentary
The scope gets checked once and spent twice. mcp.app.view reads the token, decides a read-only caller may look, and hands back a ticket that the next endpoint treats as proof of everything. A capability minted from a permission check outlives the check that justified it.
impact
An OpenClaw operator issued a read-only token invokes state-changing MCP tools, which is the entire distinction the two scopes exist to draw.
ToolHive's OAuth Callback Accepts a Login From a Browser That Never Started the Flow #
Stacklok published GHSA-2gjv-f568-6cxp against ToolHive on September 26, 2026, rated High at CVSS 8.1. The /oauth/callback endpoint ties a callback to a pending authorization using the state parameter alone and never binds that state to the browser that began the flow. An attacker with a registered client starts an authorization, lifts the upstream identity provider URL out of the redirect, and gets a victim to open it. The victim authenticates upstream and the server issues an authorization code for the victim's identity to the attacker's redirect URI. The device flow's verification form has the same gap, with no anti-forgery protection on submission. Versions from 0.8.1 up to 0.51.3 are affected, and the fix sets a random HttpOnly SameSite=Lax cookie at authorization time and requires it at the callback.
commentary
state proves a callback belongs to some flow somebody started. It was never built to prove the callback belongs to yours, which is what the cookie in the fix is for. This is the fifteenth ToolHive advisory since September 8.
impact
An attacker who gets a ToolHive user to open one link receives an authorization code minted against that user's upstream identity, and trades it for the victim's access to the MCP servers behind the proxy.
Penpot's Own Docker Image Sets PENPOT_MCP_SERVER_HOST to 0.0.0.0 and Puts the Unauthenticated MCP REPL Back #
Penpot fixed an unauthenticated MCP REPL in May. GHSA-22qr-rp27-j9wm, CVE-2026-45805, covered a ReplServer.ts that called this.app.listen(this.port) with no host argument, so Express bound 0.0.0.0:4403 and served an /execute endpoint that ran caller-supplied JavaScript through PluginBridge.executePluginTask(). On September 25, 2026 the maintainers published two more advisories against the same module, both reported by carfeii and both fixed in 2.18.0. GHSA-852x-m8p9-558v says the earlier fix was incomplete: /execute still has no authentication, the REPL ignores remote mode, and the project's own start-mcp-devenv script and official Docker image both set PENPOT_MCP_SERVER_HOST=0.0.0.0. GHSA-ch2q-6x56-qg5r is the sibling in PluginBridge.ts, where new WebSocketServer({ port: port }) never read the host setting at all. NVD assigned CVE-2026-100868 to the WebSocket bridge advisory.
EX.Aleo laughing into his drink: the unauthenticated REPL advisory, scored 0.0
commentary
The May fix went over PenpotMcpServer.ts, missed ReplServer.ts, and now the second pass has missed the shipping artifact. Setting the unsafe value in your own Docker image is a thorough way to undo your own patch. Both September advisories carry a CVSS vector whose confidentiality, integrity and availability metrics are all None, scoring 0.0, against the 8.8 the original carried in May.
impact
An attacker on the same network reaches an unauthenticated REPL that executes arbitrary JavaScript as the Penpot server process. The original disclosure demonstrated reading /etc/passwd, spawning shell commands, and dumping environment variables holding database credentials and API keys. Through the WebSocket bridge the same caller impersonates the browser plugin, reads plugin task payloads including code and file contents, and returns forged responses.
MCP Server for WordPress Verifies Its Nonce Except When the Attacker Picks the Condition #
Raphael P. Cigana disclosed three flaws in the MCP Server for WordPress plugin (ai-workflow-automation-ai-agent-hub) through WPScan on September 24, 2026, all fixed in 1.8.2. CVE-2026-96524, which WPScan scores 8.8, is the serious one: the plugin does not correctly verify the WordPress REST API nonce on cookie-authenticated requests when a condition an attacker can influence is present, which turns administrator-only actions into cross-site request forgery. CVE-2026-96525 and CVE-2026-96526, which WPScan scores 2.7 apiece, are missing authorization on the workflow REST routes. The first applies no ownership or capability check to workflow create, update and delete, and the second applies no object-level authorization check to a workflow route. WPScan is holding the proof-of-concept details for all three until October 8, 2026.
EX.Aspongebob making a rainbow: the REST nonce check, on a condition the attacker gets to pick
commentary
A nonce check that holds unless an attacker arranges otherwise is not a nonce check. The two low-scored ones are the ones worth reading twice: this plugin's entire job is to expose a WordPress site to an agent, and it shipped with the workflow routes open to the lowest role that can log in.
impact
An attacker who gets a logged-in administrator to load a crafted page creates a new administrator account. Separately, any Contributor rewrites or deletes site-wide workflow configuration including workflows an administrator built, and reads the title and publication status of every private, draft, pending and scheduled post, page and custom post type on the site.
IBM ContextForge Confines Log Downloads With str.startswith(), Which the Sibling Directory Also Satisfies #
IBM published a ContextForge MCP Gateway bulletin on September 24, 2026 for CVE-2026-77825, a path traversal in the Admin API log-download endpoint GET /v1/admin/logs/file. The path confinement check uses str.startswith() rather than a boundary comparison, so a filename that resolves into a sibling directory whose absolute path shares the configured LOG_FOLDER string prefix passes the check. IBM scores it 4.9 and the vector requires an authenticated administrator. Versions 1.0.0 through 1.0.8 are affected.
commentary
/var/log is a prefix of /var/log-backup, and that is the whole bug. Prefix matching is not path containment, which is the reason os.path.commonpath and Path.is_relative_to exist.
impact
An authenticated administrator reads .log, .jsonl and .json files from outside the configured log directory.
GitLab Patches Its Own MCP Surface: a Token Scope Bypass and a Search That Answers as the Wrong User #
GitLab shipped 19.4.1, 19.3.3 and 19.2.7 on September 23, 2026, and two of the fixes land on its MCP surface. CVE-2026-92874, which GitLab rates Medium, is incorrect authorization in MCP API scope enforcement: an authenticated user holding an MCP-scoped token could perform actions beyond that token's intended scope. It affects 18.3 and later, up to the patched releases. CVE-2026-92628, which GitLab rates Low, is a race condition in the gitlab_search MCP tool, where shared state handling could return search results under an incorrect user context. It affects 18.6 and later, on the same boundary. GitLab credits both to its own staff, Amr Taha and Chris Bonk respectively.
EX.Atyrone biggums asking: any more gitlab mcp authorization bugs, any codebase will do
commentary
Four days earlier, read-only mode in the third-party @zereight/mcp-gitlab server fell over to a leading comma. Different people, different codebase, same two questions: does this token's scope actually bind, and whose identity is this request running under. Putting shared mutable state in a search tool is one way to find out.
impact
An MCP-scoped token reaches actions it was never granted. Under the race, one user's MCP search returns results resolved in another user's context.
WSP's MCP Connector for WordPress Is Broken at the Contributor Role, and the Advisory Will Not Say How #
Ananda Dhakal of Patchstack disclosed CVE-2026-93529 on September 23, 2026 against the WSP MCP AI Agents Connector plugin, affecting versions 2.7.0 and earlier and fixed in 2.7.1. Patchstack records it as broken access control reachable at the Contributor role and scores it 6.5. The public record carries no technical specifics beyond that category and Patchstack's generic description of the class, that users can access pages or perform actions they should not, such as viewing other people's data. Patchstack rates the likelihood of exploitation as low.
commentary
Two WordPress plugins whose purpose is handing an agent the keys to a site, disclosed a day apart, both broken at the Contributor role. Withholding the detail until users have patched is reasonable practice and it does leave the interesting half of this one unwritten.
impact
A user holding the lowest publishing role on the site reaches plugin functionality or data the plugin meant to restrict. Patchstack does not say which.
Traceforce Files Four MCP Advisories in One Day and Three of Them Have Nothing to Upgrade To #
Abhijeet Kumar of Traceforce published four MCP advisories on September 22, 2026. The MetaMCP pair is the serious half. CVE-2026-79538 is command execution in the inspector proxy: the STDIO branch of createTransport behind GET /mcp-proxy/server/stdio takes its process parameters from the request rather than resolving them from a server record, registration is open by default, and the only gate is a logged-in session. CVE-2026-79537 is a cross-tenant session hijack, where getSession keys the session store on the client-supplied mcp-session-id header with no owner or namespace binding, the per-endpoint authorization middleware validates only the endpoint's owner, and GET /metamcp/health/sessions hands out live session IDs to anonymous callers. CVE-2026-79535 is OS command injection in VoiceMode's update_config tool, which writes caller-supplied values into voicemode.env escaping only quotes, so backticks and command substitution survive to the next service start. CVE-2026-79534 is directory traversal in mark3labs mcp-filesystem-server, where validatePath falls back to checking only the parent directory when filepath.EvalSymlinks meets a dangling symlink.
EX.Adog at the table as the room burns: three of the four shipped with no fix
commentary
MetaMCP's inspector proxy takes the command to run from the request body, which Traceforce's own write-up points out is CVE-2025-49596 in the official MCP Inspector, filed again in something that proxies for it. The health endpoint is what upgrades the session bug from careless to trivial: it publishes the one value the session store trusts.
impact
Anyone who registers a MetaMCP account runs commands inside the application container. An unauthenticated caller reads active session IDs and then drives another tenant's private MCP tools using that tenant's own forwarded credentials. Only VoiceMode had a fixed release on the day, in 8.10.2.
ToolHive's Second Advisory Batch in Two Weeks: an MCP Session Belongs to Whoever Knows Its ID #
Stacklok published six more ToolHive advisories on September 21 and 22, 2026, thirteen days after the batch of eight that landed on September 8. GHSA-hqg7-qjgg-q779 leads: the direct streamable proxy and the transparent proxy both authenticate each HTTP request and neither checks that the requester owns the MCP session named in it, so an authenticated user who learns another user's session ID reads session-scoped backend responses, injects messages, evicts the victim's SSE connection and deletes the session, all while holding a valid token of their own. GEONWOOHAN reported it and the advisory states it has no known CVE. The rest of the batch covers resource subscriptions and completion/complete skipping per-resource and prompt authorization in the direct proxies, ambiguous JSON members getting past the MCP authorization and argument policies, the legacy HTTP+SSE proxy confusing JSON-RPC responses between authenticated sessions, and the OAuth client secret written to the local run-state file in cleartext.
EX.Athree orangutans in silence: nobody asked who owned the session
commentary
The September 8 batch was authorization wired up wrong. This one is authorization that runs and asks the wrong question. completion/complete is the one to keep: the autocomplete path reaches prompts and resources that every other path denies, because nobody thinks of autocomplete as a way to read things.
impact
An authenticated ToolHive user who learns another user's MCP session ID reads that session's responses, writes into it and kills it. Several of the authorization policies an operator configures are reachable around rather than through.
IBM's Payments Product Lets Anyone Write the Runbooks That Steer Its MCP Tool Calls #
IBM published a Financial Transaction Manager bulletin on September 21, 2026 carrying 47 CVEs, exactly one of them on the MCP surface. CVE-2026-18875 is RAG poisoning in the FTM AI agent server: api.vectordb.runbooks.js:51 accepts a runbook upsert without authentication, so anyone who can reach the endpoint writes content into the vector database the agent retrieves from. IBM scores it 7.3 and describes the consequence as steering the product's AI-driven MCP tool calls. FTM 4.x is affected.
EX.Athe mask coming off: the runbook the payments agent retrieved and trusted
commentary
Most prompt-injection entries here end with an agent doing what some untrusted text told it. This one starts there, and the untrusted text arrives through an unauthenticated write to the retrieval store, in a product whose job is moving money. It is one line in a bulletin of 47.
impact
An unauthenticated attacker plants content in the knowledge base a payments agent reads, and IBM states the result can be unauthorized payment actions or exfiltration of payment data.
A Leading Comma Turns the GitLab MCP Server's Read-Only Mode Back Into Write Access #
The maintainer of @zereight/mcp-gitlab published two advisories on September 19, 2026, both against versions before 2.1.30 and neither carrying a CVE. GHSA-64mg-3vx9-g74j, rated 8.1, concerns execute_graphql: the tool decides whether a query writes by inspecting how it starts, and a query beginning with a comma slips past the write detector while GitLab still runs it as a mutation. The same handler also skips the project-scope check every other project-scoped tool applies, so GITLAB_ALLOWED_PROJECT_IDS does not constrain it either. GHSA-24vp-rch2-gjqq, rated 7.5, is session exhaustion: validateToken confirmed that a token looked like a token, 20 or more characters in the right character set, and allocated a session before asking GitLab whether it was real. Fabricated tokens fill the default pool of 1,000 sessions and legitimate clients get 503s for the hour-long session timeout.
EX.Ahooded kermit: put a comma in front of it and the read-only check looks away
commentary
Read-only mode was a guess about the first character of a string. ,mutation{...} is not a clever bypass; it is a guard and a parser disagreeing about what a query looks like, which is the only thing that ever goes wrong in this class of bug.
impact
A semi-trusted client or a prompt-injected agent writes to GitLab projects the operator believed were read-only, and to projects outside the configured allow-list, using the server's own token. Separately, anyone can hold the server's session pool closed for an hour with tokens they invented.
Obot's Authorization Fix Blocked /mcp-connect/ and Left /mcp-connect-composite/ Open #
Obot published GHSA-6fwv-3h4c-37j9 on September 17, 2026, rated 8.1 and reported by arpitjain099. In May the project closed GHSA-vw82-7fv8-r6gp, a Critical bypass that let any authenticated user drive any registered MCP server, by adding /mcp-connect/ to the UI fallback deny list. The composite route is /mcp-connect-composite/{mcp_id} and it reaches the same mcpGateway.Proxy handler, but the deny entry carries a trailing slash and the prefix check never strips it, so the composite path does not match and is not denied. Versions 0.21.1 through 0.24.1 are affected. The advisory lists no patched version.
EX.Aflex tape over one route while the other one keeps pouring
commentary
Two routes, one handler, and a deny list that knows about one of them. Four months of believing the May bypass was closed came down to a trailing slash in a string comparison.
impact
Any authenticated user holding only the Basic role connects to MCP servers they were never granted, calling their tools and reading their data through the composite gateway route.
Casdoor's /api/mcp Hands Any Application's Credentials Every Organization's User Table #
George Chen disclosed CVE-2026-91998 through VulnCheck on September 15, 2026. Casdoor is an open-source identity and access management server, and its /api/mcp endpoint authorizes a caller by application credentials without binding that caller to an organization. Any valid clientId and clientSecret pair, from any application registered on the instance, reaches user administration across every organization on it. Casdoor through 4.4.0 is affected and the advisory names no fixed version. VulnCheck scores it 9.4 under CVSS 4.0 and 9.9 under 3.1.
commentary
The entire job of an identity server is deciding who may touch which tenant. This one asks for a credential, is handed one, and stops asking.
impact
One application's credentials enumerate every organization's user records, including email addresses and password salts, and can create, modify, or delete administrator accounts in any organization on the instance.
Bifrost Runs Whatever Program You Register as an MCP Client, and Auth Ships Off #
JFrog Security Research disclosed CVE-2026-90898 on September 14, 2026, credited to Yuval Moravchick. Bifrost registers MCP clients through its management API. A stdio client is a command plus arguments, and the gateway starts that program the moment the client is added, with no MCP handshake first. governance.auth_config.is_enabled defaults to false, which makes every caller a local admin, so one unauthenticated POST /api/mcp/client runs a program as the Bifrost process user. The 1.6.x line through 1.6.11 and transports/v2.0.0 are affected. transports/v2.1.0 refuses an unauthenticated stdio registration with a 403. NVD scores it 9.8.
commentary
Registering a client and executing it are one operation here, and the thing standing between them is a boolean that ships false. The remediation advice tells you what the vendor thinks the odds are that someone already found this.
impact
A single unauthenticated HTTP request executes arbitrary commands on the gateway host. JFrog's guidance is to treat any instance that ran with authentication disabled as compromised and to rotate virtual keys and provider credentials.
Two More IPv6 Spellings Get Past mcp-searxng's URL Filter #
On September 13, 2026 the mcp-searxng maintainer published GHSA-q9wf-wwq5-qmjf and GHSA-f653-hpvm-8rfh, both against web_url_read, the tool behind four of the project's June advisories. The first, rated 6.0, blocks IPv6 unique-local addresses at fc00::/7 and never added site-local fec0::/10, deprecated by RFC 3879 in 2004 and still answered by legacy and embedded gear. The second, rated 6.8, recognises the IPv4-mapped form ::ffff:<v4> and misses the other IPv4-embedded forms the advisory names: the NAT64 well-known prefix 64:ff9b::/96, 6to4 at 2002::/16, and the IPv4-compatible and IPv4-translated notations. Both are fixed in 2.2.0 and neither carries a CVE.
commentary
Six advisories now against the same function, each one a different way of writing an address the filter already meant to refuse. A deny list of notations is not a control, it is an inventory of the notations somebody has thought of so far.
impact
A URL arriving through prompt-injected content reaches internal HTTP services and returns their responses as markdown. On a host behind a DNS64/NAT64 gateway, which is the normal arrangement in IPv6-only AWS subnets, that includes 169.254.169.254 and whatever IMDSv1 answers without a token.
Anthropic's Claude Agent SDK Let a Session ID Turn Into an MCP Server #
OctavianGuzu published GHSA-h4mw-j7qp-8mwm on September 12, 2026 against the Python claude-agent-sdk, crediting moamenmahmood on HackerOne. The SDK passed the resume option to the Claude CLI as its own token with no validation, so a value beginning with - was parsed as a separate flag rather than a session ID. An attacker who controlled that value injected --mcp-config, defined a stdio MCP server of their choosing, and got arbitrary command execution at CLI startup, before the SDK's permission controls applied. CVSS 9.2 under 4.0, CWE-88. Fixed in 0.2.121, which PyPI shows published on July 17, 2026, almost two months before the advisory and three before NVD published the record as CVE-2026-96620. It is the only advisory the repository has ever published.
commentary
Filed High rather than the advisory's Critical, because reaching it needs an application that feeds untrusted input to resume. The shape needs no conditions at all. A permission system was argued out of the way by a leading dash, in the SDK whose job is to enforce it.
impact
An application that passes a user-supplied session ID into `resume` hands the caller command execution on the host running the agent, with the SDK's approval prompts skipped entirely.
OpenClaw's Owner Check Is Missing in Four Places, and One of Them Persists an MCP Command That Runs on Load #
joshavant published four OpenClaw advisories on September 11, 2026, all missing-authorization findings on the MCP surface, and VulnCheck assigned CVEs to them two weeks later on September 25. GHSA-wwx7-573h-pqwc, which the advisory scores 8.8, is the worst of them: an authorized non-owner sender on an external channel runs /mcp set or /mcp unset and persists a Gateway MCP server entry, so an attacker-selected stdio MCP command executes as the OpenClaw process user the next time configuration loads (CVE-2026-100596, reported by yetval). GHSA-pjjr-5qhr-5w6r, also 8.8, is the same shape through the Codex computer-use install command (CVE-2026-100587, wwwvwwvwwwwwvwwvw). GHSA-p5g8-m35v-7m82 lets a non-owner channel member approve or deny a pending Claude Code permission request meant for the owner (CVE-2026-100585, whyiug). GHSA-5m4g-88rg-69pj, the mild one at 3.3 on the same scale, lets a sandboxed coding-agent session list and invoke tools that sandbox.tools.deny excluded, by way of the bundled MCP loopback (CVE-2026-100573, qc9c). The first three are fixed in 2026.7.1 and the fourth in 2026.8.1.
commentary
Three of the four are one question the code never asked: is the person typing this the owner. The permission-prompt finding is the one to sit with, because a human-in-the-loop approval dialog is the entire safety argument for an agent holding host access, and this one took an answer from whoever else happened to be in the channel.
impact
A channel participant who was never the owner installs plugin code and gets a host process of their choosing executed with the agent's privileges. On the permission-prompt finding, they answer the consent dialog that exists to stop exactly that.
AWS Security Agent's MCP Server Uploads Scanned Source to a Bucket Name Anyone Could Register First #
AWS security bulletin 2026-105, published September 10, 2026, covers CVE-2026-87912 and CVE-2026-87913. The AWS Security Agent plugin in aws-agents-for-devsecops before 1.1.0 and the AWS Security Agent MCP server before 0.2.0 did not verify that the S3 bucket holding a scanned workspace's source archive belonged to the caller's own account. The bucket name derives from a publicly known account identifier, so another account could pre-register that name and receive the archive. Nadav Claude Cohen of glow.io reported both through coordinated disclosure. AWS's stated precaution is to pre-create the bucket in your own account before first use so the predictable name cannot be claimed by someone else. NVD scores CVE-2026-87913 at 5.9.
commentary
The mitigation is a race you have to enter deliberately. An agent whose entire job is finding secrets in your code wrote that code to a bucket named after a public identifier, and the advice is to squat your own bucket before a stranger does.
impact
Whoever registers the predictable bucket name first receives the private source archive of each scanned workspace, including credentials and infrastructure state contained in it.
Knowns Publishes Six Advisories in One Day, and an HTTP Header Picks the Agent's Working Directory #
The knowns project published six security advisories on September 9, 2026, all reported by uziii2208. The most severe, GHSA-9h2q-r9fh-f98w at CVSS 4.0 10.0, is in the reverse proxy for the bundled OpenCode AI daemon: proxyOpenCode() injected the server's own activeRoot only when the client-supplied value was empty, so any non-empty value passed through unmodified. A request setting the x-opencode-directory header or the directory query parameter to /root, /etc or ~/.ssh relocates the daemon's file tree, git interface and tool execution there. Two advisories rated 9.4 cover arbitrary file write and persistent code execution through malicious git template imports, where resolveDest() returns absolute paths unmodified, and a chained bootstrap-gate bypass that lets a session swap its own active project root after NewGuardMiddleware exempts project.set without checking session state. GHSA-5cj9-fcqq-g2h7 (CVE-2026-88938) is path traversal in the code.find MCP tool, which sits in every permission preset. A sixth advisory carries two SSRF bugs in the embedding-model test and git-clone import endpoints.
EX.Ahands spread across the pawn shop counter: four of the six advisories list no patched version
commentary
The 10.0 is not a parser trick or a clever chain. The agent asks the caller which directory to work in and believes the answer, and the fail-open conditional that does it reads as a convenience for the case where nobody said. Four of the six advisories say Patched versions: None, which is its own kind of disclosure.
impact
An unauthenticated request points an autonomous coding agent at any path on the host, and the agent's ordinary tools then read SSH keys, AWS credentials and .env files or write to shell profiles and cron for persistence. Four of the six advisories list no patched version.
AWS Postgres MCP Server's Read-Only Mode Runs Shell Commands Through COPY TO PROGRAM #
AWS published security bulletin 2026-104 on September 9, 2026 for CVE-2026-87911, an OS command injection in awslabs.postgres-mcp-server before 1.1.7. The read-only enforcement in the SQL validation component did not block every verb capable of system-level operations, so a COPY ... TO PROGRAM statement cleared the application-layer blocklist and ran on the PostgreSQL host. Exploitation needs the PG_WIRE_PROTOCOL connection method and a database role holding superuser or pg_execute_server_program; least-privilege roles are unaffected because Postgres itself refuses the operation. Mordehai Attia (Corsen AI) and Ryan von Brubeck reported it. The fix shipped in 1.1.7, which is also the release that fixed CVE-2026-85787, a separate read-only bypass AWS disclosed five days earlier in bulletin 2026-101.
commentary
Read-only described the validator's intention rather than its behaviour, twice, in the same component. Filed High against AWS's 9.6, because the shell only opens when the wire protocol and a superuser-grade role line up and a least-privilege role stops it dead, and this site grades on the realistic default rather than the number. Both bypasses were fixed in 1.1.7 and disclosed in separate bulletins five days apart, so anyone who patched on September 4 was already covered and had no way to know it.
impact
Crafted SQL reaching the server in its default read-only mode executes operating-system commands on a self-managed PostgreSQL host at the privilege level of the database process.
IBM ContextForge MCP Gateway Shipped Default Credentials Across Eight Releases #
IBM published a bulletin on September 9, 2026 for CVE-2026-78573, scored 9.8 with vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H: ContextForge MCP Gateway v1.0.0 through v1.0.7 allows a remote attacker to gain administrative access through the use of default credentials, filed as CWE-1392. ContextForge is IBM's MCP aggregation layer, so it sits in front of the MCP servers registered with it and the credentials it stores for them. It arrives a week after the four ContextForge bulletins dated September 2, which covered jq filter validation, cross-session data exposure and two DNS rebinding paths.
commentary
A gateway exists so credentials live in one place instead of many. CWE-1392 on the thing holding all of them is the half of that trade nobody puts in the architecture diagram.
impact
An unauthenticated attacker who can reach the gateway takes administrative control of it, and through it the registered MCP servers and the credentials the gateway holds on their behalf.
An npm MCP Package Promised to Auto-Sign Your Micropayments and Mailed Your Private Key Instead #
Tamir Isaschar of Knostic published an analysis of the npm package gadgethumans-mcp on September 8, 2026. The package instructs users to set WALLET_PRIVATE_KEY and says the agent will auto-sign x402 micropayments without any manual steps. It performs no local signing. The key is copied unchanged into an X-402-Wallet HTTP header and sent to the package's own endpoint on every outbound request for a recognised MCP tool call. viem, @x402/core and @x402/evm are declared in package.json and never imported, which is what signing would have required. Versions 1.0.3 and 1.0.9 ship a byte-for-byte identical index.js, and the repository behind 1.0.3 has since been removed. Knostic recorded 2,327 downloads across July and August 2026 and reported 1.0.9 as still the latest published version on npm on the day of writing. The analysis is static, so the receiving server's behaviour was not observed.
commentary
The manifests never say the key leaves the machine, and the three signing libraries sit in the dependency list importing nothing, doing no work except making the claim plausible to anyone who reads package.json instead of index.js. Knostic could only look at the source, so what the far end does with the keys is not in evidence. That is the one comforting sentence available here.
impact
Every recognised tool call sends a raw wallet private key in a header to a third-party endpoint. Anyone who configured the package should treat that key as spent.
ToolHive Publishes Eight Advisories in One Day, Led by Workloads That Run Unauthenticated While OIDC Is Configured #
Stacklok published eight ToolHive advisories on September 8, 2026. ToolHive's purpose is running MCP servers in isolated containers behind an authenticating proxy. GHSA-gc9p-rmpx-vv9j, rated 9.1, is the heaviest: a workload created through the API builds two representations of the OIDC settings, and the API path fills in RunConfig.OIDCConfig while passing a literal nil to the middleware builder. The factory sees nil and falls back to the unauthenticated LocalUserMiddleware, so the workload proxy accepts every request without a token. GHSA-h4mf-84xq-q2fc has any POST to a path ending in /sse skip the authz middleware on the transparent proxy and execute policy-denied MCP calls. The rest of the batch covers a permission profile mutated in place, leaking one workload's host volume mounts into later ones; an unauthorized resources/templates/list; a three-byte UTF-8 BOM defeating the tool allow-list in both directions; blind SSRF in the remote health pingers; and two OAuth credential-handling flaws. The advisory for the nil states that no CVE was assigned to it.
EX.Atimmy's dad gesturing at the empty case: this is where the OIDC middleware goes
commentary
Eight advisories in a day is a team that went looking properly, which is more than most projects on this site manage. The nil is still the one that stings: the configuration was correct, the plumbing dropped it on the floor, and nothing along the way said a word.
impact
An operator who configured OIDC and created workloads through the API was serving those MCP servers to anyone who could reach the proxy, with no token validation at all.
IBM's Langflow Bulletin Carries Eleven CVEs, Three of Them on the MCP Surface #
IBM published a Langflow OSS security bulletin on September 8, 2026 covering eleven CVEs in versions 1.0.0 through 1.11.5, all fixed in 1.11.6. Three of them are MCP. CVE-2026-85025, which IBM scores 9.8, is improper enforcement of public-flow security restrictions and session isolation on publicly shared MCP project endpoints, letting an unauthenticated attacker execute code and access or modify other users' chat sessions. CVE-2026-81941 (8.8) lets an authenticated non-administrative user run operating-system commands by building a flow whose MCP Tools component uses a local stdio subprocess transport, which bypasses both the LANGFLOW_CUSTOM_COMPONENT_ADMIN_ONLY and LANGFLOW_BLOCK_CODE_INTERPRETER_COMPONENTS server-side controls. CVE-2026-78575 (8.8) is command-argument validation in the MCP stdio server configuration: IBM's description says the Windows validator recognises only one cmd.exe execution switch, so alternate switches clear the command allow-list, and OPENSSL_CONF is absent from the environment blocklist.
EX.Aoprah gesturing to the audience: publicly shared MCP project endpoints, and the sharing included code execution
commentary
Two of the three are bypasses of controls Langflow shipped specifically to stop this. LANGFLOW_BLOCK_CODE_INTERPRETER_COMPONENTS is an unusually clear name for a setting that the MCP Tools component does not consult.
impact
An unauthenticated caller who reaches a shared MCP project endpoint gets code execution and access to other users' sessions. Any authenticated user can reach a shell through the MCP Tools component regardless of the two settings that exist to prevent it.
Rowboat Checks That Your Custom MCP Server URL Has a Scheme #
VulnCheck published CVE-2026-86122 on September 5, 2026, again crediting George Chen, against Rowboat through 0.9.1. Adding a custom MCP server or a webhook runs the URL through a check that validates the scheme and nothing else, and the agent-tools component then fetches it. Any authenticated user can point either at an internal address. VulnCheck scores it 5.3, NVD 5.0.
commentary
Three advisories in two days from one researcher, all the same finding in different products: a URL that a user supplies, a fetch that a server performs, and nothing in between. Postgres MCP Pro and OGX were the other two.
impact
An authenticated Rowboat user maps the internal network from the server side and reaches cloud metadata endpoints through the custom MCP server and webhook fields.
mcp-chrome Matches 127.0.0.1 as a Substring, So 127.0.0.1.evil.com Passes the Origin Check #
carfeii filed a public issue against hangwin/mcp-chrome on September 4, 2026, describing an origin validation flaw in the native-server HTTP API. The check substring-matches http://127.0.0.1, so an attacker-registered domain such as 127.0.0.1.evil.com satisfies it and any web page can make credentialed cross-origin requests to the local server. VulnCheck assigned CVE-2026-102878 and published its own advisory on September 29, crediting carfeii and scoring it 8.6. mcp-chrome-bridge through 1.0.31 is affected.
commentary
Prefix-matching an origin is a durable way to lose. The browser tells you the origin honestly; the trouble is that 127.0.0.1.evil.com genuinely does start with 127.0.0.1, and its owner picks where it resolves.
impact
A page the user happens to visit drives the browser automation tools the bridge exposes, which covers executing scripts, reading page content and taking screenshots.
Two Postgres MCP Servers, One Day, Both SQL Validators Short a Syntax Form #
AWS and Crystal DBA each disclosed a read-only bypass in a Postgres MCP server on September 4, 2026. AWS bulletin 2026-101 covers CVE-2026-85787 in awslabs.postgres-mcp-server before 1.1.7, which AWS describes as an incomplete list of disallowed inputs in the SQL validation component, letting injected SQL escape the read-only restriction and modify the database. Ashwak N reported it. The same day VulnCheck published CVE-2026-85620 against Crystal DBA's Postgres MCP Pro through 0.3.0, credited to George Chen: safe_sql.py applies its function-name validation to ordinary function calls but not to RangeFunction nodes, so putting the call in the FROM clause reaches pg_read_file and reads arbitrary files off the host. VulnCheck scores it 9.2 and NVD 8.6; neither scores the AWS issue above 6.5.
EX.Asign reading zero days without a sql allowlist meeting a syntax form it had not met
commentary
Both products sell the same promise, which is that an agent can be handed a database connection safely because a validator sits in front of it. Both validators were written as a list of things to reject, and SQL is a language with more syntax than anyone finishes enumerating. The FROM clause is not an exotic corner of it.
impact
A caller who is only supposed to be able to SELECT writes to the database on one server, and reads arbitrary files off the database host on the other.
mcp-shell Patches Its Fifth and Sixth Secure-Mode Bypass, Then Deletes the Feature #
sonirico published two more mcp-shell advisories on September 4, 2026, neither with a CVE. GHSA-xvpv-9qcq-636h, reported by orca0xeaa5a, is a denied-flag policy that compares flags as exact strings while git accepts any unambiguous abbreviation, so git blame --cont=<path> gets through the check that --contents would not and reads files outside the working directory. GHSA-gg85-6grh-63fp, reported by CyberKareem, is the wrapper problem: isInterpreterExecutable knew about bash, python and ruby, and did not know about env, timeout, nice, nohup or xargs, so an operator who allowlisted any of those reasonable-looking utilities got arbitrary execution back. The second advisory calls itself a surviving member of the bypass class already addressed in GHSA-3x77-wg38-92r3 (CVE-2026-55581, the default /bin/bash entry), GHSA-74hp-mggr-hv58 (CVE-2026-55582, the git shell alias) and GHSA-qp2m-x9hp-cj5p, which has no CVE and covers find -fls writing files. An earlier one, GHSA-f5pj-2738-996m (CVE-2026-55580), had already covered secure mode being off entirely in the bare-binary deploy path. Those three CVEs published June 14, ten weeks before NVD ingested them. The 1.0.0 fix stops patching the list: secure mode no longer exposes shell_exec at all, and the server builds the arguments itself behind typed MCP tools.
EX.Afry squinting at `--cont`, which git is delighted to read as `--contents`
commentary
Six advisories against one secure-mode policy, and the sixth was found by asking what else on the allowlist can start another program. The fix that finally worked was removing the tool that takes a command string, which is the conclusion every shell allowlist reaches eventually and usually later than this.
impact
Before 1.0.0, an MCP client talking to a secure-mode mcp-shell reads arbitrary files and executes arbitrary binaries through whichever allowlisted program the current bypass runs through.
OGX Takes a URL From the MCP Tool Definition and Fetches It Without Asking Where It Goes #
VulnCheck published CVE-2026-85666 on September 4, 2026, credited to George Chen, against OGX 1.3.1 and earlier. OGX is the project formerly known as Llama Stack. Its OpenAI-compatible POST /v1/responses endpoint accepts MCP tool definitions that carry a server_url, along with headers and authorization values, and fetches that URL server-side with no destination check. The codebase already has validate_url_not_private() and applies it to other URL inputs; server_url is the one it was never wired to. The endpoint needs no authentication in the default configuration. VulnCheck scores it 8.7, NVD 7.5.
EX.Asquidward at the blinds watching `validate_url_not_private` miss `server_url`
commentary
The guard was written, tested, and pointed at the other URL fields. server_url arrives inside an MCP tool definition rather than as a plain request parameter, which is apparently enough distance for it to read as somebody else's input.
impact
An unauthenticated caller makes an OGX server request any internal address, including `http://169.254.169.254/`, and has it forward attacker-supplied headers and authorization tokens to whatever answers.
MCP Kotlin SDK Patches Two Transports That Buffer Until the Heap Is Gone #
The MCP Kotlin SDK published two advisories on September 3, 2026, both fixed in 0.14.0. CVE-2026-63658 (GHSA-f47c-p7wj-q7gx, CVSS 7.5) is a maxRequestBodySize bypass in the Streamable HTTP server transport. The pre-read guard compares against Content-Length, which a Transfer-Encoding: chunked request does not send and an HTTP/2 request may omit, so the absent header defaults to zero, the request passes, and the allocation in receiveText() exhausts the heap before the post-read length check runs. The legacy SSE transport enforced no size limit at all. CVE-2026-63657 (GHSA-4x39-xh35-w96w, CVSS 6.5) runs the other direction: handleInlineSse in the Streamable HTTP client appends every data: line to a StringBuilder that only flushes on a blank line, so a malicious server can stream data: lines indefinitely and exhaust the client's memory. hewei-gikaku and nirzaitsme reported them and devcrocod wrote both fixes.
commentary
Filed Medium because an availability-only bug hands an attacker a crash and nothing else to do with it, which overrules the 7.5 on the server-side one; the 6.5 was already Medium on the numbers. The client-side one is the more interesting half. The SDK capped its stdio read buffer at 16 MiB back in June after CVE-2026-53937, and the HTTP client shipped beside it went on appending without a limit.
impact
One unauthenticated POST with chunked encoding crashes the JVM hosting an MCP server. A hostile server crashes any client that connects to it. Neither bug yields code execution or data.
CISA Puts LiteLLM's MCP Endpoint in the Known Exploited Vulnerabilities Catalog #
CISA added CVE-2026-59822 to the Known Exploited Vulnerabilities catalog on September 2, 2026, with a federal remediation deadline of September 16. The catalog names the surface itself: "BerriAI LiteLLM contains an improper authentication vulnerability in the MCP Streamable HTTP endpoint that could allow an unauthenticated attacker to establish an authenticated MCP session using an arbitrary Bearer token." The flaw was reported by yaaras and disclosed in GHSA-7488-6r32-c95q on June 30, 2026: LiteLLM's OAuth2 passthrough fallback replaced a failed key validation with an empty UserAPIKeyAuth() object instead of rejecting the request, and it was fixed in 1.84.0. Wiz published 90 days of AI-infrastructure honeypot observations on August 27, 2026 recording exploitation of it, noting that any Bearer token, "even just a single character, e.g., x", granted full MCP access. The same post describes attackers exploiting CVE-2026-42271, arbitrary command execution through LiteLLM's MCP server preview endpoints, by submitting fake MCP configurations whose embedded Python fetched a cryptominer while returning a valid MCP handshake so the connection test looked successful. That CVE entered the catalog on June 8, 2026.
EX.Aone astronaut drawing on the other above earth: any bearer token works? always has
commentary
A one-character bearer token was enough. The check ran, returned an object, and the object was empty, which is what a fallback path looks like when it is written before anyone decides what failure means. Two LiteLLM MCP endpoints are now in the federal catalog, three months apart.
impact
Attackers reaching an unpatched LiteLLM proxy list and invoke every configured MCP tool and the services behind them with no valid credential. Wiz recorded post-exploitation tuned to AI infrastructure, including reading the LiteLLM master key out of process memory because it is never written to disk.
IBM ContextForge Ships Four MCP Gateway Bulletins in One Day, Two of Them Outbound #
IBM published four security bulletins for ContextForge on September 2, 2026. Two are egress failures. CVE-2026-18905 validates a REST tool's target URL for SSRF once, at registration time, then reuses the stored URL on every later invocation with no re-validation and no DNS pinning, so a low-privilege user re-points the hostname after registration. CVE-2026-77822 is the same idea at a different door: the A2A invocation endpoint POST /a2a/{agent_name}/invoke is the one outbound path in the gateway that does not pin the resolved IP at connection time, and it returns the full response body to the caller. CVE-2026-18486 is not outbound at all. A developer-privileged user supplies a jq program in a tool's jsonpath_filter field, jq evaluates $ENV inside the server process, and the environment hands back signing keys and database credentials good enough to forge an administrator token. The fourth, CVE-2026-18489, is in the separate Translate utility, which maps request headers into subprocess environment variables and shares one stdio subprocess across clients; a restart limiter lets a second client run under the first client's credentials. IBM rates the jq flaw 8.8 and the tool-invocation SSRF 7.7; NVD puts the other two at 8.2 and 7.4.
EX.Aevery egress path pins the dns record. every path but one
commentary
The A2A bulletin is the interesting one, because IBM says out loud that every other outbound path pins DNS and this one does not. That is not a missing control. That is a control that exists, works, and was applied everywhere except the endpoint added last.
impact
An authenticated low-privilege ContextForge user reaches internal network targets through two separate SSRF paths, and a developer-privileged one reads the gateway's environment variables and mints admin tokens from the signing key it finds there.
MCPHub Adds Three More Advisories, and the Audit Log Was Readable by Everyone It Audited #
MCPHub published three advisories on September 2, 2026, all fixed in 1.0.34, none with a CVE. GHSA-94jf-cmwm-q3p5 is the loudest: in database mode the /api/activities endpoints build their filter entirely from user query parameters, with no owner predicate in buildWhereClause and no admin gate, so any authenticated non-admin reads every user's tool-call history. MCPHub stores tool inputs and outputs verbatim, secrets and API responses included. The same endpoints accept DELETE /api/activities/cleanup?daysOld=1. GHSA-cvw6-m995-5vvv is the same shape on the system-log routes. GET /api/logs, DELETE /api/logs and GET /api/logs/stream sit on an authenticated router with what the advisory calls zero authz references, so any non-admin reads the global log buffer, streams it live over SSE, or wipes it outright. GHSA-xvpg-v6pr-xc32 is an SSRF: a non-admin creating an sse or streamable-http server supplies OAuth discovery, dynamic-registration and protected-resource-metadata URLs that get dialed server-side, because an earlier fix routed transport URLs through assertSafeUrl and never extended it to the OAuth ones. Reported by manus-use and zx (Jace).
EX.Amegamind peering closely: no admin check on the audit log?
commentary
Storing tool-call inputs and outputs verbatim is a defensible logging choice. Serving that store to every authenticated user, and letting them delete it afterwards, turns the audit trail into the richest single endpoint on the box.
impact
Any authenticated non-admin reads other users' tool calls including the secrets inside them, streams and wipes the system logs that would show it happening, and makes the hub issue blind requests to internal addresses.
runZero Finds Its Own MCP Service Handing Findings Across Organizations #
runZero disclosed CVE-2026-81846 on September 1, 2026, in platform versions before 5.1.260826.0. The MCP service accepted an organization UUID from the caller and returned that organization's Findings summaries without checking whether the caller belonged to it. The company says it found the flaw in an internal code security review on August 27 and shipped the fix before publishing. CVSS 3.5, and the access is read-only.
commentary
Worth logging less for the severity than for the shape of the disclosure: a vendor found a cross-tenant authorization bug in its own MCP endpoint during a routine review, fixed it, and wrote it up with the discovery date attached. That is a rarer artifact in this ecosystem than the bug is.
impact
An authenticated runZero user who knows or guesses another organization's UUID reads that organization's Findings summaries. Nothing can be modified.
ash_ai Asks the Browser Whether the Request Was HTTPS, and the Browser Says Yes #
zachdaniel published GHSA-c92r-f3rr-q49h on August 30, 2026, tracked as CVE-2026-81315 by the Erlang Ecosystem Foundation. AshAi.Mcp.Server guards against DNS rebinding in origin_allowed?/3, which accepts a request when the host matches and the forwarded scheme is https. It reads x-forwarded-proto straight off the request with no trusted-proxy check, and X-Forwarded-Proto is not on the browser's forbidden header list, so script on any page can set it. Affects ash_ai from 0.8.0 up to 1.0.0 in the default configuration. Reported by PJUllrich and coordinated by maennchen. CVSS 7.4 under CVSS 4.0.
EX.Ahooded kermit: add one header and the guard will take your word for it
commentary
The rebinding guard was correct about needing to know the scheme. It just asked the one participant in the exchange with a motive to lie. Header-derived trust needs a proxy you control in front of it, and a local MCP server is the deployment least likely to have one.
impact
A page the developer visits issues cross-site requests to their local ash_ai MCP server and gets them accepted, with whatever tools that server exposes.
Nous Research's Hermes Agent Tracked Its MCP Catalog by Branch Name #
VulnCheck published CVE-2026-82021 on August 28, 2026, crediting Zubair Ashraf of Helmet Security. Hermes Agent's bundled MCP catalog referenced a third-party upstream repository through a mutable branch rather than a pinned commit, so whoever controlled that branch controlled what every installing host fetched and ran. The fix commit rewrites the n8n catalog manifest from ref: main to ref: 7a9ae00795593aa1fdb4e61ecd640e8bfd0c3841 and states the reasoning outright: branches and tags can be moved by the upstream owner, SHAs cannot. Affected in 0.18.2 up to 0.19.0, and in the 2026.7.7.2 line up to 2026.7.20. CVSS 8.3 at NVD and 9.0 at VulnCheck, CWE-494.
commentary
The catalog is the list of things the agent is permitted to launch, which makes it the trust boundary rather than a convenience. Pinning a pyproject dependency and pinning the MCP server that dependency starts are the same problem, and only one of them had a written policy.
impact
An attacker who takes over the referenced upstream repository executes code on every host that installs that catalog entry.
ToolUniverse and Telnyx Serve MCP on Every Interface and Ask for No Credential #
VulnCheck published two MCP advisories on August 27, 2026, both crediting Avishai Gonen of Pluto Security, and both are the same bug wearing a different logo. ToolUniverse, the agentic tool platform out of Harvard's MIMS lab, ran caller-supplied Python behind a denylist of attribute names and calls, on a server that asked for no credential at all (CVE-2026-81096). The Telnyx MCP server served MCP at the root path from a listener bound to every interface, and parsed the caller's authentication headers in a mode that did not fail when they were absent (CVE-2026-81098). VulnCheck scores both 9.3. NVD scores them 10.0 and 9.1.
EX.Atwo mcp servers on every interface, auth middleware optional
commentary
Neither project switched a protection off. Binding to loopback and requiring a credential were both parameters, and a parameter's default is what actually ships. ToolUniverse went to the trouble of denylisting attribute names inside the sandbox while leaving the front door unlocked, which is a lot of care spent one layer too deep.
impact
Any client that can reach the port executes Python on the ToolUniverse host or drives the Telnyx tool surface. Neither requires a credential.
Five DNS Rebinding Findings in One Day, Four of Them an SDK Option Nobody Set #
The same August 27 batch carries five host-header findings credited to Avishai Gonen of Pluto Security. mcp-go served any request arriving over a loopback connection regardless of the host it named, in both StreamableHTTPServer.ServeHTTP and SSEServer.ServeHTTP, and its SSE transport's cross-origin handling had the same gap (CVE-2026-81092). Validation landed in v0.56.0, tagged July 8, 2026. The other four are servers that called their SDK's HTTP factory and never set the DNS-rebinding-protection option it offers: Timescale's pg-aiguide (CVE-2026-81095) and tiger-slack (CVE-2026-81099), tiger-gh-mcp-server (CVE-2026-81100), and Dropbox's Dash MCP server (CVE-2026-81102), which restricted its listener to loopback and then accepted whatever host a request named.
EX.Athe sdk offers dns-rebinding protection and four callers left it unset
commentary
Filed Medium against VulnCheck's 7.6, because the attacker needs the victim to load a page first. The more interesting number is the spread: VulnCheck scored Dropbox's omission 2.3 and Timescale's 7.6, and it is the same omission. The score is grading the tool surface behind the door, not the door, and the door is identical in all four.
impact
A page in the victim's browser resolves its own hostname to 127.0.0.1 and talks to the locally bound MCP server through them, reaching a tool surface that treated the loopback bind as the access control.
Apify's SSRF Fix Shipped in March and the CVE Turned Up in August #
Two SSRF advisories from the August 27 batch credit Yotam Perkal of Pluto Security. The get-html-skeleton tool in Apify's Actors MCP server validated its url argument with isValidHttpUrl, which confirmed the string began with an http or https scheme and parsed as a URL, then fetched it without inspecting the hostname or the address it resolved to (CVE-2026-81093, CVSS 8.7). Private ranges and cloud metadata endpoints were in reach. The fix is in @apify/actors-mcp-server 0.9.12, published to npm on March 20, 2026, five months before the advisory named it. The mcp-use inspector's proxy middleware read its destination from an X-Target-URL header or an __mcp_target parameter and proxied there without inspecting the host (CVE-2026-81091, CVSS 8.7); that one was fixed in 2.3.3, published one day before the advisory.
EX.Askeleton on a bench: the apify ssrf fix, waiting since march for its cve
commentary
One fix shipped five months before its CVE and the other one day before. Same batch, same researcher, same 8.7. The gap says nothing about the bugs and everything about when somebody got around to writing them down.
impact
A tool argument or a proxy header reaches loopback, private ranges, and cloud metadata endpoints, and the response comes back into the model's context.
mcp-fetch Asks Node Whether `[::1]` Is an IP Address and Believes the Answer #
VulnCheck published CVE-2026-80347 on August 26, 2026, crediting George Chen, against mcp-fetch through 1.6.3. isSafeUrl reads hostname off the parsed URL, which for a literal such as http://[::1]/ hands back the string with its brackets still attached, and passes that to net.isIP. net.isIP returns 0 for a bracketed literal, so the guard concludes the target is not an IP address at all and skips the private-range checks it exists to run. The HTTP client then strips the brackets and connects to loopback. CVSS 8.7 at VulnCheck, 7.5 at NVD.
EX.Afry squinting: not sure if ip address or just a string with brackets
commentary
Two parsers, one string, two answers about what it is. net.isIP is doing exactly what it documents. The guard asked it a question about a URL hostname and read the reply as a question about an address.
impact
A fetch target supplied through a tool argument reaches loopback and private addresses, and the response is returned into the model's context.
Coroot's MCP OAuth Endpoint Registers Any Redirect URI a Stranger Sends It #
VulnCheck published CVE-2026-79786 on August 25, 2026, crediting George Chen, against Coroot 1.20.2 through 1.24.5. The MCP OAuth dynamic client registration endpoint is unauthenticated and accepts any syntactically valid redirect URI without validating where it points, so an attacker registers a client aimed at a host they control. Send the resulting authorization URL to a signed-in user, and their authorization code lands on the attacker's host. CWE-601, CVSS 7.0.
commentary
Dynamic client registration exists so an MCP client nobody pre-registered can still connect, which means the endpoint is designed to be reachable by strangers. Coroot implemented that part faithfully. Deciding which redirect targets a stranger may name is the half that has to survive contact with one.
impact
An attacker who gets a signed-in Coroot user to open one link captures their authorization code and takes over the session.
ContextForge's Python Sandbox Server Left getattr Sitting in safe_builtins #
brian-hussey published GHSA-xm98-3vcf-fph7 on August 24, 2026 for CVE-2026-53710, affecting mcp-contextforge-gateway 1.0.1 and earlier. The python_sandbox_server exposes an execute_code MCP tool over HTTP and SSE with no authentication, and three weaknesses compound into remote code execution. getattr sits in RestrictedPython's safe_builtins without the _getattr_ mediation layer that is supposed to police attribute access. validate_code rejects dunder names written as literals and has no opinion about the same names assembled at runtime. The proof of concept walks the class hierarchy with getattr, finds subprocess.Popen, and runs OS commands as the server process. The advisory scores it 9.0 over HTTP and 8.8 over stdio, and the fix is in 1.0.2.
EX.Amegamind peering at safe_builtins: no _getattr_ on this one?
commentary
A sandbox shipping getattr unmediated is a sandbox the way a fence with a gate in it is a fence. The blocklist is the detail worth keeping: it refused the literal string __class__ and was untroubled by the same name built one character at a time.
impact
An unauthenticated caller who can reach the sandbox server executes arbitrary commands with the privileges of the process that was supposed to be containing them.
x64dbg's MCP Plugin Serves the Whole Debugger on 0.0.0.0 With No Authentication #
x64dbg-MCP Server is a native MCP plugin that exposes the debugger's functionality over HTTP and SSE. duty1g published GHSA-4478-h5jv-647m on August 24, 2026: in versions before 1.0 every MCP debugger tool was served without authentication while the plugin listened on 0.0.0.0 by default, so any unauthenticated network client that could reach port 9094 for x64 or 9095 for x32 could execute arbitrary x64dbg commands and attach to processes. The advisory records it fixed in 1.0, and NVD carries CVSS 9.3 for CVE-2026-107824, attributed to GitHub as the assigning CNA. A second advisory, GHSA-jgj3-97w2-9v9r, published August 27 as CVE-2026-107820, covers parseContentLength() in src/core/mcp_server.zig parsing an unbounded Content-Length and using it in unchecked usize addition in wsRecv(), which runs before token authentication. That one affects versions up to and including 1.1 and is fixed in 1.2, and the advisory is explicit that the overflowed value is only ever a comparison operand, so the impact is denial of service rather than memory corruption. NVD ingested both on October 9, six and seven weeks after the advisories, and its text for the first one reads "prior to 1.1" where the advisory itself says 1.0.
EX.Atwo guys on a bus: the same plugin bound to 127.0.0.1 and bound to 0.0.0.0
commentary
A debugger is a tool for doing anything to any process on the machine. Wrapping one in MCP and binding it to every interface is less a missing auth check than a remote administration service nobody asked for. The overflow is the smaller finding by a wide margin, availability only by the maintainer's own analysis, and it still fires before the token check, which by that point is decorative.
impact
Anyone who can reach the port drives a debugger that is already attached to processes on the host, which is arbitrary code execution with a user interface.
SiYuan's Fifth MCP Advisory Is a Path Guard That Matches Filenames Case-Sensitively #
SiYuan published GHSA-mmgw-3mx9-cfwp on August 21, 2026, later assigned CVE-2026-85580. The advisory's summary states that on Linux the MCP file-access path guard compares a case-variant path against the protected publishAccess.json filename using case-sensitive matching, and its details add that a path such as data/.siyuan/PublishAccess.json bypasses a case-sensitive basename or suffix comparison "even though the underlying file is the protected metadata file". It does not say how the variant reaches that file. SiYuan shipped a regression test named TestSecurityReproMCPReadsPublishAccessMetadataOnLinux and fixed it in v3.8.2 by canonicalising the path and matching with platform-appropriate case semantics. CVSS 6.5. The protected file is the same one CVE-2026-60083 added to the blocklist three weeks earlier.
commentary
The August 8 advisory established that this file needed protecting and put it on a list. This one is about the comparison behind the list, and a blocklist entry is only ever as good as the match behind it. Worth noting that the advisory asserts the bypass and ships a Linux regression test for it without spelling out how a case variant lands on a case-sensitive filesystem; take the fix, not the mechanism, until someone explains that part.
impact
An MCP caller with read access discloses SiYuan's publish-access configuration and metadata, which the advisory says should be treated as sensitive.
Neo.mjs Checks That the Path Is Inside the Project, Then Hands the Whole String to a Shell #
novice-22 disclosed CVE-2026-18482 on August 20, 2026, a command injection in the file-system MCP server that ships inside Neo.mjs at ai/mcp/server/file-system. The checkSyntax() and runPlaywrightTest() tools build command strings by interpolating a caller-supplied absolutePath into node --check ... and npx playwright test ..., then run them through child_process.exec(), which spawns a shell. The sandbox check, ensureSandboxed(), resolves the path and confirms it sits under the project root. That answers where the path points and says nothing about what follows it, so /home/user/neo/README.md; touch /tmp/MARKER passes validation and the shell runs both halves. Versions through 13.1.0 are affected. The fix swaps exec() for execFile(), passing arguments as an array so there is no shell to parse them.
EX.Athe sandbox check passed, so the rest of the string must be fine too
commentary
The validator was asked whether the path is inside the project. It said yes, correctly, about the part of the string before the semicolon. execFile was available the whole time and makes the bug unrepresentable rather than filtered.
impact
An agent steered into calling check_syntax or run_playwright_test on an attacker-chosen path executes arbitrary OS commands with the developer’s privileges.
Spring AI’s MCP Streamable HTTP Transport Keeps Every Session It Has Ever Handed Out #
Spring published CVE-2026-59279 on August 20, 2026 against Spring AI 2.0.0. The MCP Streamable HTTP server transport, in both the WebFlux and WebMvc variants, places no limit on the number of sessions it retains, and by default does not require clients to authenticate. A remote attacker sends initialization requests in a loop, the server keeps every session it creates, memory climbs, and the process eventually stops serving anyone. CVSS 7.5. Fixed in 2.0.1 for open source and 2.0.0.1 for enterprise support.
commentary
Filed Medium against a CVSS of 7.5, because availability is the entire prize and a crash buys the attacker nothing else. The detail worth pausing on is that "does not require clients to be authenticated" appears in the advisory as a contributing condition rather than as its own finding.
impact
An unauthenticated remote attacker exhausts the memory of a Spring AI MCP server and takes it down for every legitimate client.
The MCP Java SDK Patches the Same Unbounded Read on Both Ends of the Wire #
Kehrlann published two advisories against the official Java SDK on August 19, 2026, both fixed in 0.18.4, 1.1.4 and 2.0.1. CVE-2026-108395 (GHSA-4x8c-5vv7-973f, CVSS 7.5) is the server side: the Streamable HTTP, Stateless Streamable HTTP and SSE transports in mcp-core all read a whole request body into memory before parsing, none of them checks Content-Length, and chunked transfer encoding walks past any declared-length check anyway. Credits go to razashariff, tonghuaroot, hewei-gikaku, mohammad228, Gal3m and shmulc8. GHSA-5q7x-232h-f834 (CVSS 6.5, no CVE) is the client side, and it is the same shape pointed the other way: ResponseSubscribers.SseLineSubscriber, shared by both HTTP client transports, appends every data: line to a buffer and dispatches only when a blank line arrives, so a hostile server sends data: lines and never the blank one.
commentary
The 7.5 is overruled to Medium on availability, and the 6.5 is already Medium, so nothing was argued down. The interesting half is the one with no CVE: the client transport trusts a server to eventually send a blank line, which is the same trust the server advisory says not to extend to clients. One parser, one afternoon, both directions.
impact
An unauthenticated client kills a Java MCP server with one chunked body. A hostile MCP server kills its clients by never finishing an event, at almost no cost to itself.
Splunk’s MCP Server App Deserializes Whatever Is Sitting in the Credential Store #
Splunk published SVD-2026-0808 on August 19, 2026, covering CVE-2026-76404 in the Splunk MCP Server app below 1.2.1. The app’s credential management component deserializes stored data without checking whether the content is of the expected type, which Splunk classifies as CWE-502. A user holding the admin Splunk role can place a crafted object in that store and obtain arbitrary command execution on the underlying operating system. CVSS 9.1. Fixed in 1.2.1. The same bulletin carries a second deserialization bug, CVE-2026-76395 in the Splunk AI Toolkit, where a model codec unpickles sparse matrix data.
commentary
Splunk graded this 9.1 even though it needs the admin role, and that is the right call. A Splunk role is an application role. It was never supposed to be a shell account, and the credential store was never supposed to be an executable format.
impact
An admin-role Splunk user escapes the application entirely and runs commands on the host operating system.
MCPHub Publishes Seven Advisories in a Week, Including a Non-Admin Route to /bin/sh #
MCPHub, which exists to centrally manage other people's MCP servers, published seven advisories between August 17 and August 23, 2026. CVE-2026-79748 is the one that matters: POST /api/servers and PUT /api/servers/:name have no admin gate, no command allowlist and no path validation, so any authenticated non-admin submits a server config with command: "/bin/sh" and arbitrary args, and MCPHub spawns it. CVSS 9.9, reported by @offset, and the advisory notes the Docker, npx and systemd deployments all run as root. CVE-2026-79750, from @BerSecHub, is the cross-tenant version: list views and config edits enforce ownership and the tool-execution API does not, so a non-admin calls tools on somebody else's connected server. The rest are the same missing check in other places: global security config rewritable by non-admins (CVE-2026-79744), a server-scoped bearer key that matches a whole group on any overlap (CVE-2026-79746), prompt and resource CRUD with no authorization (CVE-2026-79745), an open SSRF (CVE-2026-79747), and an SSRF guard that IPv6 transition addresses walk through (CVE-2026-79749). NVD ingested all seven on August 31.
commentary
A hub is a concentration of other systems' credentials by design, so the interesting number here is not 9.9, it is seven. The pattern across all of them is an ownership check that exists on the read paths and not the write ones, which is what happens when multi-tenancy is added to a single-tenant tool one endpoint at a time.
impact
An authenticated non-admin gets remote code execution as the MCPHub process owner, which in the documented deployments is root, and short of that reads and executes across every other tenant's connected servers.
PyCharm Shipped Unauthenticated Jupyter MCP Code Execution, and the Public Description Is One Sentence #
CVE-2026-75060 was published on August 17, 2026 against JetBrains PyCharm before 2026.2.1. The entire public description reads: "In JetBrains PyCharm before 2026.2.1 code execution was possible via unauthenticated Jupyter MCP tools." NVD scores it 8.4. JetBrains lists the issue on its shared fixed-issues page rather than in a dedicated advisory, so there is no write-up of the attack path, no statement of what "unauthenticated" reaches, and no proof of concept. The Jupyter MCP tools ship with the IDE, which puts the exposed surface on developer workstations.
EX.Ajetbrains, on documenting an 8.4 in its own ide
commentary
An 8.4 in a widely deployed IDE gets one line on a page that lists everything JetBrains fixed. Nobody downstream can tell whether "unauthenticated" means a local process, another host on the network, or a web page you happened to open, and those are three very different Tuesdays.
impact
Code execution on a machine running an affected PyCharm, reached through the bundled Jupyter MCP tools without authenticating to them.
The Official MCP PHP SDK Lets a Hostile Server Eat the Client’s Memory #
tonghuaroot reported CVE-2026-53965 in modelcontextprotocol/php-sdk, the official PHP SDK, published as GHSA-7m52-jw36-44r3 on August 14, 2026. The HTTP client transport reads Server-Sent Events incrementally and appends every chunk to $this->sseBuffer, which is only drained when the "\n\n" event delimiter arrives. A server that never sends the delimiter grows that buffer without bound. The advisory ships a proof of concept: 1,000 well-formed events hold the client at 2.0 MB, while 400 MB of delimiter-free data kills a client running the default 256 MB memory_limit. Affects 0.5.0 through 0.7.0, fixed in 0.7.1.
commentary
Almost every MCP bug on this site runs client to server. This one runs backwards, and there is no approval dialog for "the server you already trusted is now sending you 400 MB of nothing." Medium against a CVSS of 8.7, because a dead PHP process is the whole payout.
impact
Any MCP server a PHP client connects to can crash that client on demand, with no authentication and no earlier signal the client could act on.
SiYuan's Fourth MCP Advisory in a Month Is Another Tool That Skips the Workspace Check #
SiYuan published GHSA-p23f-cm6q-2qp8 on August 13, 2026, crediting joysinleung, against SiYuan before v3.8.1. The asset.upload MCP tool takes a comma-separated list of absolute file paths and normalises them without ever checking that they land inside the workspace. An agent talked into calling it copies files from outside the workspace into the notebook's asset store, and the approval dialog the user sees does not show the source path. VulnCheck assigned CVE-2026-82233 two weeks later, on August 28, at CVSS 6.9. This is the fourth SiYuan MCP advisory in under two weeks, after the three from August 3 and August 8.
commentary
Four advisories, four tools, one boundary that keeps not being checked. SiYuan's MCP layer is discovering the workspace root one tool at a time, and asset.upload is a tool whose entire purpose is writing files into that root, so it is the one place the check was least optional.
impact
Any file the SiYuan kernel process can read, including SSH keys and credential files, gets copied into the workspace and served as a notebook asset.
Deadbugz Pushes a Malicious MCP Server Through 23 Pull Requests, Then Waits Three Tool Calls #
Pillar Security published the Deadbugz campaign on August 12, 2026 and reported it as still active. A single GitHub account, zellkernel, filed 23 pull requests against unrelated AI, MCP and developer-tool repositories inside a 74-minute window on August 10, adding MCP server configurations: 17 remote, four local-script and two directory listings. The server they point at offers text formatting and summarisation, and keeps a per-client in-memory counter of tools/call requests. Once that counter reaches three, the server's tools/list and prompts/get responses change, and the returned tool metadata becomes instructions to collect SSH keys, AWS credentials, shell history and Kubernetes config while concealing the activity from the user. Pillar published the indicators, including the productivity-suite-mcp.onrender.com/mcp endpoint and the deadbug-mcp.py local artifact. No CVE was assigned.
EX.Afred pulling the sheet off the ghost: the productivity server, on its fourth tool call
commentary
Tool definitions are fetched at runtime from the thing they describe. Reading them once tells you what the server was willing to say while being read. Three calls is a cheap counter, and it is enough to make a one-time approval mean nothing.
impact
An operator who approved the server after reading its tool definitions gets a different tool set on the fourth call, aimed at whatever credentials the agent's host can reach.
argocd-mcp Lends the Operator's Argo CD Token to Whoever Connects First #
leoluz published GHSA-rp45-5x3v-48mr on August 11, 2026, crediting shmulc8, against argocd-mcp 0.8.0 and earlier. Three gaps compose. The HTTP transport starts with app.listen(port), so it binds every interface. It accepts MCP sessions without any caller credential whenever ARGOCD_API_TOKEN is configured, because the token is for talking outbound to Argo CD and nothing checks inbound. And it never applies the MCP SDK's Host validation. CVSS 10.0, fixed in 0.9.0. NVD ingested it as CVE-2026-82456 eighteen days later.
EX.Aoprah gesturing: the operator's argo cd token, for every caller who connects
commentary
The token is there so the server can reach Argo CD. Nothing was there to establish who was reaching the server. Argo CD's entire job is turning a manifest reference into running workloads, so an unauthenticated caller holding that token isn't reading a cluster. They're deploying to one.
impact
Anyone who can reach the port drives the full Argo CD tool surface with the operator's stored token: create applications, point them at attacker-controlled manifests, and sync them into the destination Kubernetes cluster.
Grafana's MCP Server Lets the Caller Choose the Destination, Which Is What the Last Fix Was For #
Grafana published CVE-2026-19516 on August 11, 2026. The grafana_api_request tool in mcp-grafana lets the caller choose the HTTP method, path, and body. A caller-supplied X-Grafana-URL request header then controls the destination, which is not restricted to the configured Grafana instance. Requests can be aimed at internal, loopback, and link-local services, including metadata endpoints, and the responses come back to the caller. CVSS 9.1. This is an incomplete fix for CVE-2026-15583, which stopped the tool from sending Grafana tokens to arbitrary hosts but left the destination itself unconstrained. Fixed in 1.1.0.
EX.Aan ssrf fix that constrained the token and not the destination
commentary
The first fix stopped the credential from travelling. It did not stop the request. X-Grafana-URL is still, by name and by function, the field where the caller says where to go.
impact
An authenticated MCP caller reaches anything the Grafana host can reach and reads the response, with full control of method, path, and body.
Next AI Draw.io Interpolates Its mcp Query Parameter Into Both a Script Block and the HTML #
Hồ Việt Khánh reported CVE-2026-73037 on August 11, 2026 against @next-ai-drawio/mcp-server 0.2.1 and earlier, bundled in next-ai-draw-io 0.2.1 through 0.4.16. The MCP HTTP server takes the mcp query parameter and interpolates it without escaping into two contexts: a JavaScript string literal and the surrounding HTML. A payload of ";alert(1);// breaks out of the script context, and an <img src=x onerror=...> renders straight into the page. Both execute in the localhost origin. CVSS 6.1. The report was still unpatched when it was filed.
commentary
Reflected XSS reads as a 2010 finding until you notice where it lands. The localhost origin is where the agent's tooling keeps its session.
impact
A crafted link opened in the victim's browser runs JavaScript on the localhost origin that serves the MCP endpoint, reaching diagram sessions and API data held there.
Microsoft's UFO Agent Framework Ships Two Unauthenticated MCP Servers That Drive an Android Phone #
GHSA-24fq-m9rr-g3mm, published August 10, 2026, covers create_mobile_data_collection_server and create_mobile_action_server in ufo/client/mcp/http_servers/mobile_mcp_server.py. Both expose Streamable HTTP MCP services, on TCP 8020 and 8021, with no authentication. Port 8020 serves capture_screenshot, get_ui_tree, and get_device_info. Port 8021 serves tap, swipe, type_text, launch_app, press_key, and click_control. When UFO is configured for remote deployment and binds 0.0.0.0, any client that can reach the ports initializes an MCP session and calls the tools without presenting an API key. The tools reach the connected Android device through ADB subprocesses. CVSS 9.4, affecting v3.0.7 and earlier, fixed in v3.0.8.
EX.Await, both mcp ports are unauthenticated? always have been
commentary
The framework's threat model stops at the model. Two HTTP servers underneath it hand out screenshots and touch events to whoever asks, and that path never involves a prompt at all.
impact
Anyone who can reach the ports reads the phone's screen and UI tree, then taps, types, and launches apps on it. No credentials, no user approval, and no cooperation from the model.
GhostSplice Splits One Exfiltration Request Across Three MCP Channels and Compliance Doubles #
ASSET Research Group published GhostSplice on August 10, 2026. Researchers Murali Ediga and Sudipta Chattopadhyay call the technique cross-channel trust fragmentation. A malicious MCP server splits a credential-theft request into fragments that each read as routine and delivers them through channels the agent already trusts. The tool description advertises an integrity_checker with bland field names. A first tool result returns an ordinary project file scan. A second result supplies the mapping, telling the model which files fill which fields for a server-side hash check. No single channel carries the whole request. Across eleven API-tested models, splitting a request into two halves raised average compliance from 42 percent to 82 percent, and GPT-4o, Gemini, and Llama went from refusing to 100 percent. VS Code adds a third channel through server-initiated sampling. The tests ran in isolated projects seeded with fake credentials, and the group says CVE identifiers will follow coordinated disclosure.
EX.Atool description, tool result, and sampling, none of them the bad one
commentary
The refusal training works on the whole request. It was never shown the whole request. Filling in a form is the one task no model has been trained to decline.
impact
SSH keys, environment variables, proprietary source, and customer data leave through a tool call the model reads as a form. Results depend on the client: GPT-5.4 runs the attack 90 percent of the time under Cursor and 0 percent behind Claude Code.
VulDB Files Twelve MCP Server CVEs in Four Days and Most Maintainers Never Answered #
Between August 6 and August 9, 2026, VulDB published twelve CVEs against small MCP servers, nearly all of them single-maintainer GitHub projects. The shape repeats: a tool parameter reaches a shell. codex_mcp passes the model argument (CVE-2026-19329), MCP4EDA passes design_name and vcd_file (CVE-2026-19332), mcp-pdf-vision passes pdfPath and sessionId (CVE-2026-19279), MCPGateway passes a since date (CVE-2026-19268), and mcp-bridge-api takes command and args from its servers endpoint (CVE-2026-19263). Path traversal covers mcp-ui-probe (CVE-2026-19270) and MCPyATS (CVE-2026-19338). SSRF covers mcp-google-search (CVE-2026-19337) and MissionSquad's mcp-api (CVE-2026-19040), which also shipped a command injection in its npm package installer (CVE-2026-19041). HKUDS nanobot registered MCP resource and prompt wrappers outside the declared enabledTools scope (CVE-2026-19244). The ssh-mcp-server entry (CVE-2026-19039) is disputed by its maintainer, whose stated threat model is that the server is a local trusted tool for running SSH commands, so callers already hold execution.
EX.Atwelve mcp maintainers opening the issues tab this week
commentary
The ssh-mcp-server maintainer asks the question the rest of the batch avoids. If a tool exists to run commands over SSH, the line between command injection and the product is not obvious. Twelve filings in four days suggests nobody has agreed where that line sits.
impact
Each finding is small on its own. The batch is a census of the long tail: several projects never responded to the report, several ship rolling releases with no version anyone can pin, and some fixes exist only as unversioned commits.
AWS Labs Patches Two MCP Servers in Three Days, One Sending Broker Credentials Wherever the Model Points #
Two AWS security bulletins in the same week. Bulletin 2026-070, published August 3, 2026, covers CVE-2026-18655 in awslabs.amazon-mq-mcp-server before 2.0.24: the RabbitMQ broker connection tools do not restrict which endpoint they will connect to, so a broker hostname introduced into the MCP client context by prompt injection redirects Amazon MQ broker credentials or OAuth access tokens to a host the attacker controls. CVSS 6.5. Bulletin 2026-076, published August 5, covers CVE-2026-18954 in the DocumentDB MCP Server before 1.0.12: the write-capable aggregation pipeline stages $out and $merge slip past the read-only mode enforcement, so an authenticated MCP client writes to a database the server was configured to treat as read-only. CVSS 5.5.
commentary
AWS's interim advice for the first one is to turn off auto-approve on the RabbitMQ initialization tools, which concedes that the destination hostname was the model's to pick. The second is a reminder that read-only enforced in the server is a preference, and read-only enforced by database credentials is a control.
impact
Broker credentials and OAuth tokens go to whatever hostname reaches the model's context. DocumentDB deployments running in read-only mode accept writes through the aggregation pipeline.
SiYuan Ships Three MCP Advisories in Six Days, Each One a Caller the Previous Fix Skipped #
SiYuan published GHSA-43jx-gxq4-jpjc on August 3, 2026 and two more on August 8. The first, CVE-2026-74798, is a path traversal in the database_clean MCP tool: RemoveUnusedAttributeView() checks only that id is non-empty before joining it into a filesystem path, so an authenticated MCP client can copy any file the kernel can read into the history directory and delete the original. An earlier fix, GHSA-7hm9-v7vf-7g4w, had hardened the HTTP API caller of that same function and left the MCP one alone. The August 8 pair repeats the shape. CVE-2026-59809 resolves {{secrets.*}} placeholders inside the destination URL of the http_request tool, so a crafted URL mails stored secrets to any public host, and GET requests skip the confirmation prompt. CVE-2026-60083 is an MCP file tool blocklist covering one of the four paths the HTTP file API blocks, which leaves data/.siyuan/publishAccess.json readable. Fixed in v3.7.4 and v3.8.0.
EX.Athe http api was hardened. the mcp tool calls the same function
commentary
Three advisories, three tools, and in each case the HTTP surface already had the guard. Bolting an MCP tool layer onto an existing app builds a second front door, and the lock keeps getting fitted to the first one.
impact
An authenticated SiYuan MCP client reads and deletes arbitrary files the kernel process can reach, exfiltrates stored API secrets through unprompted GET requests, and reads publish-mode passwords in cleartext.
AI Engine for WordPress Hands Out Admin Accounts to Anyone Who Gets an Admin to Click a Link #
The AI Engine plugin bundles a chatbot, an AI framework, and an MCP server for WordPress, and every version through 3.6.5 is vulnerable. The reauth_for_authorize function in the MCP OAuth path is missing nonce validation, which makes it cross-site request forgery. An unauthenticated attacker who gets a logged-in administrator to click a link can create a brand new administrator account with credentials the attacker chose. WordPress's ?_method=POST override turns that top-level GET navigation into an authenticated POST against the REST users endpoint, so the attacker needs no account of their own. CVSS 8.8.
commentary
The missing nonce is in the MCP OAuth code specifically. Bolt an agent protocol onto a WordPress plugin and the plugin's auth mistakes graduate into agent-protocol mistakes.
impact
One click from a logged-in admin creates a second admin under attacker control. That is full site takeover from a link, with no prior access.
Scan of 640 Internet-Facing MCP Servers Finds 91.8% Without OAuth #
Nicolás Padilla posted "Exposed by Design: A Dynamic Security Assessment of Internet-Facing MCP Servers at Scale" to arXiv on July 31, 2026. Passive discovery across eleven sources (crt.sh, HuggingFace, GitHub, npm, Smithery, PyPI, Censys, FOFA, Shodan, glama.ai and pulsemcp.com) put over 21,000 server instances within reach. Four measurement runs across July 2026 confirmed 640 production servers and dynamically audited 414 of them with Corvus, a framework of 34 test modules covering ten MCP-specific vulnerability classes. The audit produced 68 reportable vulnerabilities including SQL injection, SSRF against cloud metadata services, prompt template injection and path traversal via cursor manipulation. 91.8% of audited servers had no OAuth authentication and 687 tool instances exposed shell execution with no access control. 41.6% of confirmed servers disappeared within three days between consecutive runs. Corvus was released as open source.
commentary
The 41.6% churn figure is the one to sit with. A population where two in five servers vanish inside three days is not being decommissioned carefully, it is being spun up, pointed at something, and forgotten. The 91.8% without OAuth is what that looks like when nobody comes back.
impact
Not a single vulnerability but a population measurement. OAuth is absent from 91.8% of the servers audited, and 687 tool instances expose shell execution with no access control at all, across a set of servers that turns over every few days.
IBM's Second Langflow Bulletin in Three Weeks Carries Five More MCP Findings #
IBM published bulletin 7282147 on July 31, 2026, seventeen days after the one covering the SHELLOPTS blocklist gap. Seven CVEs, five of them in MCP handling, all fixed in Langflow OSS 1.11.0. CVE-2026-17623 (CVSS 8.8) is improper validation of the command field in MCP server configurations, giving a remote authenticated attacker arbitrary command execution. CVE-2026-17626 (8.8) is incomplete filtering of Docker volume-mount and device-mapping arguments for Docker-based MCP servers, exposing host files for read or modification. CVE-2026-9077 (8.5) lets a remote authenticated attacker bypass localhost-only restrictions and write arbitrary MCP server configurations into IDE config files on the host. CVE-2026-8446 (7.5) is an authentication bypass in the MCP composer endpoint, which ships enabled by default. CVE-2026-7646 (6.5) is a URL-encoded path traversal in resources/read that returns the JWT signing secret, the SQLite database, other users' uploads, and process environment variables.
EX.Aa langflow bulletin with remote code execution in an mcp path
commentary
Five of the seven findings in this bulletin sit in MCP paths, and the previous bulletin was MCP too. The protocol surface is where this codebase keeps failing, which is what tends to happen when it arrives after the architecture.
impact
Command execution and host file access for any authenticated user, plus an auth bypass on an endpoint that is on by default. The IDE config write is the one that travels: a Langflow host ends up registering attacker-chosen MCP servers in a developer's editor.
Google's mcp-toolbox Patches Five, Including an OAuth Path That Accepts Any Google Token #
Google shipped fixes for five mcp-toolbox CVEs on July 31, 2026. CVE-2026-14541 is the loudest: a Google authService initialized with mcpEnabled: true but no explicit audience or clientId skips audience validation for opaque tokens entirely, so the toolbox accepts any valid Google OAuth access token, including ones minted for unrelated applications. CVE-2026-14537 lets an unauthenticated caller invoke tools protected by scopeRequired through legacy HTTP endpoints when --enable-api is on. CVE-2026-14540 is SSRF: the generic HTTP client is built with no CheckRedirect policy and no target IP validation, so a crafted path parameter walks it into internal endpoints. CVE-2026-14538 has bigquery-execute-sql trusting the BigQuery dry-run API to enforce allowedDatasets, then failing open when that API returns an empty array. CVE-2026-14539 rounds it off with io.ReadAll on the /mcp handler and no size cap.
commentary
Two of the five fail open. The dataset check trusts an empty array, and the audience check skips itself when nobody configured an audience. A missing config value should narrow what you accept, not widen it.
impact
Unauthenticated tool invocation, cross-application token reuse, SSRF into internal networks, dataset allowlists that quietly stop applying, and a single oversized request that ends the process.
Flowise Blocked npx --yes, So the Custom MCP Node Reads npm_config_yes Instead #
Two Flowise advisories published on July 29, 2026, both fixed in 3.1.3. CVE-2026-69263 is a bypass of the CVE-2025-8943 patch. That patch blocked the -y and --yes flags on npx, and packages/components/nodes/tools/MCP/core.ts denied environment variables by exact name: PATH, LD_LIBRARY_PATH, DYLD_LIBRARY_PATH, and NODE_OPTIONS. npm also reads its own configuration from npm_config_* variables, so setting npm_config_yes=true reproduces --yes without touching a blocked flag, and launching a Custom MCP server then auto-installs and executes the named package. CVSS 8.7. CVE-2026-69257 landed the same day: httpSecurity.ts did not normalize IPv4-mapped IPv6 addresses before testing them, so ::ffff:169.254.169.254 was classified as IPv6 and skipped every IPv4 CIDR rule in isDeniedIP(), the check used for MCP server URL validation. CVSS 7.6.
EX.Athe denylist, learning that npm also reads npm_config_yes
commentary
A denylist of four variable names is a bet that npm has exactly one way to say yes. It has two, and the second one is documented.
impact
On a default unauthenticated Flowise deployment, a Custom MCP server definition installs and runs an attacker's npm package. Separately, the SSRF guard covering MCP server URLs can be pointed at cloud metadata and internal services.
Flowise's Custom MCP Node Takes a Second RCE in the Same Release, This Time Through PYTHONWARNINGS #
GHSA-g98q-rm45-q9h8, reported by igor-magun-wd and published July 29, 2026, is the third Flowise advisory fixed in 3.1.3 and the second in the Custom MCP node. With CUSTOM_MCP_PROTOCOL set to stdio, which is the default, the node's environment-variable denylist still leaves an authenticated user two routes to code execution. Against a python3 server, PYTHONWARNINGS set to module::antigravity. alongside a chosen BROWSER value runs a command during interpreter startup. Against node, the spawned process has / as its working directory, which defeats the absolute-path validation, and a HOME carrying JavaScript is picked up through require(). Refreshing the available actions on the node triggers either one. CVSS 9.0, affecting flowise and flowise-components 3.1.2 and earlier.
EX.APYTHONWARNINGS, BROWSER, and HOME, none of them on the denylist
commentary
Three advisories, one release, and two of them in the same node. The earlier fixes blocked flag names and variable names. This one arrives through the interpreter's own startup hooks, which are documented, numerous, and not on anybody's list.
impact
An authenticated Flowise user runs arbitrary commands on the host and takes over the application.
Ruflo MCP Bridge Binds 233 Unauthenticated Tools to 0.0.0.0 by Default (RufRoot, CVSS 10.0) #
Noma Labs publicly disclosed CVE-2026-59726 on July 29, 2026, codenamed RufRoot, against Ruflo, an open-source AI-agent platform with 67,000+ GitHub stars that sits at #2 on MCPMarket. Ruflo's MCP Bridge is an Express.js server that exposes 233 internal tools over MCP: shell command execution, database operations, agent management, and memory storage. The shipped docker-compose.yml binds port 3001 to 0.0.0.0, and the bridge's tool-invocation endpoints require no authentication. A single unauthenticated HTTP POST from anywhere on the network reaches terminal_execute and any of the other 232 tools. Noma reported the finding to maintainer Reuven Cohen on June 30, 2026 with a working proof-of-concept against a default deployment; a fix shipped in Ruflo 3.16.3 within 24 hours, binding the bridge to loopback, gating terminal_execute behind server-side executeTool controls, and turning on MongoDB authentication. CVSS 10.0.
EX.Atrying to understand why terminal_execute shipped without auth
commentary
Two hundred and thirty-three tools. One of them is terminal_execute. Zero authentication. The docker-compose file that binds 0.0.0.0 and the tool registry that includes shell exec are in the same repo, shipped by the same maintainer, and neither one is hidden. It took Noma an afternoon to write the PoC and the maintainer 24 hours to fix it, which is the whole timeline you need to know.
impact
Anyone who can reach port 3001 on a default Ruflo install executes arbitrary shell commands, reads and rewrites the platform's persistent AI memory, exfiltrates the LLM API keys the platform brokers, and takes over every agent it manages. The docker-compose default meant that reach was `0.0.0.0`, not `127.0.0.1`.
HashiCorp Ships Terraform and Consul MCP Server Advisories on Consecutive Days, Both Session-State in Stateless Mode #
HashiCorp posted HCSEC-2026-23 on July 28, 2026 for terraform-mcp-server and HCSEC-2026-24 on July 29, 2026 for consul-mcp-server. Both bulletins document session-state failures in each server's streamable-HTTP stateless transport. In Terraform MCP Server, CVE-2026-14869 (CVSS 8.6, High) lets an unauthenticated client override the outbound Terraform API destination so the server sends its own authorization bearer token to an attacker-controlled endpoint, and CVE-2026-16496 lets a caller who obtains another user's MCP session ID run tool calls under that user's Terraform credentials. In Consul MCP Server, CVE-2026-16326 (CVSS 10.0, Critical) lets one client reuse another client's Consul authentication token across requests, and a companion issue lets clients override the Consul backend address to redirect API traffic to an attacker-controlled endpoint. Fix versions are terraform-mcp-server 1.1.0 and consul-mcp-server 0.1.4. Both defective ranges are 0.2.1 through 1.0.0 for Terraform and 0.1.0 through 0.1.3 for Consul.
EX.Ahcsec-2026-23 · hcsec-2026-24, on consecutive-day disclosure
commentary
HashiCorp put out two MCP server advisories in two calendar days and both were stateless mode is stateful, actually in a different key. The 2026-07-28 MCP spec ships the same week and its headline feature is stateless request/response. Every SDK vendor is going to spend the next six months learning what web-framework authors learned when PHP sessions were new.
impact
Two of HashiCorp's flagship MCP servers, in the same 24-hour window, hand their configured backend addresses or their session-bound credentials to whichever HTTP request asks. The Consul session-mixup is the same defect people spent 2003 fixing in web frameworks; the CVSS is 10.0 because the mixed-up thing is a Consul ACL token in an enterprise deployment.
Model Context Protocol 2026-07-28 Spec Rips Out the Stateful Handshake, Deprecates Sampling and Roots and Legacy HTTP+SSE #
The MCP maintainers published the 2026-07-28 specification on July 28, 2026, the largest revision since launch. The bidirectional stateful protocol becomes a stateless request/response protocol. The Mcp-Session-Id header is gone; every request carries its own protocol version, client identity, and capabilities. Server-initiated sampling and elicitation streams are replaced by Multi Round-Trip Requests (resultType: input_required) so the client re-issues the call with the required inputs. New Mcp-Method and Mcp-Name HTTP headers let gateways route without parsing JSON bodies. Authorization moves to RFC 9207 issuer validation, credentials are bound to the issuing server, and Dynamic Client Registration is being deprecated in favor of Client ID Metadata Documents. Roots, Sampling, Logging, and the legacy HTTP+SSE transport are all on a 12-month sunset. Tier 1 SDKs (TypeScript, Python, Go, C#) ship day-one support; Rust ships in beta.
commentary
The spec that got this site started is being deprecated. The maintainers heard the disclosures, agreed with a surprising number of them, and shipped the rewrite. It is genuinely the correct move. It is also going to generate a new run of CVEs, because Mcp-Method and Mcp-Name are HTTP headers, and HTTP headers have a track record.
impact
The specific attack surfaces that produced Asana's cross-tenant leak, the mcp-remote command injection, and the string of session-hijack advisories catalogued elsewhere on this site are, per the release notes, no longer part of the spec. What arrives in their place is a stateless HTTP protocol with two custom routing headers, which is a category of design that has produced request-smuggling and header-desync bugs in every previous incarnation.
GitHub's Own MCP Server Panics on a Completion Request With No Ref, Before It Checks Your Token #
CVE-2026-47427 covers GitHub's official MCP Server prior to 1.1.0. The CompletionsHandler function in pkg/github/server.go reads params.Ref without first checking whether it is nil, so a completion/complete request with a missing or empty ref field dereferences nil and takes the Go runtime down with a panic. The crash happens before any authentication or token validation runs, so any unauthenticated client that can send JSON-RPC messages can do it. Fixed in 1.1.0.
commentary
CVSS put this at 7.5. It is availability only, so it sits at Medium here. The part worth keeping is the ordering: the panic beats the token check, which is what makes unauthenticated load-bearing in that sentence.
impact
One malformed JSON-RPC message from an unauthenticated client crashes GitHub's official MCP server. Every agent connected to it loses its tooling until the process comes back.
FrontMCP's Sandbox Returns the Raw Host Object Because a Proxy Is Not Allowed to Lie #
FrontMCP is a TypeScript framework for MCP. Its codecall:execute tool runs caller-supplied scripts behind a Proxy-based security membrane, and getTool() exposes live Zod schema instances to those scripts. Zod v4 defines _zod as a non-configurable, non-writable own property, and ECMAScript requires a Proxy to report the true value for exactly that kind of property. The membrane is therefore obliged to hand back the unwrapped host object. From there, _zod.constr.constructor is the host Function constructor. Assembling those property names at runtime also slips past the lexical denylist, which inspects the AST. Affects @frontmcp/plugin-codecall through 1.5.6, fixed in 1.5.7. CVSS 9.3, and the framework default of auth: { mode: 'public' } means no credentials are needed.
commentary
Nothing here is a coding mistake. The membrane followed the Proxy invariants exactly, and following them is what surrendered the Function constructor. A sandbox built on Proxies inherits every guarantee the language makes, including the guarantee that it cannot misreport a frozen property.
impact
Arbitrary code execution in the MCP server process, reachable over the network without authentication on a default configuration.
AWS API MCP Server Logs a Warning When Its Policy Engine Fails to Load, Then Serves Every Request Unchecked #
CVE-2026-16584, published July 23, 2026, covers awslabs.aws-api-mcp-server 0.2.13 through 1.3.46. The server loads a read-only operations index at startup and uses it to apply the operator's deny and gate rules to AWS CLI commands. If that load throws, whether from a transient network failure, a file permission problem, or anything else, the server writes a warning to the log and keeps running. The per-request policy check is then skipped for the entire lifetime of the process, and so are the consent prompts. Classified CWE-455, non-exit on failed initialization. Version 1.3.47 refuses to start when the index will not initialize and blocks command execution if it goes missing at runtime. CVSS 7.3.
EX.Athe operations index failed to load. the server logged it and kept serving
commentary
The degraded state and the healthy state look identical from outside the process. One WARNING line in a log is the entire difference between a configured policy engine and no policy engine at all.
impact
Every configured deny and gate rule stops applying, silently, until someone restarts the process. Indirect prompt injection can then drive the mutating AWS CLI commands the operator explicitly blocked, with IAM on the credentials as the only control left standing.
n8n's MCP Client Node Sends Its Requests Around the Platform's SSRF Protection #
GHSA-vhf8-cg2h-cg3p, published July 22, 2026, covers two n8n maintenance lines: the 2.31 line below 2.31.5, and the 2.32 line below 2.32.1. The MCP Client node sends requests to user-supplied endpoints without routing them through the configured SSRF protections, and it does not pin resolved addresses, so a hostname that resolves acceptably during a check can resolve elsewhere on the request itself. CVSS 6.4, and NVD later assigned CVE-2026-72768. Fixed in 2.31.5 and 2.32.1. For operators who cannot upgrade, n8n suggests restricting access to trusted users, disabling the node through NODES_EXCLUDE, or applying network-level egress rules.
commentary
The SSRF protection is configured once, at the platform level, and one node declines to use it. A platform-wide guarantee lasts exactly until a single node opts out of it.
impact
A user who can create or edit a workflow points the server at internal or blocked hosts and reads the responses back out through the workflow.
Microsoft Azure DevOps MCP Server Returns Invisible PR Comments Verbatim, Prompt Injection Turns Reviewer Agent Into a Cross-Project Exfiltrator #
Manifold Security published When Your AI Reviewer Works for the Attacker on July 22, 2026, describing a confused-deputy flaw in Microsoft's official azure-devops-mcp server. Azure DevOps PR descriptions accept Markdown, and the PR-description tool the server exposes to the agent returns the raw body from the API without stripping HTML comments. An attacker with contributor access to any project the victim's Azure DevOps account can see opens a PR whose description is an ordinary human sentence in the rendered UI and a paragraph of instructions inside an <!-- ... --> block underneath. When the victim tells their agent to review the PR, the agent ingests the invisible block as tool output and follows the instructions, which typically direct it to read work-item contents or files from a private project the attacker has no direct access to and stitch them into the review comment the attacker will get to see. Microsoft ships a prompt-injection guardrail called spotlighting on some tools in the same server, but not the pull-request-description tool the bug lives on. MSRC has acknowledged the report; no CVE and no fix as of publication.
EX.Athe review-agent trust model when the pull-request-body tool returns raw markdown
commentary
Microsoft already knows this attack. The company shipped spotlighting as an antidote to indirect prompt injection and applied it to some of the tools this server exposes. The PR-description tool, the one whose whole job is to hand attacker-controlled Markdown to a language model, is not one of them.
impact
A contributor to any single project in an Azure DevOps organization writes hidden text into a PR description and steers a victim's AI reviewer into reading and returning data from projects the contributor was never authorized to see. The exfil channel is whatever comment or artifact the agent posts back on the poisoned PR.
AWS Kiro Fetches a Poisoned Web Page, Follows the Hidden Instructions to Rewrite Its Own mcp.json, and Auto-Loads the Attacker's Server #
Intezer Research, with Kodem Security, published When the AI Edits Its Own Trust Boundary on July 21, 2026 against AWS Kiro, Amazon's agentic IDE. The agent has unattended write access to ~/.kiro/settings/mcp.json and Kiro auto-reloads that file the instant it changes. A page hosted anywhere on the public web can carry an invisible block of prompt-injection payload; a developer asking Kiro to summarize the URL sends the whole page through the model, and the payload instructs the agent to add an attacker-controlled MCP server entry to the settings file. The reload fires, the attacker's server process starts under the developer's account, and the tool description it advertises to the agent becomes the next prompt-injection surface. Amazon assigned CVE-2026-10591 on July 22, 2026 and shipped the fix in Kiro 0.11.130. Kiro now marks mcp.json, .vscode/tasks.json, .git, and other paths as protected so the agent has to obtain explicit developer approval before writing them.
EX.Aletting the model write `mcp.json` was the entire security boundary
commentary
The IDE's answer to the question who is allowed to configure this IDE's tools was whoever the agent decides to trust, and the agent's answer to who is allowed to write my prompt was whoever wrote the last web page you asked me to read. Kiro's fix is a hardcoded list of files the model is not allowed to edit without a click, which is the correct fix and also a small monument to the design that got here.
impact
A URL a developer thought they were asking their IDE to summarize gets code execution on the developer's machine with the developer's own privileges. Anything reachable from that shell is reachable to the attacker, including cloud credentials, source trees, and the local git and npm identities the developer signs commits and releases with.
Island Security Publishes AgentBaiting: 800+ Fake MCP Servers Inside a 7,600-Repo FakeGit Campaign Deliver SmartLoader When AI Agents Recommend Them #
Island Security published AgentBaiting: How Fake AI Skills Deliver Malware at Scale on July 21, 2026, and Bleeping Computer and Help Net Security wrote it up the same week. The wider FakeGit operation, ~7,600 GitHub repositories across ~6,600 accounts, seeds convincing lookalikes of common developer tooling; roughly 800 of those repositories pose as MCP servers or awesome-ai-skills-style catalogs. The AI-skill wave built through March and peaked in April 2026 and the repositories have appeared more than 600 times in public AI registries and catalogs. Island's testing found Claude Code, Google Gemini, and ChatGPT surfacing the fake repositories unprompted when asked for an MCP server for a given task and then handing the README's install instructions to the developer. The install ZIP drops SmartLoader, which pulls in the StealC infostealer. About 200 of the FakeGit repositories account for the 14 million measured downloads across GitHub Release assets to date.
commentary
The MCP registry story for the last year has been the agent will find you the right tool. The AgentBaiting result is that the agent does, in fact, find a tool; the tool is a payload; and the developer's role in the exchange is to say yes.
impact
An AI coding agent asked to find an MCP server or Skill returns an attacker's repository as a legitimate option and walks the developer through installing it. On install, SmartLoader lands and pulls StealC, which harvests credentials, tokens, cookies, and session material from browsers and developer tooling. The exposure scales with the agent, not the developer, because the agent is the discovery layer.
Onyx Copies Every User’s MCP OAuth Token Into One Shared Admin Row #
Onyx published GHSA-q62f-rv3h-f822 on July 20, 2026. In backend/onyx/server/features/mcp/api.py, OnyxTokenStorage.set_tokens and set_client_info wrote per-user OAuth tokens into a shared admin MCPConnectionConfig row, and _db_mcp_server_to_api_mcp_server returned that row through auth_template.headers. GET /api/mcp/servers and GET /api/mcp/servers/persona/{persona_id} therefore returned another user’s Authorization header to any BASIC_ACCESS user. CVSS 9.6 with scope changed. The code fix landed in PR #11238 on May 20, the advisory followed two months later, and NVD assigned CVE-2026-71424 on August 17. Fixed in 3.1.10, 3.2.14, and 4.0.0.
Per-user tokens, stored in a row called admin. The endpoint that hands them out is the one that lists your MCP servers, so it is the endpoint everybody calls. The credentials are for third-party services that will never learn any of this happened.
impact
Any authenticated Onyx user with basic access reads other users’ OAuth Authorization headers for their connected MCP servers and impersonates them against those upstream services.
nginx-ui Validates Nginx Directives on Three of Its Four Config Write Paths #
Four advisories landed against nginx-ui on July 17, 2026, all fixed in 2.4.1 and scored 8.1 to 8.8 at NVD. internal/config/validation.go's ValidateConfigFile is the control that blocks js_, perl_, load_module of the njs and perl modules, and user root. CVE-2026-84317 (GHSA-76pm-mq2q-9gcr) is the MCP tool nginx_config_add being the one write path it is not wired to. CVE-2026-84318 (GHSA-9jww-cxg5-rj9m) is that same tool writing config to disk and triggering a reload without calling it, where the identical REST flow at POST /api/configs does. CVE-2026-84319 (GHSA-5r62-gj48-897x) is the MCP configuration interface accepting restricted directives that the regular HTTP API rejects, load_module, js_import and js_content among them. CVE-2026-84360 (GHSA-vc32-4gwf-77xp) is /mcp and /mcp_message requiring only ordinary authentication where the HTTP mutation routes require RequireSecureSession, so an OTP-enabled user skips the step-up by going through MCP.
EX.Asquidward at the blinds watching ValidateConfigFile cover three of the four writers
commentary
This site has carried nginx-ui since April 2026, when /mcp had the auth middleware and /mcp_message, the one that writes config, did not. Three months later the validator and the step-up are both wired to the HTTP routes and both miss the MCP ones. The MCP surface keeps getting added beside the security controls instead of behind them.
impact
An authenticated user loads an njs module or sets `user root` through the MCP tools, which is code execution as root on the official image, and does it without the OTP step-up the web interface demands for the same change.
ArcadeDB's MCP Transport Never Binds the Authenticated User, So Every Permission Check Passes #
Two advisories landed against ArcadeDB before 26.7.3 on July 17, 2026. CVE-2026-68578 is the structural one: the MCP HTTP transport fails to bind the authenticated principal, so every engine permission check silently passes as a no-op. Any non-root user allowed to reach MCP can perform arbitrary database writes, DDL, and schema mutations, and can execute arbitrary JavaScript through the query tool. CVE-2026-67357 sits next to it: the get_server_settings MCP tool returns arcadedb.ha.clusterToken in cleartext, and that token combined with the X-ArcadeDB-Cluster-Token and X-ArcadeDB-Forwarded-User headers is enough to impersonate root. Both rated CVSS 7.5.
EX.Athe engine permission checks, silently returning true since the mcp transport shipped
commentary
The permission checks were running the entire time. They just had nobody to check them against, and passing was the default. Chain the token leak on top and a low-privilege user owns the server.
impact
Read the cluster token out of one tool call and come back as root. Skip that entirely and an ordinary MCP-allowed user still has arbitrary JavaScript execution, because the permission checks are decorative.
Adversa AI published DeepJack on July 15, 2026, an attack class against the cursor:// protocol handler that Cursor registers with the operating system at install time. A deeplink pointing at Cursor's mcp/install endpoint pops the MCP server install dialog, and that dialog is the only consent step between a clicked link and an attacker-controlled command running with the developer's privileges. The researchers pad the command with whitespace so trailing arguments sit off the right edge of the dialog's single-line box, and they nest a double-URL-encoded mcp/install URI inside a pr-review parameter that Cursor never recursively decodes, so a link that presents as a pull-request review carries an install instruction. Cursor's triage closed both reports as duplicates of an issue filed internally on April 27, 2026. Build 3.9.8, shipped after the disclosure, still reproduces it. No CVE was assigned.
EX.Adeeplink handler, install dialog, url decoder: each assuming another checked
commentary
Cursor knew about the dialog on April 27 and shipped 3.9.8 almost three months later with the primitive intact. The install dialog is the entire security model for cursor://, and it renders the command in a single-line box that scrolls. Whitespace is the exploit.
impact
One click and one Approve on a link that looks like a code review installs the attacker's MCP server and runs its command unsandboxed. That reaches SSH keys, cloud credentials, live session tokens, browser cookies, source code, and anything else the developer's account can touch, plus a path straight into CI.
IBM Langflow's MCP stdio Launcher Blocklist Forgot SHELLOPTS, BASHOPTS, and PS4 #
IBM published CVE-2026-12940 on July 14, 2026 against Langflow OSS 1.0.0 through 1.10.1: unauthenticated remote code execution through environment variable injection in the MCP stdio launcher. src/lfx/src/lfx/base/mcp/util.py keeps a DANGEROUS_ENV_VARS blocklist of variables it refuses to pass into a spawned MCP server process. Three names were missing from it, and they happen to be the three that let you talk a shell into running a command at startup: SHELLOPTS, BASHOPTS, and PS4. Turning on shell tracing and pointing the trace prompt at a command substitution has been a documented bash execution trick for years. CVSS 9.8.
EX.Acan't have env var injection if you remember every dangerous variable
commentary
A blocklist is a bet that you already thought of everything. This one covered the obvious names and missed the trio that every shell-injection cheatsheet lists.
impact
An unauthenticated attacker reaches code execution on the Langflow host through the MCP stdio launcher. Every 1.x release up to 1.10.1 is affected.
AWS HealthLake MCP Server Doesn't Validate Its Own Pagination URLs, Ships Temp Credentials to Whoever Sends a next_token #
AWS Security Bulletin 2026-054-AWS landed on July 14, 2026 for CVE-2026-15643, a server-side request forgery in awslabs.healthlake-mcp-server, the AWS-published MCP server that fronts AWS HealthLake FHIR datastores. The pagination handler accepts a caller-supplied next_token value and dereferences it without checking that the URL points back at HealthLake. A crafted next_token sends the server's outbound request, together with the temporary AWS credentials the MCP server uses to call HealthLake, to any endpoint the attacker names. CVSS 3.1 is 7.3, High. Authenticated remote attacker, no user interaction. The fix ships as version 0.0.14.
commentary
The pagination token is a URL the server produced last request and is now being asked to dereference. Zero code in the tool needed to accept a caller-supplied URL. It did anyway. HealthLake is the compliance-branded HIPAA offering, which is the funny part.
impact
A remote authenticated caller who reaches the HealthLake MCP tool gets the server to POST its own temporary AWS credentials to an attacker-controlled URL. Those credentials scope to whatever role the MCP server assumed when it started, which on a HealthLake deployment reaches every FHIR record the role can see.
mcp-atlassian Has a Path Validator, and confluence_upload_attachment Never Calls It #
GHSA-g5r6-gv6m-f5jv, published July 10, 2026, covers mcp-atlassian before 0.22.0. confluence_upload_attachment passes its client-supplied file_path straight to open(file_path, "rb") in src/mcp_atlassian/confluence/attachments.py, by way of _upload_attachment_direct(). The codebase already ships validate_safe_path and applies it elsewhere; this call site does not. CVSS 7.7. The fix is one validation call added ahead of the open, released in 0.22.0.
EX.Avalidate_safe_path, watching the upload tool call open() directly
commentary
The validator was written, shipped, and used. The one path it never reached is the one whose job is to open a file the caller names.
impact
An authenticated MCP client, or an agent acting on injected instructions, reads any file the server process can read and uploads it to Confluence. On Linux that includes `/proc/self/environ`, which carries the server's own credentials and API tokens.
CKAN MCP Server Patches Three: A Prefix-Only Regex, a Cache Key That Collides, and Errors That Repeat Everything #
Three advisories for @aborruso/ckan-mcp-server, all published July 9, 2026. isValidMqaServer validates the server_url parameter against /^https?:\/\/(www\.)?dati\.gov\.it/i, which has no end anchor and no host boundary, so https://dati.gov.it.attacker.com/x and https://dati.gov.it@attacker.com/x both pass and the MQA quality tools return an attacker's response (CVE-2026-73845, CVSS 5.3, fixed in 0.4.111). canonicalizeParams in src/utils/cache.ts joins sorted key-value pairs with unescaped &, =, and | delimiters, so { q: "budget", rows: 10 } and { q: "budget&rows=10" } build the same key and share one entry in a cache that is enabled by default (CVE-2026-73846, CVSS 6.5, fixed in 0.4.111). Error paths return raw upstream response bodies and internal exception messages verbatim rather than a generic message (CVE-2026-73844, CVSS 3.7, fixed in 0.4.112).
commentary
The error-disclosure bug scores 3.7 alone and is the least interesting of the three by itself. Sitting behind the host-validation bug, it is the channel that hands back whatever that one fetched.
impact
An attacker primes the shared cache so another user's query returns a response prepared for a different one, points the quality tools at a lookalike host, and reads upstream content, internal hostnames, and database errors out of the error text.
tumf mcp-text-editor Path Traversal in _validate_file_path, Maintainer Closes the Report #
CVE-2026-15138 landed on July 9, 2026 against tumf's mcp-text-editor, an MCP server that gives an AI assistant read and write access to files on the developer's machine. The _validate_file_path function in mcp_text_editor/text_editor.py accepts a caller-supplied file_path argument and does not normalize it before deciding whether the target sits inside the allowed directory, so a ../-laden path walks past the intended sandbox and back to any file the server process can reach. Versions 1.0.0, 1.0.1, and 1.0.2 are affected. The disclosure is a 5.3 Medium under CVSS 4.0 and requires that the operator invoke the vulnerable tool with attacker-influenced input, which for an MCP server is what the whole product does. The reporter filed an issue on the project's GitHub before publication; the maintainer closed it without a comment, a patch, or a release.
commentary
The function is literally named _validate_file_path. It is the one place in the codebase whose entire purpose is to answer the question the CVE is about. The maintainer's response to the report was to close the issue, which is a defensible position for a hobby project and an alarming one for something the MCP registry lists as an available tool.
impact
Any prompt or tool response that reaches the agent and coaxes it to open `../../etc/passwd`, `~/.ssh/id_ed25519`, or any other file readable by the server process gets that file's contents, past whatever directory scoping the operator thought they had configured. The write path has the same missing check, so a poisoned prompt can also overwrite files outside the intended workspace.
SPELLSMITH Study Puts Numbers on Taint-Style Bugs Being the Median MCP Server Vulnerability #
A team from Tongji University posted Mitigating Taint-Style Vulnerabilities in MCP Servers via Security-Aware Tool Descriptions on arXiv on July 8, 2026 (2607.07461). The paper catalogs the vulnerability landscape of published MCP servers, finds that taint-style flaws (SSRF, path traversal, SQL injection, command injection, and their cousins) account for a substantial fraction of reported issues, and reports that these bugs require significant code changes to remediate and are met with slow or absent community responses. The authors propose SPELLSMITH, a defense that packages security guidance for the model into the tool description itself so the agent is nudged away from feeding tainted input into the tool in the first place. The paper is one of a small cluster of academic papers this quarter that back the informal observation that MCP servers keep shipping the same bug classes into the CVE database.
commentary
Every week the CVE database picks up another MCP server with an unnormalized path in its file API or an unvalidated URL in its HTTP fetcher, and every week the SPELLSMITH numbers get more defensible. Naming a mitigation SPELLSMITH and shipping it as a prompt for the agent is a very 2026 answer to the question of who is responsible for input sanitization in a protocol whose entire pitch was that the LLM does the plumbing.
impact
The paper does not disclose a new vulnerability. It puts numbers on a claim that has been anecdotal for the last six months: the median public MCP server ships with at least one taint-style bug, and the median maintainer has not shipped a fix.
MCP Ruby SDK Ships Five Advisories in One Day, Including Session Poisoning the Spec Warned About #
The modelcontextprotocol/ruby-sdk repo published five advisories against the mcp gem on July 8, 2026, one day after 0.23.0 shipped the fixes. Every one of them affects 0.22.0 and earlier. CVE-2026-67431 is session poisoning: the Streamable and SSE HTTP transports never verify session ownership, so anyone holding a stolen session ID can POST tool calls to /messages/{session-id}, and the server executes them and streams the results back down the victim's SSE connection where they read as the victim's own. CVE-2026-67432 reads the full HTTP body into memory with no upper bound, and does it before session validation; the reporter's 512 MB request took RSS from 44 MB to 1.66 GB. CVE-2026-63118 skips Host and Origin validation, so any page a developer visits can reach a loopback MCP server by DNS rebinding and call its tools. CVE-2026-63119 and CVE-2026-67430 finish the set with unbounded IO#gets on the stdio transports and sessions that never expire, 50,000 of which fit in 27 seconds.
EX.Apublishing advisory four of five against your own sdk in a single afternoon
commentary
The session poisoning advisory says the quiet part itself: the MCP spec recommends binding session IDs to user identity, and the C# and Go SDKs already do it. Ruby shipped 22 minor versions without it, then fixed five things in one afternoon.
impact
An attacker with a session ID runs tools as the victim, and the victim reads the output as legitimate. Separately, one unauthenticated POST takes down a Ruby MCP server, and any web page can drive a developer's localhost server through their browser.
AWS mcp-gateway-registry Metrics Service Interpolates table_name Straight Into SQL #
AWS Security Bulletin 2026-052-AWS landed on July 6, 2026 for CVE-2026-14471, an authenticated SQL injection in mcp-gateway-registry, the open-source gateway and registry that agentic-community publishes for centralizing MCP servers behind OAuth. The metrics-service retention policy management component takes a caller-supplied table_name value and interpolates it into SQL statements in identifier position with no neutralization. An authenticated remote user submits a crafted table_name and executes arbitrary SQL against the metrics database, which the bulletin notes stores API key material alongside the metrics themselves. CVSS 3.1 comes in at 8.1 and CVSS 4.0 at 8.6, both High. The fix ships as version 1.0.13; there is no workaround.
EX.Ait looks like you're trying to interpolate `table_name` into a SQL identifier. want me to skip the escaping?
commentary
The registry is the piece of the stack the vendor asked customers to trust so they would not have to trust the individual MCP servers behind it. The metrics service inside that registry took a table_name string from a request and concatenated it into a SQL identifier. psycopg2.sql.Identifier has existed since 2017. So has the practice of not doing this.
impact
An authenticated caller with reach to the metrics-service endpoint reads every row the metrics database holds, including the stored API keys the registry uses to broker calls to downstream MCP servers, then deletes or alters records at will. The registry's whole reason to exist is being the trusted broker in front of a fleet of MCP servers; the SQL injection turns that broker into a credential dump.
AIAnytime Awesome-MCP-Server wiki-summary Hands the URL Argument to requests, SSRF to Anywhere #
CVE-2026-14748 published on July 5, 2026 against AIAnytime/Awesome-MCP-Server, whose mcp-wiki subproject ships an MCP tool that summarizes wiki pages for the connected agent. The wiki-summary handler in mcp-wiki/src/mcp_wiki/server.py takes a caller-supplied url argument and passes it into the outbound HTTP client with no scheme allow-list, no host allow-list, and no block for link-local ranges. A prompt-injected wiki summary request to http://169.254.169.254/latest/meta-data/iam/security-credentials/ returns the instance profile credentials for whichever cloud account the agent happens to be running in. The disclosure is Medium at CVSS 6.3 and the exploit has been published. The reporter filed the issue with the project ahead of publication and, per the CVE record, the project has not responded.
commentary
This is the sixth or seventh time in 2026 that an MCP tool with url in its argument list has turned out to have neither scheme nor host filtering. Every wiki-summary MCP server on the planet reads the same tutorial before it ships, and the tutorial does not have the 169.254.169.254 line in it.
impact
An MCP server whose only intended reach was the public Wikipedia HTTP endpoint becomes an unauthenticated outbound fetcher for any URL an attacker can convince the agent to pass in. On a cloud host that is enough to reach the instance metadata service, cluster DNS, and internal admin endpoints the agent's network position happens to include.
obsidian-tc Publishes Five Advisories and the First One Is Any Token, Any Vault #
The-40-Thieves published five advisories on July 3, 2026 against obsidian-tc, an access-controlled MCP server for Obsidian vaults, all fixed in 1.3.1. CVE-2026-77366 (GHSA-84c9-qqpq-2pq5, 9.9) is the structural one: tool dispatch never compares the caller-supplied input.vault against the vault bound to the caller, the JSON Web Token carries no vault claim, and the folder ACL is shared across vaults, so any token reaches any configured vault. CVE-2026-77363 (GHSA-pqh8-4pj7-32xx, 8.8) is a Streamable HTTP transport that validates neither Host nor Origin and enables no DNS-rebinding protection, which the project's own documented loopback setup pairs with auth.mode set to none. CVE-2026-77364 (GHSA-cvp8-vvgf-69q4, 6.5) is undefined readPaths and writePaths allowing every path, strictReadDefault not covering direct requests, and .obsidian, .git and .trash being excluded only during traversal. CVE-2026-77361 (GHSA-c5xx-h28h-f682, 4.7) checks the read ACL on a lexical path and containment on the resolved one, so an in-vault symlink under an allowed glob lands in a denied folder. CVE-2026-77362 (GHSA-43r2-c7g8-prc8, 4.3) returns denied-note data through fields nobody filtered: group counts in tasks_filter, unfiltered queries in makemd_query.
EX.Aempty display case: where the vault claim goes in the token
commentary
The project calls itself governed and agent-ready, and the governance layer is the part that broke in all five: an ACL shared across the tenants it exists to separate, a default that allows everything, and two path checks that disagree about which path they are checking.
impact
One token reads and writes every vault the server is configured with. A page the user visits reaches the loopback transport. The default ACL allows every path, including the `.obsidian` directory where plugin secrets are stored.
fast-mcp-telegram Uses Bearer Tokens as Session-File Paths; Path Traversal Grabs the Default Account #
CVE-2026-52830 (CVSS 9.4) landed in the NVD on July 2, 2026 against fast-mcp-telegram, an MCP server that bridges HTTP requests to Telegram's MTProto API and supports multi-user Bearer-token authentication. The server authenticates incoming HTTP clients by joining the raw Bearer-token string into a session-file path and checking whether that file exists on disk. The verifier explicitly rejects the reserved literal telegram so HTTP callers cannot select the stdio/legacy default session, but it does not reject .. and does not normalize the path before the existence check. A remote HTTP client that sends Authorization: Bearer ../fast-mcp-telegram/telegram walks the traversal back to the documented default session file at ~/.config/fast-mcp-telegram/telegram.session, and the server hands the caller that session. With account-prefixed MCP tools enabled, the prefix middleware still exposes tools for the default account, so the intended isolation between the HTTP transport and the legacy default account collapses. Every version prior to 0.19.1 is vulnerable.
EX.Athe reviewer who approved `session_path = join(dir, bearer_token)` as the entire auth layer
commentary
os.path.join(sessions_dir, bearer_token) is written down somewhere in this repository as an authentication decision. The reserved-name check knew telegram was the string to worry about. The path traversal reached the string telegram anyway, because the string was also a filename. The bug is not the missing normalization; the bug is that the token was a path.
impact
An unauthenticated remote HTTP client with network reach to a `fast-mcp-telegram` HTTP endpoint impersonates the default Telegram account any time that account's session file lives at the documented default path. From there the caller drives every account-prefixed MCP tool as the default user, which for a Telegram bridge covers reading and sending messages, listing chats, and shipping attachments.
Microsoft's Detection and Response Team, the incident-response arm inside Microsoft Security, published guidance on June 30, 2026 flagging tool-description poisoning as an active attack path against enterprise agents built on Microsoft 365 Copilot, Copilot Studio, and Azure AI Foundry. Every MCP tool ships a plain-text description that tells the agent what the tool does and when to invoke it, and the guidance notes that the description lives in the agent's working memory next to its real orders. Third-party MCP servers can change that description at runtime and, in default enterprise configurations, the poisoned version becomes active without a new consent prompt. Microsoft's worked scenario has a finance team wiring a vendor-enrichment MCP server into a Copilot Studio invoice agent. The tool's visible name and summary stay unchanged, while the description grows a formatting-note-shaped instruction to attach the last thirty unpaid invoices to the next call. The next routine supplier lookup ships those invoices to whatever endpoint the tool's HTTP client points at. Microsoft's mitigation stack is a tenant-level MCP publisher allowlist (disabling Allow all), Prompt Shields inspection of tool metadata and responses, Purview DLP on tool parameters, human approval on high-impact actions, Entra Agent ID plus Conditional Access on agent identities, and Sentinel correlation between agent behavior and MCP telemetry.
commentary
Invariant Labs coined tool poisoning in April 2025. Fifteen months later Microsoft Incident Response is walking Copilot Studio customers through a worked example of it, with a mitigation checklist that reads assume MCP publishers are hostile. The protocol still ships the same trust boundary the coining paper described, which is to say it does not really ship one.
impact
An approved third-party MCP tool can be turned into an exfiltration channel by rewriting its description, and every enterprise Copilot tenant that leaves the default `Allow all` MCP configuration on picks up the poisoned version without any re-approval. The advisory applies to Microsoft 365 Copilot, Copilot Studio, and Azure AI Foundry agents that can send email, create files, change calendars, query business systems, or run multi-step workflows.
The Official MCP Rust SDK Published Three Advisories in One Day, and NVD Caught Up in September #
On June 29, 2026 the modelcontextprotocol/rust-sdk maintainers published three advisories against the rmcp crate. CVE-2026-63127 (GHSA-33f5-2c5q-wgwj, 8.2) is the OAuth one: ResourceServerMetadata carries no resource field at all, so discover_oauth_server_via_resource_metadata never runs the RFC 9728 check that the resource identifier matches what was requested. A server at fake-mcp.com/mcp can name a real server's authorization server as its own and collect tokens minted for the real one. Jian Cui, Minsun Shim, Zhou Li and Xiaojing Liao of UIUC and UC Irvine reported it. CVE-2026-63128 (GHSA-9pj6-vhgr-3mwh, 7.5), from hewei-gikaku, has the Streamable HTTP server create a session entry before validating the request body and never release it when validation fails, which the advisory measures at roughly 2,000 malformed requests a second and about 75 GB of resident memory a day. GHSA-c9xm-49cp-xcr9, which has no CVE, has the OAuth client fetch a server-supplied resource_metadata URL out of WWW-Authenticate with no same-origin or private-network check. All three are fixed in 2.0.0 and a fourth advisory followed on July 2. NVD published the two CVEs on September 16, seventy-nine days after the repository did.
EX.Askeleton on the bench: published June 29, indexed by NVD September 16
commentary
Audience validation is the part of OAuth that stops one server spending another server's tokens, and the struct that was supposed to carry the audience did not have the field. The September timestamps are the other half of the story: three months of anyone watching CVE feeds for SDK bugs seeing nothing at all.
impact
A malicious MCP server collects access tokens issued for a different server and impersonates the user against it, or drives the client into fetching loopback and RFC 1918 addresses from inside its network. Separately, an unauthenticated caller exhausts a Streamable HTTP server's memory.
Djinn Stealer Adds ~/.claude/mcp.json to Its Loot List After SimpleHelp Auth Bypass #
Blackpoint Cyber's Adversary Pursuit Group published an intrusion investigation on June 29, 2026 that started with CVE-2026-48558, a critical (CVSS 10.0) authentication bypass in SimpleHelp RMM's OpenID Connect flow originally disclosed by Horizon3.ai on June 12. The server accepted OIDC identity tokens without verifying their cryptographic signature, so an unauthenticated attacker submitted a forged token with arbitrary claims and got a fully authenticated technician session on an internet-facing SimpleHelp install. From that foothold the operator dropped TaskWeaver, a heavily obfuscated Node.js loader that runs as jquery.js under node.exe, then used TaskWeaver's encrypted channel to deliver a second previously undocumented family, Djinn Stealer. Djinn ships collection rules for Windows, macOS, and Linux and, alongside the standard AWS/Azure/GCP/Oracle/Okta/Cloudflare/Vault/Terraform/browser/crypto-wallet sweep, has a dedicated section for AI-assisted development tools. It reads configuration, session, and auth material from Anthropic Claude, Google Gemini, and OpenAI Codex, plus open-source coding agents Cline, OpenCode, and Kilo, and it explicitly walks paths like ~/.claude/mcp.json where MCP server URLs and tokens live. CISA added CVE-2026-48558 to the Known Exploited Vulnerabilities catalog the same day Blackpoint published, with a BOD 26-04 remediation deadline of July 7 for federal civilian agencies.
The moment a commodity infostealer's collection ruleset lists ~/.claude/mcp.json next to .env files and browser cookies is the moment MCP configuration is officially loot. Djinn also enumerates Cline, OpenCode, Kilo, Gemini, and Codex, so the operators did the market research. The .claude directory is now a threat model of its own.
impact
Any organization exposing an unpatched SimpleHelp RMM to the internet could have its technician session hijacked with a forged OIDC token, then have a developer machine's MCP configuration harvested along with the usual cloud, source-control, and wallet material. Because MCP configs carry the tokens the developer's own agent uses, the stolen material grants the attacker the same downstream reach the agent already had into repos, databases, cloud accounts, and internal APIs.
Amazon Q for VS Code Auto-Loads .amazonq/mcp.json From Any Cloned Repo #
Wiz Research's Maor Dokhanian disclosed that the Amazon Q Developer extension for Visual Studio Code reads .amazonq/mcp.json from any opened workspace and spawns the MCP servers it defines without checking workspace trust, surfacing a prompt, or even logging the action. The spawned processes inherit the developer's full environment, so anything the shell carries, including AWS access keys, cloud CLI tokens, SSH agent sockets, and API secrets, is handed directly to whatever command the config pointed at. Wiz reported the issue to AWS on April 20, 2026; AWS deployed an initial fix on May 12 and publicly disclosed on June 26 under Security Bulletin 2026-047-AWS as CVE-2026-12957 (CVSS 8.5). The same bulletin tracks a second flaw, CVE-2026-12958, a missing symlink check in Language Servers for AWS that lets a maliciously crafted symlink inside an opened workspace point at a target outside the workspace trust boundary, enabling arbitrary file writes. Both are remediated in Language Servers for AWS 1.65.0; AWS asks customers to upgrade to 1.69.0 for the broader rollup.
EX.Agit clone, open in VS Code, lose AWS creds. apparently that's the design
commentary
Workspace trust exists in VS Code specifically so that git clone && code . is not also chmod +x ./*.sh && ./run-all. Amazon Q's MCP loader read past that signal because the config file lived under .amazonq/ and was therefore, by assumption, friendly. The same assumption produced the symlink bug. The fix list is the assumption list.
impact
Anyone who clones a repository, opens it in VS Code with Amazon Q installed, and is connected to their cloud session executes whatever the repo's `.amazonq/mcp.json` told MCP to run, attached to their live AWS credentials, with no further interaction. The chained symlink bug bumps the same workspace-open into arbitrary file writes outside the trust boundary.
Three MCP Servers Fetch Whatever URL You Name, Reported in June and Given CVEs in August #
TianYu-0829 opened public GitHub issues on June 25, 2026 against three MCP servers, all the same shape. The parse-csv tool in mcp-dominican-layer validates csvUrl with z.string().url() and passes it to axios.get() (CVE-2026-19751). Its parse-pdf tool does the same with pdfUrl (CVE-2026-19752). The explore_url tool in mcp-rdf-explorer hands url to requests.get() in server.py (CVE-2026-19753). None of the three restrict scheme, hostname, resolved IP range, port, redirects, or timeouts. Each proof of concept drives the server at a local HTTP listener through the MCP Inspector. VulDB filed the CVEs on August 13, seven weeks after the issues went public.
commentary
Zod confirmed the string was a URL. That is the entire check, and it is exactly the check that a URL-fetching SSRF is built to pass.
impact
A tool argument reaches an outbound HTTP client with no destination policy, so the server fetches internal services and cloud metadata endpoints on the caller's behalf and returns what it gets.
Red Hat Satellite foreman-mcp-server Treats Session IDs as Auth, Logs Them #
Red Hat published advisories for two issues in foreman-mcp-server, the Technology Preview MCP server bundled with Satellite 6.18. CVE-2026-12112 (CVSS 7.8, Important) is the session-management bug. The server caches authenticated client connections and trusts the session ID on subsequent requests without re-validating the underlying authentication tokens, so anyone holding a session ID inherits the active administrative session. CVE-2026-9073 (Moderate) is how that session ID gets obtained. The server writes every newly created session ID to standard logs at the informational level, and when debug logging is enabled, also persists HTTP authorization headers in cleartext. Both advisories landed on June 23, 2026, without a fixed-version pointer at publication. Red Hat's interim mitigation is to restrict access to foreman-mcp-server, scrub log forwarding, and watch for suspicious session activity.
commentary
A session ID treated as a bearer token is a design choice. A session ID treated as a bearer token and logged at INFO is the kind of thing that fails its first compliance audit. Both behaviors live in the same component, shipped under the Technology Preview label, which is the industry-standard phrasing for please discover the bugs for us.
impact
Anyone with read access to Satellite's container logs, or to any sink those logs were forwarded to, harvests session IDs that are themselves the bearer credential. Replaying them produces hijacked administrative sessions on a Satellite instance and, through it, infrastructure-wide code execution against the hosts it manages.
Ouroboros Rebuilds Its .env Denylist After the First One Left the MCP Config Root Reachable #
Ouroboros is a local-first runtime for AI coding agents that records their actions and applies user-defined policies. CVE-2026-47211 was closed by adding _UNTRUSTED_ENV_DENYLIST, which stops a .env in an untrusted project directory from redirecting execution. That list did not cover every key. Through 0.42.0, OUROBOROS_MCP_CONFIG still pointed the runtime at a YAML file whose server command and args are executed through the stdio client, while OUROBOROS_PLUGIN_LOCKFILE and OUROBOROS_PLUGIN_TRUST_ROOT redirected the installed-plugin roster and its trust root. A .env is auto-loaded at import with no review step, so cloning a hostile repo is the entire delivery mechanism. Version 0.42.1 denylisted those keys and separately stopped auto-loading ./.ouroboros/mcp_servers.yaml from the working directory, a path that reached the same place with no .env involved at all. CVSS 8.4.
EX.Acan't be redirected by a hostile .env if you denylist most of the variables
commentary
The first fix enumerated dangerous variables and missed the one named after the MCP config file. Underneath it sat a working-directory auto-load that made the .env optional anyway.
impact
Clone a malicious repository and the agent runtime launches the attacker's MCP servers running the attacker's commands. The approval gate does not intervene, because the config that defines the gate is the thing being replaced.
Mastra AI npm Scope Hijacked by Sapphire Sleet, 142 MCP Framework Packages Backdoored #
Between 01:12 and 02:39 UTC on June 17, 2026, a single compromised npm account named ehindero republished 142 packages across the @mastra scope, the TypeScript AI agent framework whose @mastra/core, @mastra/mcp, and @mastra/mcp-docs-server packages clear roughly a million weekly downloads between them. The compromised versions were byte-for-byte identical to the legitimate builds; the only change in each manifest was a single injected dependency, easy-day-js, a typosquat of dayjs published one hour earlier under the alias sergey2016. The dependency's postinstall hook disabled TLS certificate verification, fetched a second-stage payload from attacker infrastructure, executed it as a detached background process, and deleted itself to limit forensic traces. The cross-platform infostealer harvested browser data from Chrome, Edge, and Brave, extracted credentials from 166 cryptocurrency wallet extensions, and swept GitHub tokens, npm tokens, SSH keys, and .env files before exfiltrating to attacker C2. Microsoft Threat Intelligence attributed the activity to Sapphire Sleet (BlueNoroff), a North Korean state actor that has been running fake-recruiter LinkedIn campaigns against open-source maintainers; Mastra confirmed the compromised maintainer was a current employee whose machine was taken over after exactly that kind of contact. Socket flagged the malicious wave within six minutes of publication and Mastra force-published clean releases across all 142 packages.
EX.Aevery AI dev who installed @mastra/core this morning, reading the IOCs over coffee
commentary
One LinkedIn DM took over the entire @mastra npm scope. Time-to-publish-malware was eighty-eight minutes, faster than most incident-response oncall rotations resolve a page. The remediation checklist starts at "rotate every credential a developer machine has ever held" and the list gets longer from there.
impact
Anyone running `npm install` against an `@mastra/*` version in the 88-minute window received a credential harvester running inside their developer or CI/CD environment. The blast radius covered every consumer of the framework's MCP client and server packages; Mastra advised treating any affected install as fully compromised and rotating every credential the host had touched, including cryptocurrency wallet seeds.
Agentjacking Turns Fake Sentry Errors Into AI Coding Agent RCE via MCP #
Tenet Security disclosed agentjacking, an attack class that uses Sentry's open event-ingestion architecture to plant prompt-injection payloads inside fake bug reports, then waits for an AI coding agent connected to the Sentry MCP server to read them. A Sentry DSN is a write-only credential that every frontend ships in its JavaScript, so finding one is a GitHub search. The injected event's message field and context keys carry markdown that renders identically to Sentry's own system template: headings, code blocks, tables. When Claude Code, Cursor, or Codex retrieves the event over MCP as a triage prompt, the agent treats the embedded instructions as legitimate diagnostic steps and executes attacker-controlled commands with the developer's own privileges. Tenet reported an 85% success rate against the three agents across more than 100 organizations in controlled tests and identified at least 2,388 organizations with injectable DSNs in production. The Cloud Security Alliance AI Safety Initiative published the research as a CSA Research Note on June 12, 2026, with parallel coverage at The Hacker News the same day.
EX.Asentry on the root cause: "technically not defensible"
commentary
Sentry's response was that the issue is technically not defensible at the platform level, so they shipped a content filter for the exact payload string Tenet sent them. The architectural pathway, where any DSN can plant agent-executable commands inside a customer's triage workflow, is untouched. The acknowledgement and the non-fix arrived the same day.
impact
Anyone with a public Sentry DSN can plant a single error event that exfiltrates AWS keys, GitHub tokens, Sentry auth tokens, git credentials, and private repo URLs from the developer's machine through the Sentry MCP triage path. Every step in the chain is authorized, so EDR, WAF, IAM, VPN, and Cloudflare see nothing to block.
gemini-bridge Reads Any File You Name, Then Ships It to Google #
gemini-bridge is a small MCP server that hands AI agents a path to Google's Gemini through the official CLI. From 1.0.0 until 1.3.1, consult_gemini_with_files in inline mode read any path supplied in the files argument without confining it to the working directory, then forwarded the contents to the Gemini CLI. Because the caller also controls query, the contents come straight back through the Gemini round trip. Fixed in 1.3.1. CVSS 6.2.
commentary
The exfiltration channel is the product. A path traversal that ends in a file read is ordinary. This one reads the file, uploads it, and hands you the transcript.
impact
Arbitrary local file read for anything the server process can open, with the contents returned to the caller and a copy sent to Google along the way.
Socket's Threat Research team disclosed on June 9, 2026 that the active Mini Shai-Hulud / Miasma / Hades supply-chain campaign had added 23 fresh malicious PyPI artifacts the day prior, five of them aimed directly at developers building MCP integrations: langchain-core-mcp, openai-mcp, instructor-mcp, tiktoken-mcp, and ray-mcp-server. The wheels follow the Hades pattern earlier waves established on npm: a .pth startup hook fires during Python's site initialization, downloads the Bun JavaScript runtime as a living-off-the-land binary, then runs an obfuscated stealer staged through Bun with a fake prompt-injection header at the top of the payload. The langchain-core-mcp wheel ships only the .pth loader and no bundled _index.js, instead walking every entry in sys.path for the payload at runtime. The split-staging architecture decouples loader from payload so static scanners that audit the wheel they were handed see nothing executable. The June 8 PyPI wave brought the campaign's cross-ecosystem total to 471 artifacts spanning 411 npm packages and 60 PyPI wheels since June 1, with Socket tracking it pivoting delivery mechanisms every 48 to 72 hours.
EX.Aevery MCP integration tutorial that opened with pip install something-mcp
commentary
The package names are unsubtle on purpose. Anyone typing pip install langchain-core-mcp in the dark is the demographic. The split-staging .pth trick is also on purpose: most scanners look inside the wheel they're handed, not the rest of sys.path. Defense in depth, attacker-side.
impact
Developers searching PyPI for an MCP integration could land on a wheel that dropped a credential harvester at install time. Targeted material includes GitHub tokens, npm and PyPI publish keys, AWS, GCP, Azure, Kubernetes service-account material, SSH keys, Docker config, shell history, `.env` files, and AI developer tool configuration including `~/.claude.json`. PyPI removed the artifacts after Socket reported them, but any install that ran during the window should be treated as compromised.
CISA Catalogues LiteLLM's MCP Preview Endpoints as Exploited in the Wild #
CISA added CVE-2026-42271 to the Known Exploited Vulnerabilities catalog on June 8, 2026, with a remediation deadline of June 22. It is the first of two LiteLLM MCP endpoints to land there, three months ahead of CVE-2026-59822. jaydns disclosed the flaw in GHSA-v4p8-mg3p-g94g on April 21, 2026: POST /mcp-rest/test/connection and POST /mcp-rest/test/tools/list, the two endpoints that preview an MCP server before you save it, accepted a full server configuration in the request body, including the command, args and env fields the stdio transport uses. Handed a stdio configuration they tried to connect, which spawned the supplied command as a subprocess on the proxy host with the proxy process's privileges. Both were gated on a valid proxy API key and nothing else, so any authenticated caller, including one holding a low-privilege internal-user key, could run commands. Version 1.83.7 fixed it by requiring the PROXY_ADMIN role. The advisory scores it 8.7 and NVD 8.8. Wiz's honeypot research recorded exploitation in the wild, with attackers submitting fake MCP configurations whose embedded Python fetched a cryptominer while returning a valid MCP handshake so the connection test appeared to succeed.
EX.Amegamind peering closely: no role check on the endpoint that spawns the process?
commentary
A preview button that runs the thing it is previewing. The fix was a single role check, so the endpoint was always meant to be privileged and simply never said so. The payload is the detail to sit with: it returned a valid MCP handshake on the way through, so the test the operator clicked reported success.
impact
Any LiteLLM caller holding an ordinary API key, down to a low-privilege internal-user key, runs arbitrary commands on the proxy host. Observed in the wild delivering cryptominers through configurations crafted so the connection test still looked successful.
Claude Code GitHub Action Prompt Injection Hijacks Any Downstream Repo #
GMO Flatt Security's RyotaK and Microsoft Threat Intelligence published parallel research disclosing prompt-injection bypasses in Anthropic's official claude-code-action GitHub Action. Flatt's writeup, posted June 2, traced the checkWritePermissions function unconditionally trusting any actor whose login ended in [bot], which let any GitHub App author crafted issues whose contents Claude then treated as authorized instructions. Microsoft's June 5 post documented a second path: the agent's Read tool sat outside the Bubblewrap sandbox that wrapped Bash, so /proc/self/environ was reachable from inside any triage run. Both chains exfiltrated the workflow's ANTHROPIC_API_KEY, OIDC token, and any other CI secrets via the GitHub MCP server's update_issue tool, WebFetch, or echoed log output. Anthropic rated the issues 7.8 under CVSS v4.0, shipped fixes across claude-code-action v1.0.94 and Claude Code 2.1.128, and paid a bounty. A variant of the same misconfiguration class was already exploited in February against Cline's triage workflow to steal an npm publish token and push an unauthorized cline@2.3.0.
EX.AcheckWritePermissions · Read tool sandbox · GitHub MCP update_issue, lined up at exfil
commentary
An auth check that boils down to actor.endsWith('[bot]') is roughly the part of an auth system you'd hope --insecure-skip-tls-verify=true was, only less polite. The Bash tool got a Bubblewrap sandbox. The Read tool got a permission check. Whoever signed off on that delta hadn't yet met an LLM willing to ask Read for /proc/self/environ.
impact
Any repository running the action with a `[bot]`-authored triage workflow could be coaxed into leaking its `ANTHROPIC_API_KEY`, OIDC token, and other workflow secrets, then accepting attacker-authored commits. Because `anthropics/claude-code-action` itself ran the vulnerable workflow, a successful compromise of the action's own repo would have flowed to every downstream consumer.
better-auth's MCP Plugin Takes a javascript: Redirect URI and Advertises the none Algorithm #
Two better-auth advisories landed on May 31, 2026, and both reach MCP deployments through the mcp plugin that wraps the deprecated oidc-provider. In CVE-2026-67333, registered redirect_uris are never scheme-validated, so an attacker registers a client with a javascript: URI and the authorization server hands it back unchanged in the consent response. A consent page that assigns that value to window.location.href executes the attacker's script in the authorization server's own origin. Fixed in 1.6.13. CVE-2026-67336 covers the cryptographic defaults in the same two plugins: they advertise the none algorithm and accept plain PKCE, so an attacker can negotiate down to unsigned tokens or intercept authorization codes that S256 would have protected. Fixed in 1.6.11.
commentary
none has a decade of writeups behind it as the JWT footgun. Shipping it as an advertised default in 2026, in the plugin that fronts MCP auth, takes some doing.
impact
Script execution in the authorization server origin, which means the victim's session and account takeover. Separately, tokens with no signature accepted by a server whose job is checking signatures.
mcp-memory-service Guards /api/memories and Serves /api/documents to Anyone #
GHSA-84hp-mqvj-3p8h, published May 28, 2026, covers mcp-memory-service before 10.67.1. Every HTTP route under /api/documents/* is served with no authentication dependency, whether the server is configured with an MCP_API_KEY or with OAuth. The documents.py router is constructed without a dependencies= argument, and the file never imports Depends. Six endpoints are exposed this way: upload, batch upload, history, content search, and two deletion routes. The neighbouring /api/memories router applies Depends(require_write_access) correctly, so the guard exists in the codebase and was not wired into this file. CVSS 9.8.
EX.Athe MCP_API_KEY you configured, protecting one of the two routers
commentary
Setting MCP_API_KEY produces a server that looks authenticated, and is, on the router where somebody remembered to say so.
impact
An unauthenticated remote caller uploads content into the memory store, reads stored documents back out, and deletes them. The API key the operator configured has no effect on any of those routes.
Cortex Trusts CLAUDE_PROJECT_DIR, So Any Cloned Repo Can Claim to Be the Cortex Install #
GHSA-gvpp-v77h-5w8g, published May 27, 2026, covers neuro-cortex-memory 3.17.0 and earlier. Claude Code sets CLAUDE_PROJECT_DIR to whatever project the user has open, and Cortex's _find_dev_source() treats that path as a trusted developer checkout of Cortex itself. The check that decides, _is_cortex_root(), looks for an mcp_server/ subdirectory and a ui/unified-viz.html file. When open_visualization is invoked, the handler builds a bootstrap path under that directory and runs it with subprocess.run([sys.executable, str(bootstrap_path)]). A second path in http_launcher.py rsyncs the same untrusted source into the Cortex plugin cache. CVSS 7.8, fixed in 3.17.1.
commentary
One directory and one HTML file decide whether a path is your own source checkout. That is not a high bar for a repository whose entire purpose is to be cloned onto your machine.
impact
Opening a cloned repository in Claude Code and invoking the visualization tool executes that repository's Python with the developer's privileges.
auth-fetch-mcp Blocks ::ffff:127.0.0.1 and Node Hands It Back ::ffff:7f00:1 #
Two SSRF-guard bypasses published May 27, 2026. In auth-fetch-mcp 3.0.1 and earlier, assertSafeUrl() in src/security.ts blocks private and loopback addresses, and isPrivateV6() handles the IPv4-mapped form by stripping the ::ffff: prefix and calling net.isIPv4() on the remainder. Node's WHATWG URL parser hex-normalizes [::ffff:127.0.0.1] to [::ffff:7f00:1] before that check runs, so the remainder is 7f00:1, net.isIPv4() returns false, and the address is classified as public. The auth_fetch and download_media tools then reach 127.0.0.1 (CVE-2026-49857, CVSS 7.4, fixed in 3.0.2). The same day, @jshookmcp/jshook 0.3.1 and earlier shipped a central SSRF authorization policy that its HTTP, TCP, and TLS RTT tools enforce through resolveAuthorizedTransportTarget, and that network_icmp_probe and network_traceroute skip entirely, calling native probes straight after hostname resolution (CVE-2026-49856, CVSS 4.3, fixed in 0.3.2).
EX.Athe loopback check, meeting the second spelling of loopback
commentary
One guard was beaten by the URL parser running ahead of it. The other was simply not called by two of the tools it governs. Same lesson twice about where a check has to sit.
impact
auth-fetch-mcp returns responses from loopback services its guard was written to block. jshook maps internal addresses, reachability, latency, and routes from the server's network position even when private-network access is disabled globally.
mcp-server-kubernetes Ships Two Access Control Bypasses in Two Weeks #
Flux159's mcp-server-kubernetes shipped two access-control failures disclosed two weeks apart in late May and early June 2026. CVE-2026-46519 (CVSS 8.8), published May 21, found that the ALLOWED_TOOLS, ALLOW_ONLY_READONLY_TOOLS, and ALLOW_ONLY_NON_DESTRUCTIVE_TOOLS environment variables were enforced only inside the tools/list handler. The tools/call handler had none of those checks, so any client that already knew a tool name could invoke kubectl_delete, exec_in_pod, or kubectl_generic regardless of the configured restriction mode. v3.6.0 added matching enforcement at the execution layer. CVE-2026-47250 (CVSS 3.1), published June 5, showed that kubectl_generic still passed user-supplied flags straight to kubectl with no allowlist. A prompt injection planted in pod logs could nudge the agent to call kubectl_generic with --server=https://attacker.example/ and --insecure-skip-tls-verify=true, sending the operator's bearer token to the attacker. v3.7.0 added flag filtering. The researcher confirmed the full prompt-injection-to-token-exfiltration chain end to end against a live kind cluster with Claude Haiku as the agent.
commentary
Both bugs assume the same thing: the restrictions defined in config are the restrictions the code is checking. They aren't, and they weren't. Putting an AI agent between the operator and kubectl doesn't change the lesson, except that the agent will type --insecure-skip-tls-verify=true for you, on request, from a pod log.
impact
Pre-v3.6.0 deployments let any reachable client invoke arbitrary `kubectl` tools regardless of the configured restriction policy. Pre-v3.7.0 deployments let prompt-injected pod logs harvest the operator's kubeconfig bearer token, which then replays directly against the real cluster's API server.
Meta Ads MCP Server Skips the 401, Then Returns the Operator's Access Token in the Error Body #
pipeboard-co's meta-ads-mcp lets AI assistants run Meta Ads campaigns. Through 1.0.108, AuthInjectionMiddleware.dispatch() at http_auth_integration.py:272 handles an unauthenticated Streamable HTTP request by noting that no authentication tokens were found in the headers, then calling call_next(request) anyway. No 401 is ever issued. Tool handlers that find no per-request credential fall back to the META_ACCESS_TOKEN environment variable, so they run as the operator. When the downstream Meta Graph API call fails, api.py:263-269 serializes the raw httpx request URL into the JSON-RPC response body, and that URL carries the access token as a query parameter. Fixed in 1.0.109. CVSS 9.1.
EX.Await, the auth middleware just logs the missing token and continues?
commentary
The middleware detected the missing credentials, wrote that down, and continued. Then the error handler, whose job is to describe what went wrong, described it using the token.
impact
Any caller who can reach the server invokes Meta Ads tools with the operator's credentials. Provoke an API error and the response hands back the long-lived access token itself.
Claude Code SOCKS5 Sandbox Bypass Exfiltrates Credentials and MCP Configs #
Aonan Guan, who leads cloud and AI security at Wyze Labs, publicly disclosed his second Claude Code network sandbox bypass in five months. The latest issue is a SOCKS5 hostname null-byte injection. Claude Code's proxy enforces its egress allowlist by passing the raw DOMAINNAME bytes from a CONNECT request through a JavaScript endsWith() check against the user's wildcard policy. JavaScript treats \x00 as an ordinary UTF-16 code unit, so a crafted host like attacker-host.com\x00.google.com matches an allowlist entry for .google.com and is approved. When libc later resolves the hostname via getaddrinfo(), the C runtime truncates at the null byte and dials attacker-host.com instead. Every release from v2.0.24 (sandbox GA on Oct 20, 2025) through v2.1.89 was vulnerable. Anthropic shipped a fix in v2.1.90 on April 1, 2026, with no security note in the changelog, no advisory on the Claude Code page, and no CVE assigned. Exfiltration paths reachable from inside the sandbox include MCP server configs, ~/.claude.json, project source, and anything else the agent could read.
commentary
The sandbox failed open because endsWith and getaddrinfo disagree about whether \x00 is a character. That isn't an exotic bug. The Apache HTTP server fixed the SSL-certificate-null-byte version of it in 2009. Shipping a network policy that's robust against motivated attackers takes engineering. Shipping one quietly takes considerably less.
impact
Arbitrary data exfiltration past the network allowlist for roughly 5.5 months across about 130 published versions. Users who relied on a wildcard allowlist during that window received no advisory telling them to rotate credentials.
The NSA's Artificial Intelligence Security Center released a Cybersecurity Information Sheet titled "Model Context Protocol (MCP): Security Design Considerations for AI-Driven Automation." The document flags MCP's "rapid proliferation [that] has outpaced the development of its security model." It calls out the protocol's inversion of the typical client-server pattern (the server can prompt the client to take actions) and enumerates systemic concerns: trust boundary ambiguity, unverified task propagation, session-replay risk, and serialization issues. It urges "heightened scrutiny" for production deployments, especially in national-security and high-assurance environments.
commentary
When the NSA publishes a Cybersecurity Information Sheet saying your protocol "outpaced the development of its security model," "expected behavior" is probably not the response the rest of the industry wants on file.
impact
Formal government-level acknowledgment that MCP's security model is underdeveloped, naming concrete protocol-design gaps that operators are expected to compensate for.
Mini Shai-Hulud Worm Weaponizes Claude Code and MCP Configs for Persistence #
TeamPCP's Mini Shai-Hulud worm campaign ran through April and May 2026, hijacking npm maintainer accounts and publishing self-propagating malware across more than 600 packages on npm and PyPI. The May 19 wave compromised the atool and prop accounts and pushed 639 malicious versions across 323 packages in Alibaba's @antv data visualization ecosystem in a 22-minute automated burst. Earlier waves hit SAP CAP / mbt (April 29), TanStack (May 11), Mistral AI, Guardrails AI, UiPath, and OpenSearch. Each compromised release ships a preinstall hook that downloads the Bun JavaScript runtime as a living-off-the-land binary, then executes a credential harvester that sweeps cloud tokens, CI secrets, and password-manager vaults. The novel part: the payload reads ~/.claude.json and the host's MCP server configurations, then appends SessionStart hooks to .claude/settings.json so the next time Claude Code opens any project on the machine, the malware re-executes with full agent privileges. Researchers at Akamai, Snyk, Wiz, StepSecurity, and Phoenix Security all confirmed the AI-coding-agent persistence behavior independently.
EX.Afirst supply chain worm to use SessionStart hooks for persistence
commentary
The threat model that produced .claude/settings.json as a hook execution surface assumed nobody would write to it. The threat model that left MCP server config readable assumed nobody would read it. Both held up fine until somebody did both at once with a worm named after a Frank Herbert monster.
impact
Credential theft at scale across GitHub, npm, AWS, GCP, Azure, Vault, 1Password, and Bitwarden, plus self-propagation via stolen npm tokens and live AI-agent re-execution on every Claude Code session. Over 1,197 confirmed compromised repositories within hours of the @antv wave.
TrustFall Puts an MCP Server in a Cloned Repo, and Anthropic Says the Trust Dialog Covers It #
Adversa AI disclosed TrustFall on May 7, 2026. A cloned repository ships two files, .mcp.json and .claude/settings.json. Opening the folder and accepting the generic trust dialog applies those project settings, including enableAllProjectMcpServers and enabledMcpjsonServers, which start an attacker-controlled MCP server as an unsandboxed Node.js process holding the developer's privileges. Alex Polyakov and Sergey Malenkovich reported the same pattern across Claude Code, Gemini CLI, Cursor CLI, and Copilot CLI. Adversa counts it as the third flaw of this class in six months, following CVE-2025-59536.
EX.Ayou clicked trust, so that is the threat model
commentary
Anthropic's position is that consent was obtained, so this sits outside the threat model. The dialog asks whether you trust the files in the folder. It does not mention that accepting starts a program.
impact
Cloning a repository and clicking the trust prompt runs attacker code with full user privileges. The MCP server is not sandboxed, not confined to the project directory, and not restricted on the network.
Pluto Security disclosed a critical (CVSS 9.8) vulnerability in nginx-ui's Model Context Protocol implementation. The MCP integration split traffic across two HTTP endpoints. /mcp handles session establishment and was correctly gated by an IP whitelist and auth middleware. /mcp_message handles tool invocation, including configuration writes and server restart, and shipped with no authentication at all. The default IP whitelist is empty, so the unauthenticated endpoint accepted connections from any address. Shodan turned up over 2,600 publicly exposed nginx-ui instances on the default port 9000. Pluto disclosed in early March 2026, v2.3.4 fixed it, and Recorded Future later listed the CVE among 31 vulnerabilities actively exploited by threat actors in March 2026.
commentary
One MCP endpoint had IP allow-listing and authentication middleware. The other was the one that actually mattered, and it shipped without either. Same project, same PR, same review. The mental model under which /mcp_message doesn't need auth because /mcp already had it is the same one that puts a screen lock on the front camera only.
impact
Unauthenticated remote modification of NGINX configuration, server restart, traffic interception, and administrator credential harvesting. Confirmed exploitation in the wild.
Anthropic MCP SDK STDIO Command Injection (Declined to Patch) #
OX Security disclosed a systemic command-injection vulnerability in Anthropic's official MCP SDKs across Python, TypeScript, Java, and Rust. The STDIO transport invokes a configured command string through the OS shell unconditionally. If the intended MCP binary doesn't exist, the shell still executes whatever command was supplied. OX identified four distinct exploitation families all tracing back to the same root cause, affecting more than 7,000 publicly accessible servers and 150 million package downloads, with an estimated 200,000 vulnerable instances across the ecosystem. Anthropic acknowledged the behavior, declined to modify the protocol, and updated its security guidance to advise that STDIO adapters be "used with caution." The company characterized the existing design as a secure default with sanitization being the developer's responsibility. Downstream CVEs already cluster around the same root cause: CVE-2026-22252 (LibreChat), CVE-2026-22688 (WeKnora), CVE-2025-54994 (@akoskm/create-mcp-server-stdio).
EX.Acritical vulnerability disclosure | expected behavior, by design
commentary
"Sanitization is the developer's responsibility" is a fine policy for printf("%s"). It is a less fine policy for a protocol whose entire pitch is that you can wire up a command string from a config file and have a language model decide when to invoke it. The number of those 200,000 deployers who have read the updated security policy is fewer than 200,000.
impact
Arbitrary OS command execution on hosts running vulnerable MCP servers, with no protocol-level fix forthcoming. Every implementer is now responsible for sanitizing input that the SDK explicitly hands to a shell.
Apache SkyWalking’s MCP Server Lets the Caller Set the Backend URL, and NVD Got There in August #
Qiuxia Fan announced CVE-2026-34884 on the oss-security list on April 13, 2026, crediting Andrea Cosentino. Apache SkyWalking MCP 0.1.0 carries two issues: the set_skywalking_url tool accepts a caller-supplied URL and turns it into server-side requests, and the MCP server passes GraphQL expressions through without adequate sanitization. Users were told to upgrade to 0.2.0. NVD scored the pair 9.8 and published its record on August 18, four months and five days after Apache announced it.
EX.Askeleton waiting on a bench: the nvd record for a 9.8, four months on
commentary
A 9.8 in an Apache top-level project sat on oss-security for four months before the CVE databases caught up. Anyone tracking MCP exposure by watching NVD had an April-shaped hole in their inventory until last week, which is a decent argument for reading mailing lists.
impact
An attacker who can reach the MCP server redirects its backend requests to arbitrary destinations and injects expressions into the GraphQL queries it issues.
Proofpoint's CursorJack: Cursor MCP Deeplinks Let Any Link Claim Any Vendor's Name #
Proofpoint published CursorJack on March 17, 2026, a proof-of-concept from Rachel Rabin, Anna Akselevich, and Stanislav Silberberg showing that Cursor's cursor:// MCP deeplinks work as a delivery mechanism. A deeplink carries a base64-encoded MCP server config; clicking it pops the install prompt, and accepting runs that config's command with the developer's privileges. Two paths work: the command parameter executes locally, and the url parameter points Cursor at an attacker-hosted remote MCP server. The deeplink can also claim any server name it likes, Azure DevOps for instance, and Cursor never verifies the link came from the vendor it names.
commentary
Cursor shipped 1.3 to fix CVE-2025-54133, where the install dialog didn't show command arguments at all. CursorJack landed in March arguing the flow itself was the problem, not how the dialog renders it. Four months later DeepJack hid the arguments again with whitespace padding, which suggests Proofpoint had a point.
impact
One click plus one Approve runs an attacker's command with the developer's privileges. Reverse shells, credential harvesting, lateral movement. MCP-capable IDEs live on workstations holding SSH keys, API tokens, cloud credentials, source code, and production access, which is exactly why they are worth aiming at.
At its core, the article argues that MCP is too token-hungry to be practical at production scale, with tool definitions consuming the majority of context before any user request is even processed. Several major companies are independently abandoning it in favor of lighter-weight alternatives like traditional APIs and CLIs.
EX.Aeveryone who said MCP would be the universal protocol
commentary
"Universal AI protocol" was always going to mean "burn 72% of your context window on tool definitions you'll never use," but I appreciate that we collectively had to spend a year discovering it.
impact
MCP's "universal AI protocol" vision is effectively dead for production use cases, surviving only as a niche tool for desktop/IDE integrations.
Noma Labs discovered the ContextCrush vulnerability in Context7, a registry that delivers coding documentation to AI assistants via an MCP server. Attackers manipulated the platform's Custom Rules feature to plant malicious instructions. When an AI coding assistant (like Cursor or Windsurf) queried the documentation, it ingested the poisoned rules via the trusted MCP channel and autonomously executed harmful actions, such as stealing .env files.
EX.Athe documentation registry's threat model
commentary
Imagine trusting an unauthenticated third-party documentation registry to autonomously execute commands in your dev environment. Couldn't be me. Was probably you.
impact
Widespread credential theft and data exfiltration via third-party documentation poisoning.
MCP TypeScript SDK Routes One Client's Tool Output to a Different Client #
Advisory GHSA-345p-7cg4-v4c7 landed on February 4, 2026 against @modelcontextprotocol/sdk 1.10.0 through 1.25.3, and it is two bugs wearing one CVE. Sharing a single StreamableHTTPServerTransport across concurrent clients lets JSON-RPC message IDs collide, because every MCP client numbers its requests from zero and counts up, so the second client's request overwrites the first client's response mapping and the reply goes down the wrong HTTP connection. Sharing a single McpServer across multiple transports silently overwrites the Protocol object's internal this._transport, which misroutes server-to-client traffic including progress notifications and sampling requests. Both land hardest on stateless deployments that reuse instances across requests. Fixed in 1.26.0. CVSS 7.1.
EX.Ait looks like you're trying to read another client's tool output. need help with that?
commentary
The isolation boundary between two tenants was a counter that both of them start at zero. Sixteen minor releases shipped before anyone noticed.
impact
One user's tool results, progress notifications, and sampling requests arrive on a different user's connection. No attacker positioning required; ordinary concurrent traffic is enough to leak.
BlueRock researchers discovered a severe Server-Side Request Forgery (SSRF) flaw in the MCP server built for Microsoft's MarkItDown file converter. The server failed to validate URIs, allowing attackers to force the AI agent to query local cloud metadata endpoints (e.g., AWS 169.254.169.254). Subsequent scans revealed over 36% of public MCP servers contained similar SSRF vulnerabilities.
EX.Ait looks like you're trying to leak AWS metadata. need help with that?
commentary
36% of public MCP servers shipped with the same vulnerability class. The author of that statistic is being polite. The actionable number is: don't run anything you didn't read yourself.
impact
Exposure of AWS instance metadata, leading to the extraction of access keys, secret keys, and session tokens.
Cyata researchers disclosed a chain of critical vulnerabilities in Anthropic's official Git MCP server. The flaws included an unrestricted git_init function, a path-validation bypass, and an argument-injection vulnerability. Attackers could chain these to turn arbitrary directories into Git repositories, overwrite system files, and achieve RCE via malicious .git/config manipulation.
EX.Agit_init · path validator · arg parser, on disclosure day
commentary
CVSS 8.1 in the official server. Not a dodgy third-party one. The shipped-by-the-company-named-after-the-protocol one.
impact
High-severity (CVSS 8.1) arbitrary file deletion, file overwriting, and RCE.
Cymulate disclosed two high-severity defects in Anthropic's official Filesystem MCP Server. Attackers exploiting these flaws could list, read, or write to directories outside the allowed scope. If the server was run as a privileged user, this could lead to full sandbox escape, manipulation of critical system files, and privilege escalation.
commentary
"Allowed scope" was never going to survive contact with a model that's also been instructed to be helpful, accommodating, and never refuse a tool call.
impact
Unauthorized host filesystem manipulation and sandbox escape.
Oligo Security and Tenable discovered a critical flaw (CVSS 9.4) in the Anthropic MCP Inspector tool. Because the interactive web UI launched via localhost lacked out-of-the-box authentication, an attacker on the same local network could inject malicious commands (NeighborJacking) or use cross-site attacks to achieve RCE.
EX.Ame reading "localhost doesn't need auth" in 2025
commentary
The default debugging tool from the maintainers of the protocol shipped without authentication. The threat model, quoted: "it's localhost." Localhost has been a hostile network since the invention of coffee shop Wi-Fi.
impact
Arbitrary code execution via local network hijacking.
The JFrog Security Research team discovered a critical vulnerability (CVSS 9.6) in mcp-remote, a popular proxy tool (over 437,000 downloads) used to connect local LLM hosts to remote MCP servers. If a user connected to a malicious remote MCP server, the server could send a booby-trapped authorization_endpoint URL that achieved full arbitrary OS command execution on the user's local machine.
commentary
437,000 downloads. A booby-trapped authorization_endpoint URL. Full RCE on the client. The MCP supply chain isn't a chain so much as a single rusted carabiner.
Work management platform Asana had to temporarily disable its experimental MCP feature after discovering a logic flaw in its implementation. The misconfiguration failed to isolate cross-tenant data, meaning AI agents could potentially access customer data, projects, and tasks belonging to entirely different organizations.
impact
Unauthorized exposure of customer data to other organizations.
A severe vulnerability (CVSS 8.8) dubbed AgentSmith was disclosed in LangSmith's Prompt Hub. The flaw exposed AI agents using MCP to data theft and manipulation, allowing malicious agents to hijack LLM responses and steal user API keys.
commentary
Naming your vulnerability after the bad guy from The Matrix doesn't make it cooler than "forgot to scope an API key." But points for effort.
Security researchers at Invariant Labs discovered a critical vulnerability affecting the official GitHub MCP integration. Attackers could create maliciously crafted issues in public repositories. When a developer asked their AI assistant to check open issues, the AI would read the malicious payload, get prompt-injected, and autonomously use the developer's credentials to exfiltrate private repository data (such as source code and salary information) into public pull requests.
EX.Aevery dev reading this and quietly revoking their AI assistant's repo scope
commentary
The AI was helpfully reading the issue. The issue was helpfully telling it to leak code. There's no patch for "documentation can be lies." That's the entire reading-the-internet problem condensed into one CVE.
impact
Exfiltration of private repository data including source code and sensitive information.
@modelcontextprotocol/sdkat 1.26.0. The 2.x rewrite put the id collision back, and the quickstart examples taught the pattern that triggers it. Eight months to relearn that both clients start counting at zero.