openSIS Classic 9.3 - Sent Mail 中的不安全直接对象引用 漏洞概述 openSIS Classic 9.3 的消息传递模块中存在一个不安全的直接对象引用漏洞。任何具有消息传递模块访问权限的经过身份验证的用户,都可以通过向 提供任意 值,请求已发送邮件的详细信息。 已发送邮件列表查询正确地将行限制为当前经过身份验证的用户。然而,邮件正文检索分支直接使用客户端控制的 进行 查询,并且不验证请求的邮件是否属于当前会话用户。由于 是一个自动递增的整数,经过身份验证的攻击者可以枚举邮件标识符并检索属于其他用户的已发送邮件,包括管理员用户。 受暴露邮件引用的附件也受到影响。 从 下载记录,而不检查经过身份验证的用户是否拥有该文件或有权访问引用它的邮件。直接枚举 取决于部署模式,因为较新的模式将 定义为 UUID,但一旦检索到漏洞邮件,页面就会暴露无需所有权检查即可使用的附件下载链接。 影响范围 经过身份验证的低权限用户可以读取属于其他帐户的已发送邮件内容。暴露的数据可能包括: 邮件主题 邮件正文 发件人用户名和显示名称 收件人、CC 和 BCC 值存储在 outbox 行中 发送时间戳 附件引用和可下载的附件内容 这可能导致内部消息数据的广泛机密性泄露。由于顺序 设计,影响被放大,允许从 Web 界面实用地枚举已发送邮件表。 修复方案 在 中,邮件检索查询应验证邮件的所有权。 在 中,附件下载应验证文件的所有权或邮件级授权。 POC 代码 步骤 1 - 以低权限用户身份进行身份验证 在 openSIS 中登录为任何非管理员用户,该用户有权访问消息传递模块。 步骤 2 - 通过显式 请求已发送邮件正文 请求: 步骤 3 - 枚举顺序邮件标识符 使用递增的 值重复相同的请求: 步骤 4 - 下载由检索到的邮件公开的附件 如果检索到的邮件包含附件,则响应呈现类似以下的链接: 请求: