Secure Autonomous
FeedbackGet alertsCheck a deployment
Register › REG-0027 › evidence

Pydantic AI: a web page can make a developer's local agent run and execute tools, including tools marked as requiring approval, fixed August 2026

The typed evidence object. This is the working store; the case page is the reader's form.

Layer / facetValueTypeSourcesConf.
Mandate: principalA developer running a Pydantic AI agent locally through Agent.to_web() or the clai web development chatfactWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)high
Mandate: objectiveServe a local chat interface for developing and testing an agentfactWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)high
ActorThe agent served by the local chat endpoint, holding the privileges and credentials of the local processfactWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)high
InputsA request submitted by a website the developer visits, to the loopback-hosted chat server; the endpoint did not validate the request content typefactWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93); NVD record CVE-2026-107295 (CNA: GitHub), CVSS 3.1 7.6, CWE-352high
Decisionnot evidenced in sourceassertionWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)low
Envelope: authorityThe agent's tools ran with the privileges and credentials of the local process; binding to localhost did not prevent a browser page from reaching itfactWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)high
Envelope: constraintsTools marked requires_approval remained exposed because approval decisions were relayed by the clientfactWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)high
ActionThe served agent runs and executes tools on the attacker's requestfactWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)high
OutcomeState: averted by disclosure. No exploitation reported. As of Oct 2026.assertionWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93); NVD record CVE-2026-107295 (CNA: GitHub), CVSS 3.1 7.6, CWE-352medium
Evidence: eventMaintainer advisory GHSA-h4xc-3qfq-jf93, published on the project's repository on 12 August 2026 and in the GitHub Advisory Database on 8 October 2026; NVD record CVE-2026-107295 published 8 October 2026. The advisory classifies the weakness as origin validation error (Common Weakness Enumeration CWE-346) and cross-site request forgery (CWE-352); the NVD record lists only CWE-352.factWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93); NVD record CVE-2026-107295 (CNA: GitHub), CVSS 3.1 7.6, CWE-352high
Recovery: technicalFixed in versions 1.107.4 and 2.28.0, released on 12 August 2026, via pull requests 7382 and 7383 (merged 11 August 2026), which make the chat endpoint refuse requests not sent as JavaScript Object Notation (JSON). A companion advisory on the same chat endpoint, GHSA-q2xc-rrxj-58x9, found that versions with this fix could still be reached from a web page by Domain Name System (DNS) rebinding because the server did not check the Host header; that was fixed in 1.107.5 and 2.30.0, released on 14 August 2026.factWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93); NVD record CVE-2026-107295 (CNA: GitHub), CVSS 3.1 7.6, CWE-352; Only accept JSON request bodies on the web UI chat endpoint (#7382) (Pydantic AI commit d2690201); v2.28.0 (2026-08-11) (Pydantic AI release); v1.107.4 (2026-08-11) (Pydantic AI release); Web chat UI (`Agent.to_web()`, `clai web`): the local chat endpoint does not validate the `Host` header (Pydantic AI security advisory GHSA-q2xc-rrxj-58x9)high
Recovery: accountabilityCoordinated disclosure through the maintainer's security advisory, which credits Thai Son Dinh of VinSOC Labs (research and development) as the reporterfactWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)high

Controls

StatusControlCanonical
failedClient-relayed approval left requires_approval tools exposedC-E3 Destructive-action gate
failedRequest origin not verified (no content-type validation)C-A1 Actor identity verification
succeededCoordinated disclosure and fixC-O1 Coordinated disclosure program
absentTools ran with the full privileges and credentials of the local processC-E1 Least-privilege credential scoped to task

Inference

inference The maintainer's own documentation says the chat server trusts whatever approval decision the client sends, so any client that can reach the endpoint can approve a pending tool call, and calls approval prompts a convenience for the developer rather than an authorization control. The August 2026 fixes kept that design and instead stopped web pages from reaching the endpoint: it now accepts only requests sent as JavaScript Object Notation (JSON), which a browser will not send to another site without a permission check the server refuses, and, after a second fix two days later, only requests addressed to localhost, an Internet Protocol (IP) address, or an explicitly allowed host name. The record does not show exploitation, a public proof of concept, or harm to any developer.

Sources

IDRecordTypeLink
GHSAWeb chat UI (`Agent.to_web()`, `clai web`): a website visited by the developer can trigger agent runs and server-side tool execution on the local chat endpoint (Pydantic AI security advisory GHSA-h4xc-3qfq-jf93)company
github.com ↗
NVD-107295NVD record CVE-2026-107295 (CNA: GitHub), CVSS 3.1 7.6, CWE-352standards body
nvd.nist.gov ↗
FIX-7382Only accept JSON request bodies on the web UI chat endpoint (#7382) (Pydantic AI commit d2690201) (interest: vendor describing its own fix)company
primary record
github.com ↗
checked 2026-10-21
REL-2-28-0v2.28.0 (2026-08-11) (Pydantic AI release) (interest: vendor describing its own release)company
primary record
github.com ↗
checked 2026-10-21
REL-1-107-4v1.107.4 (2026-08-11) (Pydantic AI release) (interest: vendor describing its own release)company
primary record
github.com ↗
checked 2026-10-21
GHSA-Q2XCWeb chat UI (`Agent.to_web()`, `clai web`): the local chat endpoint does not validate the `Host` header (Pydantic AI security advisory GHSA-q2xc-rrxj-58x9) (interest: vendor describing its own product)company
primary record
github.com ↗
checked 2026-10-21
FIX-7437Add `allowed_hosts` to `Agent.to_web()` and `clai web` (#7437) (Pydantic AI commit 871c7aee) (interest: vendor describing its own fix)company
primary record
github.com ↗
checked 2026-10-21

Help shape the Register

A person reads every answer; changes it leads to are logged in the methodology. To dispute a claim or reply for a named company, use Respond, dispute, or submit.

Did this page help with what you came to do?