
Apache OpenMeetings 9.1.0 - Alta - Remoto - Resto de privilegios - el asistente /install obsoleto inserta un segundo ADMIN
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · openmeetings-stale-install-admin
Clase: Privilegio residual Alcance: Remoto
Apache OpenMeetings 9.1.0 (9773c59e) - Apache Software Foundation
InstallWizardPage redirige las solicitudes nuevas después de isInstalled(). Una página Wicket abierta antes de la primera instalación permanece activa. Finalizar en esa sesión obsoleta ejecuta loadAll(cfg, true). ImportInitvalues.checkInstalled registra "no need to install" y no retorna. El segundo finalizar inserta otro usuario ADMIN+SOAP.
| ID | aún sin CVE |
| Clase | Privilegio residual |
| Alcance | Remoto (/install sin autenticación durante la configuración inicial) |
| CWE | CWE-367, CWE-269 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Producto | Apache OpenMeetings |
| Afectado | 9.1.0 (9773c59e1af327bf988018e661f456ae9997c29f) ventana de primera instalación |
| Autenticación | ninguna en la sesión obsoleta del asistente |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1:18159. Tarball oficial 9.1.0, sin instalar, HTTP 5080. |
Fijé la etiqueta 9.1.0, peel 9773c59e1af327bf988018e661f456ae9997c29f. El residuo requiere una página del asistente abierta antes de que se completara la primera instalación.
Alcanzar /openmeetings/install mientras la instancia aún no está instalada. Conservar ese JSESSIONID. Esperar hasta que un operador complete la primera instalación. Enviar POST Finish en la página obsoleta.
| Método | Sumidero | Privilegio |
|---|---|---|
POST obsoleto Finish del asistente (wizard-form-buttons-finish) | ImportInitvalues.checkInstalled registra y continúa (ImportInitvalues.java:607-612); loadInitUserAndGroup | Integridad (probado en laboratorio): segundo usuario staleadm con derechos ADMIN, SOAP, LOGIN, DASHBOARD, ROOM. El inicio de sesión SOAP tuvo éxito. Recuento de usuarios=2. |
Mismo loadAll(cfg, true) | persistencia / SMTP / rutas desde el formulario obsoleto | Integridad (inferido): reescribir persistence.xml y la configuración de correo desde campos del asistente controlados por el atacante. No es necesario para el SUCCESS. |
Probado en laboratorio vs inferido: el segundo inicio de sesión ADMIN+SOAP está probado en laboratorio. La reescritura de persistence.xml es inferida a partir de loadAll.
Requiere: que el atacante haya obtenido /install antes de isInstalled(). Luego el operador completó la instalación. El mismo id de página Wicket sigue siendo enviado. La imagen docker oficial ya está instalada, así que esta es la ventana del primer arranque del tarball (y cualquier reinstalación).
| Superficie | Por qué |
|---|---|
GET /install nuevo después de la instalación | el constructor redirige a /signin (InstallWizardPage.java:31-34). Laboratorio: la nueva sesión terminó en signin. |
| Inicio de sesión SOAP sin autenticación antes de la instalación | health installed=false; el inicio de sesión falla hasta que finaliza el asistente. |
| Tomcat manager / consola H2 | manager excluido, consola H2 desactivada en esta fijación. |
El bloqueo del constructor parece una corrección completa para "instalar después de instalar". checkInstalled aún solo registra. Wicket almacena la página en la sesión. Una sesión que cruzó isInstalled() conserva un botón Finish que aún llama a loadAll.
admin.sh -i es una segunda JVM y no carga el CryptProvider de Tomcat, así que este laboratorio usa un segundo asistente web como primer instalador y la página obsoleta como el atacante.
cd lab
./run.sh
Loopback http://127.0.0.1:18159/openmeetings. Última línea del testigo:
SUCCESS OPENMEETINGS-STALE-INSTALL-WITNESS
checkInstalled debe devolver (o lanzar una excepción) cuando ya está instalado. Vincule Finish a un token de instalación de un solo uso. Elimine la página de Wicket de la sesión cuando isInstalled() cambie. No inserte un segundo ADMIN desde loadInitUserAndGroup si ya existe un administrador.
Abraxas Labs - https://abraxaslabs.tech - https://github.com/abraxas - https://x.com/abraxas_null - [email protected]
Proveedor: [email protected]