Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Pydantic AI app using force_download='allow-local'
-
DeliveryDetermine NAT64 or ISATAP routing on deployment network
-
ExploitCraft URL with metadata IP in unhandled IPv6 transition form
-
ExecutionSubmit crafted URL to application HTTP fetch
-
PersistNAT64 gateway translates IPv6 wrapper to 169.254.169.254
-
ImpactRetrieve cloud IAM short-term credentials from metadata response
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Two simultaneous conditions are required. First, the application must explicitly pass |
| Impact | The provided CVSS 3.1 vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N (6.8 Medium) accurately reflects the real-world risk profile. AV:N is correct - the exploit path is an HTTP fetch originating from a network-accessible application. AC:H is well-justified: NAT64 or ISATAP routing is a genuine environmental prerequisite absent in the majority of standard dual-stack cloud deployments; the advisory explicitly states that a standard dual-stack cloud VM or container is not affected. PR:N reflects that no authentication is required once the application has already been configured with |
| Exploit ScenarioDerived | An attacker who can influence a URL processed by a Pydantic AI application configured with |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 17, 2026
Server-Side Request Forgery in Pydantic AI (versions 1.56.0-1.101.0, 2.0.0b1, 2.0.0b2) allows unauthenticated network attackers to bypass the cloud-metadata IP blocklist by encoding metadata service addresses (e.g., 169.254.169.254) in IPv6 transition forms - specifically IPv4-compatible IPv6, NAT64 RFC 8215 local-use prefixes, operator-chosen NAT64 prefixes, and ISATAP - that the prior remediation (CVE-2026-46678) failed to decode, enabling retrieval of cloud IAM short-term credentials. Exploitation is constrained by two simultaneous prerequisites: the application must use the non-default force_download='allow-local' mode and must operate on a network that routes the affected IPv6 transition forms (e.g., IPv6-only or dual-stack-with-NAT64 Kubernetes clusters). This is the third iteration in an escalating bypass chain (CVE-2026-25580 → CVE-2026-46678 → CVE-2026-48782), and no public exploit has been identified at time of analysis.
RemediationAI
Vendor-released patch: v1.102.0 (stable series) and 2.0.0b3 (pre-release series). Upgrade pydantic-ai or pydantic-ai-slim to v1.102.0 or 2.0.0b3, available at https://github.com/pydantic/pydantic-ai/releases/tag/v1.102.0 (commit 1add06179ba4de259f7ab977620b697b7209f7e4, PR https://github.com/pydantic/pydantic-ai/pull/5596). If an immediate upgrade is not feasible, the most effective compensating control is to remove all uses of force_download='allow-local' from application code; this re-enables the default private/internal IP blocklist and eliminates the prerequisite for exploitation, at the cost of disabling the intentional local-URL access the setting provides. As a network-layer alternative on NAT64 environments, configure egress ACLs at the NAT64 gateway to block translation of 169.254.0.0/16 and the other metadata ranges (169.254.170.2, 169.254.170.23, 168.63.129.16, 100.100.100.200) to their IPv6 equivalents; this is operationally complex and requires knowledge of all operator NAT64 prefixes in use. Applications that do not use force_download='allow-local' require no immediate action.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 4 packages in pypi, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Pydantic AI's SSRF guard in pydantic_ai/_ssrf.py normalizes IPv6 addresses to their embedded IPv4 form before comparing against a private/metadata IP blocklist. The incomplete fix in CVE-2026-46678 decoded IPv4-mapped IPv6 (::ffff:a.b.c.d), 6to4 (2002::/16), and the RFC 6052 NAT64 well-known prefix (64:ff9b::/96), but did not handle: IPv4-compatible IPv6 (::a.b.c.d, RFC 4291), the RFC 8215 NAT64 local-use prefix (64:ff9b:1::/48) with sub-prefixes at /48, /56, /64, or /96, operator-chosen NAT64 prefixes, and ISATAP tunnel addresses (RFC 5214, interface ID pattern ::0:5efe:a.b.c.d). The CWE-918 root cause is the blocklist operating on the IPv6 wrapper rather than the embedded IPv4 destination, allowing an attacker-supplied IPv6 literal to smuggle a blocked IPv4 address past the guard. The fix in v1.102.0/2.0.0b3 (PR #5596, commit 1add06179b) introduces _embedded_ipv4s(), which decodes all standardized IPv6 embedding offsets defined in RFC 6052 §2.2 and handles ISATAP and Teredo separately; it also expands the cloud metadata blocklist to cover AWS ECS/EKS credential endpoints, Azure WireServer (168.63.129.16, a public IP that was previously not caught by private-range checks), GCP IPv6, Scaleway, and Oracle Cloud Classic. CPE strings are cpe:2.3:a:pydantic:pydantic-ai and cpe:2.3:a:pydantic:pydantic-ai-slim.
Know when Pydantic Ai gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N
AV:N because exploit is delivered via HTTP fetch; AC:H because NAT64/ISATAP network routing is a genuine environmental prerequisite; S:C for trust-boundary crossing to metadata plane; C:H for IAM credential exposure; no integrity or availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Pydantic AI is a Python agent framework for building applications and workflows with Generative AI. In versions 1.56.0 through 1.101.0, 2.0.0b1, and 2.0.0b2, the cloud-metadata blocklist could be bypassed by encoding the metadata IP in an IPv6 transition form that the previous fix, CVE-2026-46678, did not decode, exposing cloud IAM short-term credentials. The previous remediation decoded only IPv4-mapped IPv6, 6to4, and the NAT64 well-known prefix, so the metadata guarantee did not hold for the remaining transition forms: IPv4-compatible IPv6 (::a.b.c.d), the NAT64 RFC 8215 local-use prefix (64:ff9b:1::/48), operator-chosen NAT64 prefixes, and ISATAP. The IPv6 wrapper is then delivered to the underlying IPv4 metadata endpoint. This occurs when an application using Pydantic AI opts a URL into force_download='allow-local' (which disables the default block on private/internal IPs) and runs on a network that actually routes the affected IPv6 transition forms: NAT64-configured networks (IPv6-only or dual-stack-with-NAT64 deployments, including some Kubernetes setups) for the NAT64 variants, or networks with an ISATAP tunnel for ISATAP. A standard dual-stack cloud VM or container does not route these forms and is not affected in practice. The IPv4-compatible and Teredo variants are deprecated and addressed as defense-in-depth. This is an incomplete fix of GHSA-cqp8-fcvh-x7r3 / CVE-2026-46678 (itself a follow-up to CVE-2026-25580). This issue has been fixed in version 2.0.0b3.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
More in Pydantic Ai
View allPydantic AI versions 0.0.26 through 1.55.x contain a server-side request forgery vulnerability in URL download functiona
Cross-site request forgery in Pydantic AI's development web chat UI allows any website a developer happens to visit whil
Concurrency slot exhaustion in Pydantic AI 2.10.0 through 2.52.x lets streamed model requests permanently occupy slots i
Server-side request forgery in Pydantic AI's URL-fetching guards lets an application that has explicitly opted a URL int
Server-Side Request Forgery in Pydantic AI's UI adapter layer (versions 1.65.0-1.105.0 and 2.0.0b1-2.0.0b5) allows unaut
Pydantic AI, a Python framework for building Generative AI agents, buffers complete HTTP response bodies before applying
Denial of service in Pydantic AI (pydantic-ai and pydantic-ai-slim) versions 1.77.0 through 1.107.5 and 2.0.0b1 through
Denial of service in Pydantic AI's local web_fetch_tool and WebFetch local fallback allows an attacker-controlled HTML p
Tool call injection in Pydantic AI's UI adapters (AG-UI via Agent.to_ag_ui()/AGUIAdapter, and Vercel AI via VercelAIAdap
DNS rebinding against the Pydantic AI development web chat server (Agent.to_web() and `clai web`) lets a hostile website
Pydantic AI versions 1.34.0 through 1.50.x contain a path traversal vulnerability in the web UI that allows unauthentica
A domain-denylist bypass in Pydantic AI's local web-fetch tooling (web_fetch_tool and the WebFetch local fallback) lets
EUVD-2026-37512
GHSA-cg7w-rg45-pc59
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB