Skip to main content

Pydantic AI CVE-2026-48782

| EUVDEUVD-2026-37512 MEDIUM
Server-Side Request Forgery (SSRF) (CWE-918)
2026-06-16 GitHub_M GHSA-cg7w-rg45-pc59
6.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify Pydantic AI app using force_download='allow-local'
  2. Delivery
    Determine NAT64 or ISATAP routing on deployment network
  3. Exploit
    Craft URL with metadata IP in unhandled IPv6 transition form
  4. Execution
    Submit crafted URL to application HTTP fetch
  5. Persist
    NAT64 gateway translates IPv6 wrapper to 169.254.169.254
  6. Impact
    Retrieve 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 force_download='allow-local' to the Pydantic AI URL-fetch interface - this is a non-default opt-in setting that intentionally disables the private/internal IP blocklist; applications that do not set this flag are fully protected by the default behavior and are unaffected. Second, the deployment network must actually route one of the affected IPv6 transition forms to the target IPv4 metadata address: NAT64-configured networks (IPv6-only or dual-stack-with-NAT64, including some Kubernetes deployments) for NAT64 variants (RFC 8215 64:ff9b:1::/48 sub-prefixes and operator NAT64 prefixes), or a network with an active ISATAP tunnel for the ISATAP variant. The advisory explicitly confirms that a standard dual-stack cloud VM or container does not route these forms and is not affected in practice. IPv4-compatible (::a.b.c.d) and Teredo variants are deprecated mechanisms addressed as defense-in-depth; their real-world network routing is negligible. CVSS PR:N confirms no authentication is required once the above conditions are met.

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 force_download='allow-local'. S:C captures the trust-boundary crossing from the application into the cloud provider's metadata plane. C:H reflects exposure of short-term IAM credentials, which can enable lateral movement or privilege escalation within the cloud account. No EPSS score was provided in the input and cannot be inferred. The vulnerability is not listed in CISA KEV, and no public exploit code has been identified - however, the iterative bypass pattern (three CVEs in the same protection mechanism) suggests active adversarial interest. Real-world priority should be elevated for organizations deploying Pydantic AI with force_download='allow-local' on Kubernetes clusters using NAT64, and lower for all other deployments.

Exploit ScenarioDerived

An attacker who can influence a URL processed by a Pydantic AI application configured with force_download='allow-local' on a NAT64-enabled Kubernetes cluster crafts a request URL containing 169.254.169.254 encoded as a 64:ff9b:1::-prefixed NAT64 address (e.g., 64:ff9b:1::a9fe:a9fe), which the prior-version blocklist passes unchecked because it only decoded the RFC 6052 well-known NAT64 prefix. The cluster's NAT64 gateway translates the IPv6 address back to 169.254.169.254, the application retrieves the AWS IMDS response, and the attacker obtains short-term IAM credentials attached to the pod's instance role. No public exploit code has been identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

pydantic-ai 2.0.0b1, < 2.0.0b3
pydantic-ai 1.56.0, < 1.102.0
pydantic-ai-slim 1.56.0, < 1.102.0
pydantic-ai-slim 2.0.0b1, < 2.0.0b3

Affected Packages

pypi pydantic-ai fix: 1.102.0, 2.0.0b3
pypi pydantic-ai-slim fix: 1.102.0, 2.0.0b3
euvd pydantic_ai_2_0_0b1 fix: 2.0.0b3
euvd pydantic_ai_slim_2_0_0b1 fix: 2.0.0b3

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

Vendor (GitHub_M) PRIMARY 6.8 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N
vuln.today AI 6.8 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N
Red Hat 6.8 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Jun 26, 2026 - 21:02 EUVD
CVE Published
Jun 16, 2026 - 22:49 cve.org
MEDIUM 6.8

DescriptionCVE.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

EPSS Score
0.3%
Top 75% exploitable
Threat Intel
1
1 sources
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

CVE-2026-25580 HIGH POC
8.6 Feb 06

Pydantic AI versions 0.0.26 through 1.55.x contain a server-side request forgery vulnerability in URL download functiona

CVE-2026-107295 HIGH
7.6 Oct 08

Cross-site request forgery in Pydantic AI's development web chat UI allows any website a developer happens to visit whil

CVE-2026-107286 HIGH
7.5 Oct 08

Concurrency slot exhaustion in Pydantic AI 2.10.0 through 2.52.x lets streamed model requests permanently occupy slots i

CVE-2026-107289 MEDIUM
6.8 Oct 08

Server-side request forgery in Pydantic AI's URL-fetching guards lets an application that has explicitly opted a URL int

CVE-2026-54249 MEDIUM POC
6.8 Jul 29

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

CVE-2026-107294 MEDIUM
6.5 Oct 08

Pydantic AI, a Python framework for building Generative AI agents, buffers complete HTTP response bodies before applying

CVE-2026-107290 MEDIUM
6.5 Oct 08

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

CVE-2026-107287 MEDIUM
6.5 Oct 08

Denial of service in Pydantic AI's local web_fetch_tool and WebFetch local fallback allows an attacker-controlled HTML p

CVE-2026-65975 MEDIUM
6.5 Jul 29

Tool call injection in Pydantic AI's UI adapters (AG-UI via Agent.to_ag_ui()/AGUIAdapter, and Vercel AI via VercelAIAdap

CVE-2026-107292 MEDIUM
6.4 Oct 08

DNS rebinding against the Pydantic AI development web chat server (Agent.to_web() and `clai web`) lets a hostile website

CVE-2026-25640 MEDIUM
5.4 Feb 06

Pydantic AI versions 1.34.0 through 1.50.x contain a path traversal vulnerability in the web UI that allows unauthentica

CVE-2026-107288 LOW
3.7 Oct 08

A domain-denylist bypass in Pydantic AI's local web-fetch tooling (web_fetch_tool and the WebFetch local fallback) lets

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy