abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · openmeetings-stale-install-admin
类别: 权限残留 可达性: 远程
Apache OpenMeetings 9.1.0 (9773c59e) - Apache Software Foundation
InstallWizardPage 在 isInstalled() 之后会重定向新请求。在首次安装之前打开的 Wicket 页面会保持存活。在该过期会话上完成操作会执行 loadAll(cfg, true)。ImportInitvalues.checkInstalled 记录 "no need to install" 并且不返回。第二次完成会插入另一个 ADMIN+SOAP 用户。
| ID | 暂无 CVE |
| 类别 | 权限残留 |
| 可达性 | 远程(首次安装期间未认证访问 /install) |
| CWE | CWE-367, CWE-269 |
| CVSS | 高危:8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 产品 | Apache OpenMeetings |
| 受影响版本 | 9.1.0 (9773c59e1af327bf988018e661f456ae9997c29f) 首次安装窗口 |
| 认证 | 过期向导会话无需认证 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1:18159。官方 9.1.0 tarball,未安装,HTTP 5080。 |
我固定了标签 9.1.0,剥离后为 9773c59e1af327bf988018e661f456ae9997c29f。该残留需要有一个在首次安装完成之前打开的向导页面。
在实例尚未安装时访问 /openmeetings/install。保留该 JSESSIONID。等待操作员完成首次安装。在过期页面上 POST Finish。
| 方法 | 汇聚点 | 权限 |
|---|---|---|
过期 POST 向导 Finish(wizard-form-buttons-finish) | ImportInitvalues.checkInstalled 记录日志并继续(ImportInitvalues.java:607-612);loadInitUserAndGroup | 完整性(实验验证): 第二个用户 staleadm,拥有 ADMIN、SOAP、LOGIN、DASHBOARD、ROOM 权限。SOAP 登录成功。用户列表 count=2。 |
相同的 loadAll(cfg, true) | 来自过期表单的持久化 / SMTP / 路径 | 完整性(推断): 通过攻击者控制的向导字段重写 persistence.xml 和邮件设置。并非 SUCCESS 所必需。 |
实验验证 vs 推断: 第二个 ADMIN+SOAP 登录为实验验证。persistence.xml 重写为基于 loadAll 的推断。
前提条件: 攻击者在 isInstalled() 之前获取了 /install。随后操作员完成了安装。相同的 Wicket 页面 id 仍可提交。官方 docker 镜像已安装,因此这是 tarball 首次启动窗口(以及任何重装)。
| 攻击面 | 原因 |
|---|---|
安装后全新 GET /install | 构造函数重定向到 /signin(InstallWizardPage.java:31-34)。实验:新会话落在 signin。 |
| 安装前未认证 SOAP 登录 | 健康检查 installed=false;在向导完成前登录失败。 |
| Tomcat manager / H2 console | 此固定版本中 manager 被排除,H2 console 关闭。 |
构造函数锁看起来是对 "安装后再安装" 的完整修复。checkInstalled 仍然只记录日志。Wicket 将页面存储在会话中。跨越 isInstalled() 的会话保留了一个仍会调用 loadAll 的 Finish 按钮。
admin.sh -i 是第二个 JVM,不会加载 Tomcat CryptProvider,因此本实验使用第二个 web 向导作为首次安装器,并将过期页面作为攻击者。
cd lab
./run.sh
回环地址 http://127.0.0.1:18159/openmeetings。见证最后一行:
SUCCESS OPENMEETINGS-STALE-INSTALL-WITNESS
checkInstalled 在已安装时必须返回(或抛出异常)。将 Finish 绑定到一次性安装令牌。当 isInstalled() 翻转时,从会话中移除 Wicket 页面。如果管理员已存在,不要从 loadInitUserAndGroup 插入第二个 ADMIN。
Abraxas Labs - https://abraxaslabs.tech - https://github.com/abraxas - https://x.com/abraxas_null - [email protected]