
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 ページは有効なまま残ります。その古いセッションで Finish を実行すると loadAll(cfg, true) が実行されます。ImportInitvalues.checkInstalled は「no need to install」とログを出力するだけで、リターンしません。2回目の Finish は別の ADMIN+SOAP ユーザーを挿入します。
| ID | CVE 未割当 |
| 分類 | 権限の残留 |
| 到達性 | リモート(初回セットアップ中の未認証 /install) |
| CWE | CWE-367, CWE-269 |
| CVSS | High: 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 を peel しました。この残留には、最初のインストールが完了する前に開かれたウィザードページが必要です。
インスタンスがまだインストールされていない間に /openmeetings/install に到達します。その JSESSIONID を保持します。運用者が最初のインストールを完了するまで待ちます。古いページで Finish を POST します。
| 手法 | シンク | 権限 |
|---|---|---|
古い POST ウィザード Finish (wizard-form-buttons-finish) | ImportInitvalues.checkInstalled がログを出力して続行 (ImportInitvalues.java:607-612); loadInitUserAndGroup | 整合性(ラボ実証済み): 権限 ADMIN、SOAP、LOGIN、DASHBOARD、ROOM を持つ2人目のユーザー staleadm。SOAP ログイン成功。ユーザーリスト件数=2。 |
同じ loadAll(cfg, true) | 古いフォームからの永続化 / SMTP / パス | 整合性(推定): 攻撃者が制御するウィザードフィールドから persistence.xml とメール設定を書き換え。SUCCESS には不要。 |
ラボ実証済み vs 推定: 2人目の ADMIN+SOAP ログインはラボ実証。persistence.xml の書き換えは loadAll からの推定。
必要条件: 攻撃者が isInstalled() より前に /install を取得していること。その後、運用者がインストールを完了。同じ Wicket ページ id が引き続き POST される。公式 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 をロードしないため、このラボでは2つ目のウェブウィザードを最初のインストーラとして、古いページを攻撃者として使用します。
cd lab
./run.sh
ループバック http://127.0.0.1:18159/openmeetings。目撃した最終行:
SUCCESS OPENMEETINGS-STALE-INSTALL-WITNESS
checkInstalled は、すでにインストール済みの場合に return(または throw)しなければなりません。Finish をワンタイムのインストールトークンにバインドしてください。isInstalled() が反転したら、セッションから Wicket ページを削除してください。管理者がすでに存在する場合、loadInitUserAndGroup から 2 人目の ADMIN を挿入しないでください。
Abraxas Labs - https://abraxaslabs.tech - https://github.com/abraxas - https://x.com/abraxas_null - [email protected]
ベンダー: [email protected]