CVE-2026-33534EspoCRM是一个开源的客户关系管理应用程序。在9.3.3及以下版本中,系统存在一个已认证的服务端请求伪造(SSRF)漏洞。攻击者可以通过使用替代的IPv4表示形式(例如使用八进制表示法0177.0.0.1代替127.0.0.1)来绕过内部主机验证逻辑。漏洞产生的原因是HostCheck::isNotInternalHost()函数依赖于PHP的filter_var(..., FILTER_VALIDATE_IP),该函数无法识别替代IP格式。这导致验证过程回退到DNS查找,由于没有记录返回,主机被错误地视为安全。然而,cURL随后会规范化地址并连接到环回目的地。通过/api/v1/Attachment/fromImageUrl端点,经过身份验证的用户可以强制服务器向仅限环回的服务发出请求,并将获取的响应存储为附件。该问题已在9.3.4版本中修复。
该漏洞的核心在于EspoCRM对目标URL的主机校验逻辑存在缺陷。在HostCheck::isNotInternalHost()函数中,代码首先尝试使用PHP的filter_var函数配合FILTER_VALIDATE_IP过滤器来验证IP地址。然而,该过滤器并不支持八进制、十六进制等非标准IP表示法。当攻击者提交如http://0177.0.0.1的URL时,filter_var返回false,验证逻辑随后尝试进行DNS解析。由于八进制格式的IP通常无法在DNS中解析出记录,解析失败,代码逻辑错误地判定该主机非内部主机,从而放行了请求。随后,底层的cURL库在处理请求时,会自动将八进制IP(0177.0.0.1)规范化为标准的十进制IP(127.0.0.1),并成功建立连接。攻击者利用/api/v1/Attachment/fromImageUrl接口,在已登录的情况下,构造恶意的图片URL指向内部服务(如本地元数据服务、管理端口等),服务器会代为请求并将结果保存为附件,从而造成敏感信息泄露。这与CVE-2023-46736(基于重定向的SSRF)不同,本漏洞利用的是IP格式解析的不一致。