
Apache OpenMeetings 9.1.0 - Alta - Remoto - Resíduo de privilégio - assistente /install obsoleto insere segundo ADMIN
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · openmeetings-stale-install-admin
Classe: Privilégio remanescente Alcance: Remoto
Apache OpenMeetings 9.1.0 (9773c59e) - Apache Software Foundation
InstallWizardPage redireciona requisições novas após isInstalled(). Uma página Wicket aberta antes da primeira instalação permanece ativa. Concluir nessa sessão obsoleta executa loadAll(cfg, true). ImportInitvalues.checkInstalled registra "no need to install" e não retorna. A segunda conclusão insere outro usuário ADMIN+SOAP.
| ID | ainda sem CVE |
| Classe | Privilégio remanescente |
| Alcance | Remoto (/install não autenticado durante a primeira configuração) |
| 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 |
| Produto | Apache OpenMeetings |
| Afetado | 9.1.0 (9773c59e1af327bf988018e661f456ae9997c29f) janela de primeira instalação |
| Autenticação | nenhuma na sessão obsoleta do assistente |
| Licença | GNU Affero GPL v3.0 |
| Laboratório | apenas 127.0.0.1:18159. Tarball oficial 9.1.0, não instalado, HTTP 5080. |
Fixe a tag 9.1.0, peel 9773c59e1af327bf988018e661f456ae9997c29f. O resíduo exige uma página do assistente aberta antes da conclusão da primeira instalação.
Acesse /openmeetings/install enquanto a instância ainda não está instalada. Mantenha esse JSESSIONID. Aguarde até que um operador conclua a primeira instalação. Envie POST Finish na página obsoleta.
| Método | Sink | Privilégio |
|---|---|---|
POST obsoleto do assistente Finish (wizard-form-buttons-finish) | ImportInitvalues.checkInstalled registra e continua (ImportInitvalues.java:607-612); loadInitUserAndGroup | Integridade (comprovado em laboratório): segundo usuário staleadm com direitos ADMIN, SOAP, LOGIN, DASHBOARD, ROOM. Login SOAP bem-sucedido. Contagem da lista de usuários=2. |
Mesmo loadAll(cfg, true) | persistência / SMTP / caminhos do formulário obsoleto | Integridade (inferido): reescrever persistence.xml e configurações de e-mail a partir de campos do assistente controlados pelo atacante. Não necessário para SUCCESS. |
Comprovado em laboratório vs inferido: segundo login ADMIN+SOAP é de laboratório. A reescrita de persistence.xml é inferida a partir de loadAll.
Requer: o atacante buscou /install antes de isInstalled(). O operador então concluiu a instalação. O mesmo id de página Wicket ainda foi enviado. A imagem docker oficial já está instalada, então esta é a janela de primeiro boot do tarball (e qualquer reinstalação).
| Superfície | Motivo |
|---|---|
GET /install novo após a instalação | o construtor redireciona para /signin (InstallWizardPage.java:31-34). Laboratório: nova sessão caiu em signin. |
| Login SOAP não autenticado antes da instalação | health installed=false; login falha até a conclusão do assistente. |
| Tomcat manager / console H2 | manager excluído, console H2 desativado neste pin. |
O bloqueio no construtor parece uma correção completa para "instalar após instalar". checkInstalled ainda apenas registra. O Wicket armazena a página na sessão. Uma sessão que atravessou isInstalled() mantém um botão Finish que ainda chama loadAll.
admin.sh -i é uma segunda JVM e não carrega o CryptProvider do Tomcat, então este laboratório usa um segundo assistente web como primeiro instalador e a página obsoleta como o atacante.
cd lab
./run.sh
Loopback http://127.0.0.1:18159/openmeetings. Testemunha da última linha:
SUCCESS OPENMEETINGS-STALE-INSTALL-WITNESS
checkInstalled deve retornar (ou lançar exceção) quando já estiver instalado. Vincule Finish a um token de instalação de uso único. Remova a página Wicket da sessão quando isInstalled() mudar. Não insira um segundo ADMIN a partir de loadInitUserAndGroup se um administrador já existir.
Abraxas Labs - https://abraxaslabs.tech - https://github.com/abraxas - https://x.com/abraxas_null - [email protected]
Vendor: [email protected]