
Apache OpenMeetings 9.1.0 – Hoch – Remote – Privilegien-Rest – veralteter /install-Assistent fügt zweiten ADMIN hinzu
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · openmeetings-stale-install-admin
Klasse: Zurückgebliebenes Privileg Reichweite: Remote
Apache OpenMeetings 9.1.0 (9773c59e) - Apache Software Foundation
InstallWizardPage leitet neue Anfragen nach isInstalled() um. Eine Wicket-Seite, die vor der ersten Installation geöffnet wurde, bleibt aktiv. Ein Finish auf dieser veralteten Sitzung führt loadAll(cfg, true) aus. ImportInitvalues.checkInstalled protokolliert "no need to install" und kehrt nicht zurück. Das zweite Finish fügt einen weiteren ADMIN+SOAP-Benutzer ein.
| ID | noch keine CVE |
| Klasse | Zurückgebliebenes Privileg |
| Reichweite | Remote (unauthentifiziertes /install während der Ersteinrichtung) |
| CWE | CWE-367, CWE-269 |
| CVSS | Hoch: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Produkt | Apache OpenMeetings |
| Betroffen | 9.1.0 (9773c59e1af327bf988018e661f456ae9997c29f) Erstinstallations-Fenster |
| Auth | keine auf der veralteten Wizard-Sitzung |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1:18159. Offizielles 9.1.0-Tarball, nicht installiert, HTTP 5080. |
Ich habe den Tag 9.1.0 gepinnt, Peel 9773c59e1af327bf988018e661f456ae9997c29f. Das Zurückbleiben erfordert eine Wizard-Seite, die vor Abschluss der ersten Installation geöffnet wurde.
/openmeetings/install erreichen, während die Instanz noch nicht installiert ist. Diese JSESSIONID behalten. Warten, bis ein Betreiber die erste Installation abschließt. POST Finish auf der veralteten Seite.
| Methode | Sink | Privileg |
|---|---|---|
Veraltetes POST-Wizard-Finish (wizard-form-buttons-finish) | ImportInitvalues.checkInstalled protokolliert und fährt fort (ImportInitvalues.java:607-612); loadInitUserAndGroup | Integrität (im Lab nachgewiesen): zweiter Benutzer staleadm mit Rechten ADMIN, SOAP, LOGIN, DASHBOARD, ROOM. SOAP-Login erfolgreich. Benutzerlistenanzahl=2. |
Dasselbe loadAll(cfg, true) | Persistenz / SMTP / Pfade aus dem veralteten Formular | Integrität (abgeleitet): persistence.xml und Mail-Einstellungen aus angreifergesteuerten Wizard-Feldern überschreiben. Für SUCCESS nicht erforderlich. |
Im Lab nachgewiesen vs. abgeleitet: zweiter ADMIN+SOAP-Login ist im Lab. persistence.xml-Überschreiben ist aus loadAll abgeleitet.
Voraussetzung: Angreifer hat /install vor isInstalled() abgerufen. Betreiber hat dann die Installation abgeschlossen. Dieselbe Wicket-Seiten-ID wurde weiterhin gepostet. Das offizielle Docker-Image ist bereits installiert, daher betrifft dies das Erststart-Fenster des Tarballs (und jede Neuinstallation).
| Angriffsfläche | Warum |
|---|---|
Frisches GET /install nach der Installation | Konstruktor leitet zu /signin um (InstallWizardPage.java:31-34). Lab: neue Sitzung landete auf signin. |
| Unauthentifizierter SOAP-Login vor der Installation | Health installed=false; Login schlägt fehl bis zum Wizard-Finish. |
| Tomcat-Manager / H2-Konsole | Manager ausgeschlossen, H2-Konsole bei diesem Pin deaktiviert. |
Die Sperre im Konstruktor sieht wie eine vollständige Behebung für "Installation nach Installation" aus. checkInstalled protokolliert weiterhin nur. Wicket speichert die Seite in der Sitzung. Eine Sitzung, die isInstalled() überschritten hat, behält eine Finish-Schaltfläche, die weiterhin loadAll aufruft.
admin.sh -i ist eine zweite JVM und lädt nicht den Tomcat-CryptProvider, daher verwendet dieses Lab einen zweiten Web-Wizard als ersten Installer und die veraltete Seite als Angreifer.
cd lab
./run.sh
Loopback http://127.0.0.1:18159/openmeetings. Zeuge letzte Zeile:
SUCCESS OPENMEETINGS-STALE-INSTALL-WITNESS
checkInstalled muss zurückkehren (oder eine Ausnahme auslösen), wenn bereits installiert. Binde Finish an ein einmaliges Installations-Token. Entferne die Wicket-Seite aus der Sitzung, wenn isInstalled() umschlägt. Füge keinen zweiten ADMIN aus loadInitUserAndGroup ein, wenn bereits ein Administrator existiert.
Abraxas Labs - https://abraxaslabs.tech - https://github.com/abraxas - https://x.com/abraxas_null - [email protected]
Anbieter: [email protected]