CVE-2026-48782: Pydantic AI IPv6 Metadata Bypass – Credential Exposure in NAT64 Networks
Pydantic AI, a Python framework for building AI agent applications, contains a vulnerability that allows attackers to bypass security protections designed to prevent unauthorized access to cloud credentials. The issue stems from an incomplete fix to a prior vulnerability (CVE-2026-46678). Attackers can use IPv6 address encoding tricks to reach internal cloud metadata endpoints that store temporary AWS, Azure, or GCP credentials, potentially exposing those credentials if the application has enabled downloading from local/internal URLs. The vulnerability only affects applications that explicitly enable local URL downloads and run on networks using specific IPv6 transition technologies, which are common in NAT64-configured environments and some Kubernetes clusters.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 6.8 MEDIUM · CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N
- Weaknesses (CWE)
- CWE-918
- Affected products
- 0 configuration(s)
- Published / Modified
- 2026-06-17 / 2026-06-17
NVD description (verbatim)
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.
4 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
This vulnerability is an incomplete remediation of GHSA-cqp8-fcvh-x7r3 (CVE-2026-46678), which itself patched CVE-2026-25580. The original fix decoded IPv4-mapped IPv6 addresses (::ffff:a.b.c.d), 6to4 (2002::/16), and the NAT64 well-known prefix (64:ff9b::/96) to prevent access to metadata endpoints. However, several IPv6 transition forms remain unhandled: IPv4-compatible IPv6 (::a.b.c.d), NAT64 RFC 8215 local-use prefix (64:ff9b:1::/48), operator-chosen NAT64prefixes, and ISATAP. When an attacker-controlled URL is decoded, these unhandled IPv6 wrappers bypass the blocklist and resolve to the underlying IPv4 metadata service (typically 169.254.169.254 in AWS, or similar in other clouds). The attack vector requires network-level routing of these IPv6 forms and relies on applications calling force_download='allow-local' to disable the default private IP block. This affects Pydantic AI versions 1.56.0–1.101.0, 2.0.0b1, and 2.0.0b2.
Business impact
Organizations using Pydantic AI for AI-driven workflows face exposure of short-term cloud IAM credentials if they have enabled local downloads and operate in NAT64 or ISATAP environments. Compromised credentials could allow attackers to assume cloud service roles, access data, modify configurations, or pivot within cloud infrastructure. The risk is primarily relevant to cloud-native deployments: Kubernetes clusters with NAT64 (increasingly common in IPv6-primary environments), dual-stack NAT64 setups, and isolated IPv6 networks. Organizations on standard dual-stack cloud VMs or containers are not practically affected due to lack of routing for these IPv6 forms. However, teams with unclear network topologies or mixed deployment patterns should assume potential exposure if using affected versions.
Affected systems
Pydantic AI versions 1.56.0 through 1.101.0, 2.0.0b1, and 2.0.0b2 are affected. The issue manifests only when both conditions are met: (1) an application explicitly uses force_download='allow-local' to permit access to internal IP addresses, and (2) the network routes one or more unhandled IPv6 transition forms (NAT64 with RFC 8215 local prefix, NAT64 with custom operator prefixes, ISATAP, or deprecated IPv4-compatible IPv6). Standard dual-stack cloud deployments without NAT64 or ISATAP are not affected in practice. Organizations should audit Pydantic AI usage and verify network configurations to determine exposure.
Exploitability
Exploitation requires an attacker to control a URL that Pydantic AI will download (or a man-in-the-middle position to inject such a URL). The attacker crafts a malicious URL using one of the unhandled IPv6 transition forms to point to the cloud metadata endpoint. When the application processes the URL with force_download='allow-local', the IPv6 wrapper bypasses the metadata blocklist, and the IPv4 metadata endpoint is reached, leaking short-term credentials. The CVSS 3.1 score of 6.8 (MEDIUM, AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N) reflects network-based attack feasibility, high complexity due to the need for specific network routing and application configuration, and high impact on confidentiality. No user interaction is needed once the application processes the malicious URL. The 'AC:H' component reflects that the attack requires both specific network topology and deliberate use of force_download='allow-local'.
Remediation
Upgrade Pydantic AI to version 2.0.0b3 or later, which correctly decodes and blocks all IPv6 transition forms, including IPv4-compatible IPv6, NAT64 local-use prefixes, operator-chosen NAT64 prefixes, and ISATAP. Organizations unable to upgrade immediately should disable force_download='allow-local' and rely on the default blocklist for private/internal IPs. Additionally, review network configurations to identify whether NAT64 or ISATAP transition forms are routed; if they are not, the risk is lower but the upgrade remains advised as a defense-in-depth measure. Teams should audit applications to determine which ones explicitly opt into local downloads and prioritize patches for those components.
Patch guidance
Update Pydantic AI to 2.0.0b3 or any release version after that (verify against Pydantic AI release notes). The patch extends the metadata IP blocklist to include all IPv6 transition forms that could resolve to internal metadata endpoints. Test the patched version in a staging environment that mirrors your production network topology (particularly if using NAT64 or ISATAP) to ensure no unexpected behavior. If running Pydantic AI in containerized or Kubernetes environments, check whether your cluster uses NAT64; if so, prioritize patching. For applications currently using force_download='allow-local', review the security model post-patch and consider whether local downloads remain necessary.
Detection guidance
Monitor outbound connections from Pydantic AI applications to internal IP ranges, especially 169.254.169.254 (AWS metadata) and equivalent ranges in Azure (169.254.169.254) and GCP. Use network observability tools to identify traffic using unhandled IPv6 transition forms (source addresses in 64:ff9b:1::/48, operator NAT64 ranges, ISATAP ::ffff:0:0/96 variants, or ::a.b.c.d). Correlate suspicious metadata access with application logs to confirm if force_download='allow-local' was invoked. Check Pydantic AI version inventory in your environment; prioritize inspection of installations in NAT64-configured networks (check Kubernetes cluster address families, corporate IPv6 infrastructure documentation). Log and alert on any credential leakage or unexpected IAM activity on short-term session tokens.
Why prioritize this
This vulnerability should be addressed promptly if your organization operates in NAT64-configured networks (especially Kubernetes clusters) or uses dual-stack with NAT64 NAT. The incomplete fix to a prior vulnerability suggests systematic risk and potential for future bypasses. However, standard dual-stack cloud deployments face lower practical risk due to lack of IPv6 transition routing. Prioritize based on (1) network topology (NAT64 presence), (2) Pydantic AI usage scope, and (3) current application configuration (whether force_download='allow-local' is actually used). Teams in IPv6-primary or NAT64-heavy environments should treat this as a near-term patch; others may batch it with regular updates.
Risk score, explained
The CVSS 3.1 score of 6.8 reflects a medium-severity vulnerability with network-based attack potential, high-impact credential exposure, but significant complexity barriers. The 'AC:H' rating acknowledges that the attacker must craft IPv6 wrappers that the target network actually routes, and the application must explicitly allow local downloads. The scope change ('S:C') indicates that compromised cloud credentials could affect other systems and services. The high confidentiality impact ('C:H') reflects the exposure of short-term cloud IAM credentials. No integrity or availability impact is assigned because the vulnerability is a disclosure mechanism, not a modification or denial-of-service vector. Organizations should not dismiss this as low-risk merely due to the MEDIUM label; exposure of cloud credentials is a business-critical threat. Contextualize the score within your specific deployment: if you are not in a NAT64 environment and do not use force_download='allow-local', your practical risk is lower.
Frequently asked questions
Do I need to patch if I'm running Pydantic AI on a standard cloud VM without IPv6 NAT64?
Not as urgently, but yes. Standard dual-stack VMs without NAT64 routing are not practically affected by this specific vulnerability. However, the patch addresses a pattern of incomplete fixes; upgrading to 2.0.0b3+ remains recommended as defense-in-depth. If you cannot patch immediately, ensure that you are not using force_download='allow-local', which would require an additional network misconfiguration to expose credentials.
What is the difference between this vulnerability and CVE-2026-46678?
CVE-2026-46678 patched the metadata blocklist to handle some IPv6 transition forms (IPv4-mapped, 6to4, and NAT64 well-known prefix). This vulnerability (CVE-2026-48782) reveals that the patch was incomplete and missed several other transition forms (IPv4-compatible, NAT64 local-use, operator-chosen NAT64, and ISATAP). It is a follow-up bypass of the same underlying defense mechanism.
How do I know if my network uses NAT64 or ISATAP?
Check your network or cloud infrastructure documentation for IPv6 deployment type. In Kubernetes, run 'kubectl describe node' and look for IPv6 address ranges; check your cluster's CNI plugin configuration for NAT64. In cloud providers, review VPC and subnet settings for IPv6 support and transition mechanisms. If your network is fully dual-stack (both IPv4 and IPv6 natively available) without transition tunnels, you are not affected in practice.
What should I do if I cannot upgrade Pydantic AI immediately?
Disable force_download='allow-local' in your application configuration and rely on the default blocklist for private/internal IPs. This mitigates the attack surface significantly. Ensure that any URLs your application processes are from trusted sources. Increase monitoring of outbound metadata endpoint connections and IAM credential usage. Plan an upgrade to 2.0.0b3+ within your next maintenance window, prioritizing if your network topology includes NAT64.
This analysis is provided for informational purposes and reflects our understanding of CVE-2026-48782 as of the publication date. CVSS scores and vulnerability classifications are sourced from official NVD/NIST data. Patch version numbers and affected version ranges are based on the CVE description and should be verified against the official Pydantic AI release notes and GitHub advisory before deployment. Organizations should conduct their own risk assessment based on their specific network topology, deployment environment, and use of force_download='allow-local' in Pydantic AI applications. This is not a substitute for security review by your internal team or vendor guidance. Source: NVD (public-domain), retrieved 2026-07-27. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2025-58175MEDIUMGeoServer SSRF Vulnerability in Proxy Configuration
- CVE-2026-10052MEDIUMQuay SSRF in LDAP/SMTP Validation—Internal Network Reconnaissance Risk
- CVE-2026-10177MEDIUMSSRF in Aider-AI Aider 0.86.3 AWS Metadata Endpoint
- CVE-2026-10239MEDIUMJeecgBoot Server-Side Request Forgery (SSRF) in Word Editing Module
- CVE-2026-10240MEDIUMJeecgBoot SSRF Vulnerability in /airag/airagModel/test Endpoint
- CVE-2026-10241MEDIUMJimuReport SSRF in File Download Function – Patch to 3.9.2
- CVE-2026-10274MEDIUMServer-Side Request Forgery in aem-mcp-server
- CVE-2026-10276MEDIUMJenkins-server-mcp SSRF Vulnerability (0.1.0)