Intelligence

The Signal Said Untrusted. The Configuration Answered Anyway.

Google Gemini CLI's own v0.59.0 changelog, published 8 September 2026, states two hardening entries: a fail-closed workspace trust model and MCP server filtering under restricted execution modes. Merged pull request 29099 names the mechanism directly: trust resolution now immediately returns isTrusted: false the moment an untrusted environment signal is present, ahead of any more permissive configuration fallback, and a repository's own mcpServers definitions are stripped from the A2A server whenever the workspace is not trusted, done, in the pull request's own words, to prevent unintended process execution during server startup.

Event analysed: . This analysis was published on 13 September 2026.

When Google Gemini CLI's own workspace trust check found an environment signal explicitly untrusted or restricted, did that signal reliably deny a repository's own configured MCP servers before this fix, or could a more permissive configuration source still answer instead?

On the vendor's own account, it could still answer instead. Google Gemini CLI's own v0.59.0 changelog, published 8 September 2026, lists two entries: Fail-Closed Workspace Trust, stated as enforcing a fail-closed model for untrusted workspaces, and Restricted Mode MCP Filtering, stated as filtering available MCP servers under restricted execution modes. Merged pull request 29099, google-gemini/gemini-cli's own "fix(core): enforce fail-closed workspace trust and filter mcpServers in restricted mode," names the mechanism in its own words: trust resolution now works by immediately returning isTrusted: false, source: 'env' the moment an untrusted signal is present, and, when the workspace is not trusted, repository-scoped mcpServers definitions are stripped from the A2A server's own configuration. The pull request states this prevents unintended process execution during server startup and ensures environment trust signals take precedence over configuration fallbacks. Read plainly, both statements describe the same prior gap from two angles: an untrusted environment signal did not always resolve immediately and unconditionally to denial, leaving a path for a more permissive local configuration source to be consulted afterward, and a repository's own MCP server definitions, each one a named external process the A2A server could start, were not reliably removed from that configuration once the workspace running them was untrusted. Neither the changelog nor the pull request states the exact prior code path, names an affected version range, assigns a CVE, or reports that the prior condition was ever reached, exploited, or produced a downstream consequential effect in a real deployment. This record does not infer any of those from the fix's own description.

A workspace trust check exists to answer one question before anything else runs: should this environment be treated as trusted, or not. Google Gemini CLI's own v0.59.0 changelog and the pull request behind it describe a version of that check that could return the right answer, untrusted, and still not have that answer control what happened next.

What the vendor's own two sources state, read together: an explicitly untrusted or restricted environment signal did not reliably, immediately resolve trust to false ahead of every other configuration source, and a repository's own configured MCP servers, each a named external process the A2A server could start, could remain present in that server's configuration regardless of whether the workspace was trusted. The fix closes both halves of the same gap: precedence for the untrusted signal, and removal of the repository's own MCP server definitions once that signal applies.

What the two sources each state

Google Gemini CLI's own v0.59.0 changelog, published 8 September 2026 and read at a rolling latest-release URL this record pins to that specific entry rather than to whatever the same page shows after a later release, lists two hardening bullets under headings of their own: Fail-Closed Workspace Trust, "Enforced a fail-closed workspace trust model to ensure security by default when accessing untrusted workspaces," and Restricted Mode MCP Filtering, "Filtered available Model Context Protocol (MCP) servers under restricted execution modes to minimize potential attack surfaces." Each bullet, read on its own, names a security-default improvement without stating the mechanism it replaces.

google-gemini/gemini-cli pull request 29099, merged 28 August 2026 and titled by its own author "fix(core): enforce fail-closed workspace trust and filter mcpServers in restricted mode," supplies that mechanism directly. Its own description states that the fix works by "immediately returning { isTrusted: false, source: 'env' } when an untrusted signal is present," and that "When !trusted, strips repository-scoped mcpServers definitions" from the A2A server's own configuration. The same description states the fix "prevents unintended process execution during server startup and ensures that environment trust signals take precedence over configuration fallbacks." Read together with the changelog's own two headings, the pull request names what those headings summarize: a workspace trust resolution step that previously did not always give an untrusted or restricted environment signal the final word over a more permissive configuration fallback, and an A2A server configuration path that could still carry a repository's own mcpServers entries, an executable process definition, independently of that unresolved trust question.

Reading the prior condition precisely, without inventing a mechanism

Neither source states the exact prior code path that let an untrusted signal fall through, whether that path was an explicit fallback branch, a default value, or an ordering defect among several trust sources, or how long the prior behavior shipped before this fix. This record treats that mechanism as unknown rather than reconstructing it from the fix's own one-line description, the same discipline this desk applies to a terse vendor changelog bullet elsewhere in this corpus. What the pull request's own words do establish, plainly, is the shape of the prior gap: workspace trust is meant to be the authority-relevant fact deciding what a repository's own configuration is allowed to keep running, and before this fix, that fact did not always win against configuration inherited from elsewhere.

