Apache OpenMeetings 9.1.0 - 高危 - 远程 - 权限残留 - SOAP POST /user 复制 UserDTO.rights 包括 ADMIN
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · openmeetings-soap-user-rights
类别: 权限残留 可达性: 远程
Apache OpenMeetings 9.1.0。SOAP POST /user/ 会复制 UserDTO.rights,并会按 id 进行更新。SOAP 是 LMS 集成账户。它本应保持在 ADMIN 之下。UserMapper 会执行 userDao.get(dto.getId()),然后执行 u.setRights(dto.getRights())。UserWebService.add 会添加 ROOM/LOGIN/DASHBOARD,且从不剥离 ADMIN。
| ID | 暂无 CVE |
| 类别 | 权限残留 |
| 可达性 | 远程(SOAP SID) |
| CWE | CWE-269、CWE-280 |
| CVSS | 高危:8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 产品 | Apache OpenMeetings 9.1.0 |
| 认证 | Right.SOAP(非 ADMIN) |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1:18152 |
| 方法 | 汇聚点 | 权限 |
|---|---|---|
SOAP POST /services/user/?sid= rights=["ADMIN"] | UserMapper.setRights + userDao.update | 完整性(实验验证): 植入 ADMIN。实验:plantedadm 名字见证,以植入用户执行 DELETE /user/3 返回 200 Deleted。仅 SOAP 的 soaplab DELETE 为 error.notallowed。 |
使用现有 id 的相同 POST | userDao.get(dto.getId()) | 完整性(实验验证): id 合并覆盖。实验:用户 4 登录 mergeover 并具有 ADMIN。 |
已关闭: DELETE /user/{id} 仍需要 ADMIN。ROOM SID 在添加时为 NO_PERMISSION。前端注册不接受 rights 数组。
cd lab
./run.sh
最后一行:SUCCESS OPENMEETINGS-SOAP-RIGHTS-WITNESS
建议修复:在 SOAP 添加时忽略 UserDTO.rights,或仅允许 LOGIN/ROOM/DASHBOARD。添加时绝不按 id 加载。除非调用者是 ADMIN,否则剥离 ADMIN/SOAP。
Abraxas Labs - https://abraxaslabs.tech - https://github.com/abraxas - https://x.com/abraxas_null - [email protected]