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
Share

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
qualitative

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

4
Patch available
Jun 26, 2026 - 21:02 EUVD
Source Code Evidence Fetched
Jun 17, 2026 - 00:35 vuln.today
Analysis Generated
Jun 17, 2026 - 00:35 vuln.today
CVE Published
Jun 16, 2026 - 22:49 cve.org
MEDIUM 6.8

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 2 pypi packages depend on pydantic-ai (2 direct, 0 indirect)
  • 12 pypi packages depend on pydantic-ai-slim (10 direct, 2 indirect)

Ecosystem-wide dependent count for version 1.56.0 and other introduced versions.

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.

AnalysisAI

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.

Technical ContextAI

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.

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.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Vendor StatusVendor

Share

CVE-2026-48782 vulnerability details – vuln.today

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