What this record does not claim

This record does not claim the prior condition was ever reached in a real deployment, exploited, or produced a downstream consequential effect; no CVE, advisory, affected version range, or reported incident accompanies either source. It does not claim that every mcpServers entry a repository could configure is inherently unsafe, or that MCP server configuration is itself the failure; a repository legitimately configuring its own MCP servers is ordinary, intended behavior once a workspace is actually trusted. It does not claim per-server human authorization was ever missing for any specific MCP server an operator actually ran; that fact, like exploitation, is unknown from material available to this record. What it does claim, resting on the vendor's own two sources, is narrower and precise: a resolved workspace trust state, the provenance of a repository's own configuration, and a bootstrap-added MCP server's own capability to execute are each authority-relevant execution state, and none of resource readability, configuration presence, process capability, or a successful prior startup is evidence that continuing legitimate authority existed for what ran.

Where this sits in the pattern

This desk's own base case for execution authority failure, capability substituting for authorization because nothing else does, already carries a structurally identical known example: Claude Code v2.1.259 fixed managed settings silently going unenforced when a policy source could not be parsed, previously letting a session continue as though no policy applied, and now refuses to start and names the failing source instead. Gemini CLI's own fix reaches the same shape through a different mechanism: not a policy source failing to parse, but an environment trust signal not reliably taking precedence over a configuration fallback, and a repository's own already-configured MCP servers not being removed once that signal applied. Both are the same corrective, described in this desk's own terms as deny by default when the applicable authority decision cannot be established, applied at two different points in two different agent runtimes' own bootstrap sequences.

This record also distinguishes the gap from two adjacent, better-known shapes it does not resemble. It is not a model-controllable switch deciding whether its own control applies, the shape this desk already tracks separately: the trust signal here is an environment-supplied fact about the workspace, not an input traveling in the same call as the action it gates. It is also not reachability mistaken for authority: the prior condition was not that a discoverable or reachable MCP server was treated as authorized because an agent could reach it; it is that a repository's own MCP server configuration was not reliably removed from consideration at all once the workspace's own trust state should have removed it, a configuration-provenance question this record keeps separate from a reachability question.

Sources

This analysis interprets third-party reporting, research and announcements. Moona is not the original reporter of the underlying events.

[1]
Latest stable release: v0.59.0
Google Gemini CLI · 8 September 2026 · Primary source

Protocol evidence

This record does not assess these architectures. The connection runs through the Risk Registry requirement each one bears on, and these published authority architectures are what the evidence says about that requirement.

Protocol evidence related through AEW-001 Action without applicable policy

  • Supports requirement

    Agent Action Decision Protocol (AADP)

    Shamik Saha, individual submission to the IETF

    Requirement A Policy Decision Point owns authorization state and evidence; PEPs enforce it

    AADP's separation of a Policy Decision Point that must issue a permit before a Policy Enforcement Point performs an action is a direct response to actions that execute with no applicable policy at all. These failures support the need for that requirement. Claude Code's own current documentation, read directly, extends the same gap one lifecycle stage later than GitSpawn's own known example above: a plugin's bundled hooks fire as a host subprocess with no fresh model decision required, and a marketplace update is applied by version signal with no described mechanism to gate a change to that hooks.json specifically, the same absent decision point AADP's separation exists to supply. A preprint posted to arXiv on 3 September 2026, 2609.03884, states this exact class of update as its own subject; this record could verify only its title and author list, not its own specific claims. a2a-settlement/settlebridge-ai issue 5 extends the same requirement to an alternate lifecycle path rather than a later trust stage: a training run's own completion routine, training_service.complete_run, was itself an unmediated Policy Enforcement Point at the affected revision, performing the approving effect with no Policy Decision Point interposed at all, while the platform's ordinary submission path enforced exactly such a decision point on the identical class of approval. Current main's own remediation, read directly, gates that same completion path behind a new module, training_gates.py, read as response side evidence that the requirement now applies uniformly across both lifecycle paths.

    View protocol evidence

  • Supports requirement

    Identity for AI, Agent IAM Core and Agent Gateway

    Ping Identity

    Requirement Ping's own Agent Gateway sits in front of MCP servers and applies McpValidationFilter, McpProtectionFilter and McpAuditFilter to validate protocol shape, enforce OAuth 2.0 resource server scope checks and audit each tool call before the backend is reached

    Ping's own Agent Gateway sitting in front of MCP servers and running McpValidationFilter, McpProtectionFilter and McpAuditFilter before a backend request runs is a configured pre-resource enforcement point ensuring an applicable authorization decision exists for the MCP traffic it mediates, the corrective for an action that executes with no applicable policy at all.

    View protocol evidence

Related Intelligence

All Intelligence Records →