CVE-2026-33686Sharp是一个基于Laravel框架构建的内容管理包。在9.20.0之前的版本中,该组件的FileUtil类被发现存在路径遍历漏洞。由于应用程序未能正确清理文件扩展名,攻击者可以将路径分隔符注入并传递到存储层。该漏洞源于FileUtil::explodeExtension()函数在处理文件名时的逻辑缺陷,可能导致文件被上传至非预期的目录。官方已在9.20.0版本中通过改进扩展名提取逻辑修复了此问题。
该漏洞位于Sharp CMS的`src/Utils/FileUtil.php`文件中的`FileUtil::explodeExtension()`函数。原实现使用`strrpos()`来查找文件名中最后一个点以分割文件名和扩展名,但未对分割后的结果进行严格的输入验证。这允许攻击者在文件名字段中插入路径分隔符(如`../`或`/`)。当这些受污染的字符串被传递给底层存储系统时,应用程序会解析这些路径分隔符,导致文件被写入或读取到Web根目录或其他敏感位置之外。攻击者可利用此漏洞覆盖关键配置文件或植入Webshell。修复方案采用了`pathinfo(PATHINFO_EXTENSION)`原生函数提取扩展名,并配合正则表达式严格过滤基础名称和扩展名,有效阻止了路径遍历字符的混入。