经认证的任意文件上传导致远程代码执行 对 Webkul Krayin CRM 2.2.x 中 CVE-2026-38526 的技术分析与受控复现。
CVE-2026-38526 是一个影响 Webkul Krayin CRM 2.2.x 的经认证任意文件上传漏洞。
该易受攻击的功能通过应用程序的 TinyMCE 上传端点暴露:
POST /admin/tinymce/upload
应用程序未充分限制可上传的文件类型。经认证的用户可以提交带有服务器端可执行扩展名(例如 .php)的文件。应用程序会存储上传的文件并返回其可访问的 URL。
当部署环境允许从上传位置执行 PHP 时,上传的文件随后可通过 Web 服务器请求,从而在 Web 应用程序进程的上下文中导致远程代码执行。
已发布的 CVE 记录将该漏洞评为 CVSS 3.1:9.9(严重)。
本仓库包含我本人对该漏洞的技术分析和受控复现。
该漏洞已在 CVE-2026-38526 下公开披露。本工作不声称发现了该漏洞。本研究的目的是理解易受攻击的实现、在受控环境中复现利用路径,并考察将文件上传问题转化为远程代码执行的条件。
该漏洞还被用于 Hack The Box GCSB 2026 Nexus 靶机,这为研究该问题提供了一个实践环境。
产品: Webkul Krayin CRM 受影响版本: 2.2.x 漏洞: 任意文件上传 导致的影響: 远程代码执行 认证: 必需 攻击向量: 网络 CWE: CWE-434 — 危险类型文件的不受限制上传 CVSS: 9.9 严重 CVE: CVE-2026-38526
该易受攻击的功能由以下端点处理:
/admin/tinymce/upload
该端点通过 file 参数接受上传的文件。 相关应用程序逻辑从原始文件名派生存储的文件名,并保留其原始扩展名。

此行为很重要,因为应用程序并非简单地接受上传的对象;它保留了攻击者控制的可执行扩展名,并使生成的对象可通过应用程序存储机制访问。
主要问题是对上传文件的服务器端验证不足。
应用程序在构造存储文件名时使用客户端提供的原始扩展名。没有足够严格的允许列表来阻止可执行文件类型到达存储层。
相关流程为

使用生成的文件名并不能解决根本问题。
例如,将 shell.php 改为生成的文件名(如 .php)并不能使上传的文件变得安全,如果服务器继续将 .php 文件解释为可执行的 PHP 代码。
不受限制的上传并不自动意味着远程代码执行。
执行路径取决于服务器对上传文件的处理方式。
在易受攻击的部署场景中,链条变为
