CVE-2026-107295: Pydantic AI Web 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
Summary The Pydantic AI development web chat UI (Agent.toweb(), clai web) did not check the content type of requests to its chat endpoint. This allowed a website visited by a developer to submit a request to a chat UI running on that developer's machine, causing the served agent to run and to execute its tools with the privileges and credentials of the local process.
Published Oct 8, 2026
Affected packages
pydantic-ai
- Ecosystem
- PyPI
- Affected
- >= 1.34.0, < 1.107.4
- Fixed in
- 1.107.4
- Check
pip show pydantic-ai
pydantic-ai
- Ecosystem
- PyPI
- Affected
- >= 2.0.0b1, < 2.28.0
- Fixed in
- 2.28.0
- Check
pip show pydantic-ai
pydantic-ai-slim
- Ecosystem
- PyPI
- Affected
- >= 1.34.0, < 1.107.4
- Fixed in
- 1.107.4
- Check
pip show pydantic-ai-slim
pydantic-ai-slim
- Ecosystem
- PyPI
- Affected
- >= 2.0.0b1, < 2.28.0
- Fixed in
- 2.28.0
- Check
pip show pydantic-ai-slim
Advisory details
From the GitHub Advisory Database (CC BY 4.0).
Summary
The Pydantic AI development web chat UI (Agent.to_web(), clai web) did not check the content type of requests to its chat endpoint. This allowed a website visited by a developer to submit a request to a chat UI running on that developer's machine, causing the served agent to run and to execute its tools with the privileges and credentials of the local process.
Binding the web UI to localhost — the default — does not prevent this, because a page open in the developer's browser can reach the loopback address.
Impact
Applications and developers serving an agent through Agent.to_web() or clai web. The consequences depend on the tools the served agent exposes, and can include data disclosure as well as unwanted tool side effects. Tools marked requires_approval=True were not protected either, because the endpoint trusts approval decisions relayed by the client.
Mitigation
Upgrade to a patched version. The chat endpoint now requires Content-Type: application/json and rejects other requests before the request body is parsed and before the agent runs. The bundled chat UI already sends this header; scripts and other non-browser clients that call the endpoint directly may need to be updated to send it.
If you cannot upgrade, don't run the web UI while browsing untrusted sites, stop it when you aren't using it, and don't serve an agent with side-effecting tools through it.
Credits
- Thai Son Dinh from VinSOC Labs (R&D)
Credited to sondt99.
References
- https://github.com/pydantic/pydantic-ai/security/advisories/GHSA-h4xc-3qfq-jf93
- https://github.com/pydantic/pydantic-ai/pull/7382
- https://github.com/pydantic/pydantic-ai/pull/7383
- https://github.com/pydantic/pydantic-ai/commit/d2690201a1834005d382dbf5c47e0ed94ef8bf46
- https://github.com/pydantic/pydantic-ai/commit/dd2abbdfa029c9ad138e7cc0edd2eaeaf9ed69c0
- https://github.com/pydantic/pydantic-ai/releases/tag/v1.107.4
- https://github.com/pydantic/pydantic-ai/releases/tag/v2.28.0
- https://github.com/advisories/GHSA-h4xc-3qfq-jf93
How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. No analysis has been written for this entry yet. Methodology
More Pydantic AI vulnerabilities
All Pydantic AI entriesCVE-2026-107286
Pydantic AI: Concurrency-limited models can keep their slot when a streamed request ends early
high7.5Oct 8, 2026CVE-2026-107287
Pydantic AI: Excessive resource use when local web fetching converts nested HTML
medium6.5Oct 8, 2026CVE-2026-107289
Pydantic AI: SSRF cloud-metadata blocklist bypass via IPv6 zone identifiers
medium6.8Oct 8, 2026CVE-2026-107290
Pydantic AI: Event loop blocked by quadratic title extraction in `web_fetch`
medium6.5Oct 8, 2026CVE-2026-107291
Pydantic AI OpenTelemetry instrumentation: exception events on tool and agent run spans include content when `include_content=False`
low2.3Oct 8, 2026CVE-2026-107292
Pydantic AI Web chat UI (`Agent.to_web()`, `clai web`): the local chat endpoint does not validate the `Host` header
medium6.4Oct 8, 2026
