CVE-2025-60500 — 不安全的文件上传 / QDocs Smart School 中的逻辑缺陷(Smart School 7.1)
发布日期: 2025-10-17
作者 / 发现者: Lebas Vivien
状态: 已保留
CVE: CVE-2025-60500(已保留)
摘要
QDocs Smart School — 学校管理系统 7.1 中存在一个不安全的文件上传 / 逻辑缺陷,允许具有 accountant、admin 或 superadmin 等角色的已认证用户通过滥用备选的 YouTube URL 选项来绕过媒体上传功能中的文件类型限制。此缺陷允许攻击者将任意 PHP 文件存储到可通过 Web 访问的目录中,从而在访问上传的文件时实现远程代码执行。
受影响产品: Smart School:学校管理系统 7.1(QDocs)
供应商已确认: 是
影响
- 通过放置在可通过 Web 访问目录中的已上传 PHP 文件实现远程代码执行(RCE)。
- 具有指定角色的已认证用户可以上传任意 PHP 文件,该文件将存储在一个可预测的、可通过 Web 访问的路径下。
- 攻击者可以通过调用上传的文件来执行系统命令或进一步渗透到环境中。
受影响组件
- 文件上传功能 — 下载中心 > 上传共享内容(媒体上传 / 共享内容流程)
攻击类型 / 攻击向量
- 攻击类型: 远程(需要具有 accountant/admin/superadmin 角色的已认证账户)
- 攻击向量: 上传流程与备选 YouTube URL 选项相结合;通过同时提交上传的文件和 YouTube 链接字段,服务器会将上传的文件以
.php 扩展名存储到可通过 Web 访问的目录中。
复现步骤(概念性 PoC — 不包含可执行载荷)
- 以
accountant、admin 或 superadmin 角色登录 Smart School。
- 导航至 下载中心 → 上传共享内容。
- 在上传/共享工作流程中拦截 HTTP 请求(例如,使用 Burp 等代理工具)。
- 上传一个文件名以
.php 结尾的文件(服务器端检查/过滤器试图通过常规文件类型验证来阻止 PHP 上传)。
- 在同一个上传/提交请求中,同时填写备选的 YouTube URL 字段(处理 YouTube 选项的逻辑路径错误地允许上传的文件被接受并存储)。
- 完成共享/上传流程;注意服务器响应或观察返回的存储文件路径(应用程序会显示存储路径)。观察到的存储路径模式示例:/uploads/school_content/material/media/!file.php
- 通过返回的 URL 访问存储的
.php 文件以触发代码执行(如果该文件包含可执行的 PHP 代码)。
概念验证(高层级)
- 通过易受攻击的流程上传的 PHP 文件会被写入可通过 Web 访问的目录,并可直接通过 HTTP 调用。
- 该漏洞是一个逻辑/验证绕过(备选 YouTube URL 代码路径未能执行与正常上传流程相同的严格文件类型限制)。
缓解措施 / 建议修复方案
供应商侧修复(建议):
- 修复逻辑缺陷,确保备选 YouTube URL 路径以及任何其他特殊情况下载路径执行与正常上传流程相同的文件类型验证和过滤。同时验证 YouTube URL 是否有效/存在。
- 阻止上传文件的执行,将上传内容存储在 Web 根目录之外,或确保上传文件通过安全处理器提供,该处理器绝不执行服务器端代码。
- 强制执行服务器端 MIME 类型和扩展名检查,并针对允许的文件类型白名单进行验证,而不是黑名单。
- 将存储的文件重命名为安全扩展名和/或随机化名称,而不保留原始扩展名。
- 设置正确的服务器权限,使上传的文件不可执行(例如,使用
chmod 移除执行权限;配置 Web 服务器不从上传目录执行 PHP)。
- 添加日志记录和监控,用于检测可疑的上传以及对上传文件的访问尝试。
- 应用基于角色的限制 — 收紧允许上传内容的角色,并对特权角色要求额外的验证。
管理员可用的临时解决方案:
- 如果可行,暂时禁用有问题的上传/共享功能。
- 将上传访问权限限制为更少的受信任账户。
- 配置 Web 服务器,禁止在
/uploads/... 目录中执行 .php 文件。
参考
- 报告的演示实例:
https://smart-school.in/demo
- MITRE CVE ID 已保留:CVE-2025-60500