{"id":"CVE-2026-107294","aliases":["GHSA-v2xh-2vp8-57h8","PYSEC-2026-4280","PYSEC-2026-4289"],"url":"https://o3.security/vulnerability/CVE-2026-107294","summary":"Pydantic AI: Unbounded memory use when downloading remote content via web_fetch or FileUrl","details":"### Summary\n\nSeveral remote-content download paths in Pydantic AI buffered the entire HTTP response body into memory before enforcing any size limit. An application that exposes the local web-fetch tool (`web_fetch_tool`, or the `WebFetch` capability's local fallback) to untrusted prompts can be driven to fetch an attacker-chosen URL that streams a very large body, exhausting process memory and crashing the worker. The same unbounded buffering applied to `FileUrl` media downloads (`ImageUrl`, `DocumentUrl`, `VideoUrl`, `AudioUrl`).\n\nThis is an **availability** issue only. SSRF protections (scheme allowlist, private-IP and cloud-metadata blocking) are unaffected; there is no confidentiality or integrity impact.\n\n### Details\n\nThe download helpers read the full response body before applying content-size controls, so an existing text-length limit only truncated *after* the whole body was already in memory, and media downloads had no wire-level cap at all. A single large response could grow process memory without bound .\n\n### Who Is Affected\n\nYou are affected if your application registers the local web-fetch tool (or relies on the `WebFetch` capability's local fallback) and exposes the agent to untrusted prompts, or if it downloads large remote `FileUrl`s influenced by untrusted input. Applications that only fetch developer-controlled URLs are not exposed to the model-chosen attack path.\n\n### Remediation\n\nUpgrade to `2.24.0` or later (v2) or `1.107.2` or later (v1). Patched versions enforce a default 50 MiB cap on web-fetch and `FileUrl` downloads while streaming; pass `None` to the limit to restore the previous unbounded behavior.\n\n### Credits\n\nIdentified during internal review of media-download hardening.","published":"2026-10-08T16:59:25.246Z","modified":"2026-10-21T02:30:55.773395072Z","cvss":{"score":6.5,"severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H"},"epss":null,"cisaKev":null,"exploitsKnown":null,"affectedPackages":[{"ecosystem":"PyPI","name":"pydantic-ai","fixedVersion":"1.107.2"},{"ecosystem":"PyPI","name":"pydantic-ai","fixedVersion":"2.24.0"},{"ecosystem":"PyPI","name":"pydantic-ai-slim","fixedVersion":"1.107.2"},{"ecosystem":"PyPI","name":"pydantic-ai-slim","fixedVersion":"2.24.0"}],"fix":{"url":"https://github.com/pydantic/pydantic-ai/commit/7a64d049c3f5271a975cd1d64b2fa876d83ede1d","label":"pydantic/pydantic-ai@7a64d04"},"references":[{"type":"WEB","url":"https://github.com/pydantic/pydantic-ai/releases/tag/v1.107.2"},{"type":"WEB","url":"https://github.com/pydantic/pydantic-ai/releases/tag/v2.24.0"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107294.json"},{"type":"ADVISORY","url":"https://github.com/pydantic/pydantic-ai/security/advisories/GHSA-v2xh-2vp8-57h8"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-107294"},{"type":"FIX","url":"https://github.com/pydantic/pydantic-ai/commit/7a64d049c3f5271a975cd1d64b2fa876d83ede1d"},{"type":"FIX","url":"https://github.com/pydantic/pydantic-ai/commit/e3824a58c82864ed26afb2887619834a4eb86cc8"},{"type":"FIX","url":"https://github.com/pydantic/pydantic-ai/pull/7141"},{"type":"FIX","url":"https://github.com/pydantic/pydantic-ai/pull/7308"},{"type":"PACKAGE","url":"https://github.com/pydantic/pydantic-ai"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-10-21T02:30:55.773395072Z"}}