Listen to this Post
漏洞简介
CVE-2026-54249 是 Pydantic AI 框架中的一个中等严重性安全漏洞,影响了 1.65.0 至 1.105.0 版本以及 2.0.0b1 至 2.0.0b5 版本。该漏洞源于 Pydantic AI 的 UI 适配器(如 Vercel AI 适配器)在处理客户端提交的消息历史时,对 `UploadedFile` 引用的验证不足。
在正常操作中,UI 适配器会从客户端消息中重建文件部分并转发给模型提供商。对于标准的文件 URL,系统会通过一个方案白名单进行验证。然而,`UploadedFile` 类型的引用——它们指向由提供商文件 ID 或云存储 URI(例如 `s3://…`、`gs://…`)标识的文件——在被转发给模型提供商之前,并未经过同样的验证流程。
漏洞的核心问题在于权限的混淆。当模型提供商解析一个 `UploadedFile` 引用时,它使用的是服务器端的身份凭证(如 IAM 角色、服务账户或提供商 API 密钥),而不是客户端的权限。这使得一个恶意客户端可以构造包含特制 `UploadedFile` 引用的消息历史,诱使服务器使用其自身的高权限去读取其云存储账户中的任意文件,甚至可能访问到其他租户的数据。
成功利用此漏洞的前提是攻击者能够引用一个有效的文件标识符。尽管这类标识符并非总是可猜测的,但具体取决于应用程序的命名规范,这为攻击者提供了通过枚举或目录遍历等手段发现有效标识符的可能性。此漏洞被归类为 CWE-918(服务器端请求伪造,SSRF)。
DailyCVE Form:
Platform: Pydantic AI
Version: 1.65.0-1.105.0, 2.0.0b1-2.0.0b5
Vulnerability: Server-Side Request Forgery (SSRF)
Severity: Medium (CVSS: 6.8)
Date: 2026-07-29
Prediction: 2026-08-15
What Undercode Say:
漏洞核心在于 `VercelAIAdapter` 盲目信任客户端提供的 `providerMetadata` 来构建 `UploadedFile` 对象。攻击者可借此实现“混乱 deputy”攻击,通过服务器凭证访问 S3/GCS 资源。此问题在 1.106.0 和 2.0.0b6 版本中通过增加与文件 URL 相同的验证逻辑得以修复。若无法升级,建议不要将不可信的消息历史传递给代理,或在处理前剥离其中的 `UploadedFile` 部分。
验证受影响版本
检查当前安装的 pydantic-ai 版本 pip show pydantic-ai | grep Version 或查看项目依赖文件 cat requirements.txt | grep pydantic-ai
模拟漏洞原理(教育目的)
以下 Python 代码片段展示了漏洞的潜在利用思路,仅供学习参考,切勿用于非法用途。
漏洞原理示意:构造包含恶意 UploadedFile 引用的消息
malicious_message_history = {
"parts": [
{
"type": "UploadedFile",
攻击者尝试引用的目标文件
"file_id": "s3://victim-bucket/sensitive-data.json"
}
]
}
服务器端在未验证的情况下,会使用自身的 AWS 凭证去获取该文件
这导致攻击者可以读取其无权访问的文件
Exploit: (Educational Purposes!)
攻击场景:攻击者向使用 Pydantic AI 并集成 Vercel AI 适配器的应用发送特制的消息历史。
1. 侦查:攻击者首先尝试识别目标云存储中可能存在的文件标识符。这可能通过猜测常见命名模式(如 `s3://my-app-bucket/user-{id}/profile.json`)或利用应用其他接口泄露的信息来完成。
2. 构造载荷:攻击者构造一个包含恶意 `UploadedFile` 引用的消息历史。该引用指向一个攻击者无权访问但服务器有权限读取的文件,例如 `s3://internal-bucket/config/secrets.json`。
3. 提交与转发:客户端将此消息历史提交给应用的 UI 适配器(如 `VercelAIAdapter`)。适配器未对 `UploadedFile` 引用进行充分验证,便将其转发给后端的模型提供商。
4. 凭证滥用:模型提供商(或应用服务器)在处理该请求时,使用其自身的 IAM 角色或服务账户凭证去访问攻击者指定的 S3 对象。
5. 数据外泄:服务器成功获取到 `secrets.json` 文件的内容,并将其作为响应的一部分返回给攻击者,或用于后续的模型处理,从而导致敏感信息泄露。
Protection:
首选方案:立即升级
将 `pydantic-ai` 升级到修复版本 1.106.0 (1.x 分支) 或 2.0.0b6 (2.x beta 分支)。这些版本对客户端提交的 `UploadedFile` 引用实施了与文件 URL 相同的严格验证。
pip install --upgrade pydantic-ai>=1.106.0
临时缓解措施(若无法升级)
1. 输入净化:在处理任何来自客户端的消息历史之前,主动剥离或清除其中的所有 `UploadedFile` 部分。
2. 禁用功能:如果业务场景允许,避免将不可信的、由客户端提交的消息历史直接传递给 AI 代理。
纵深防御
1. 最小权限原则:确保运行 Pydantic AI 应用的服务器角色或服务账户仅拥有其任务所必需的最小权限,例如,限制其只能读取特定前缀的 S3 对象。
- 监控与告警:在云环境(如 AWS CloudTrail, GCP Audit Logs)中监控异常的 `GetObject` 或类似的文件读取请求,特别是那些来自应用服务器但目标为预期模式之外路径的请求。
Impact:
机密性破坏:攻击者可以利用服务器的权限,读取其有权访问的任何文件,包括配置文件、数据库凭据、用户数据、商业机密等存储在云存储(如 S3、GCS)或模型提供商处的敏感信息。
权限提升:通过利用服务器的身份,攻击者实际上获得了比自身高得多的数据访问权限,实现了横向权限提升。
多租户风险:在共享同一云账户基础设施的多租户环境中,此漏洞可能导致一个租户的用户访问到另一个租户的数据。
供应链与合规风险:成功利用可能导致严重的数据泄露事件,引发监管罚款、声誉损失以及客户信任的丧失。
🎯Let’s Practice Exploiting & Learn Patching For Free:
🎓 Live Courses & Certifications:
Join Undercode Academy for Verified Certifications
🚀 Request a Custom Project:
Secure, high-velocity infrastructure and disruptive technological engineering. Contact our engineering team for high-tier development and proprietary systems:
[email protected]
💎 Smart Architecture | 🛡️ Secure by Design | ⭐ Trusted by Thousands
Sources:
Reported By: github.com
Extra Source Hub:
Undercode

