
Signal-Server v20261007.0.0 - 高 - リモート - 権限残存 - 未認証 Dropwizard admin :8081
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · signal-server-dropwizard-admin
分類: 権限の残留 到達範囲: リモート
Signal-Server v20261007.0.0 (a15d5cd) - Signal Messenger, LLC
Dropwizard 5.0.2 の DefaultServerFactory は、bindHost が未設定(全インターフェース)で管理認証もない HTTP 管理コネクタをポート 8081 で提供します。Signal-Server はそれを上書きしません。service/config/sample.yml には server: ブロックがありません。TLS の applicationConnectors のみを列挙した YAML でも、0.0.0.0 上の平文 8081 を継承します。server と 3 つの ServerCommand ワーカーがそれを起動します。ExternalRequestFilter はアプリケーションコンテキストにのみ存在します。
:8081 への未認証 HTTP が運用管理プレーンです。 RCE ではありません。アカウント乗っ取りではありません。封印されたメッセージの読み取りでもありません。
| ID | CVE 未採番 |
| 分類 | 権限の残留(未認証の Dropwizard 管理) |
| 到達範囲 | リモート(全インターフェース :8081、認証なし) |
| CWE | CWE-306, CWE-1188 |
| CVSS | High: 7.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L |
| 製品 | Signal-Server |
| 影響を受けるバージョン | v20261007.0.0 (a15d5cd) Dropwizard 5.0.2。リポジトリ内のサンプル / adminConnectors の省略。 |
| 認証 | 管理コネクタにはなし |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ |
管理ポート(デフォルト 0.0.0.0:8081、追加設定なし、Authorization ヘッダーなし)に TCP 接続できる者は誰でも、標準の Dropwizard 5 管理サーブレットすべてに加え、Signal 独自のタスクを利用できます。それが権限の全範囲です。このリストに RCE、ATO、封印されたメッセージ本文の読み取りは含まれません。
| メソッド | パス | 権限 |
|---|---|---|
| GET | /ping | 管理リスナーが稼働していることを確認。ボディは pong。 |
| GET | /metrics | Codahale レジストリ全体を JSON として読み取り: JVM ヒープと非ヒープ、GC 回数、スレッド数、Jetty コネクタメーター、4xx/5xx ゲージ、タイマー。プロセスのフィンガープリント、負荷の推定、後続タスクの効果の監視に使用。 |
| GET | /threads | JVM スレッドダンプ全体: すべてのスレッド名、ID、状態、スタックフレーム。ラボでは dw-admin-* と java.base の nio フレームが表示された。稼働中の Signal ノードでは、同じダンプにクラス名、ロガー名、スタック上にたまたま存在する文字列(ファイルパス、ホスト名、処理中の引数の toString)が含まれ得る。ヒープダンプではなく、メッセージキューのダンプでもない。 |
| GET | /healthcheck | 登録されたヘルスチェックを実行。このツリーは追加のチェックを登録しないため、ボディはデフォルトのデッドロックチェック(deadlocks.healthy)。200 か 500 かで、JVM が自身をデッドロック状態と見なしているかがわかる。 |
| GET | /tasks | 管理タスクを一覧表示。このピンでは: gc、log-level、set-request-logging-enabled。 |
| メソッド | パス | 権限 |
|---|---|---|
| POST | /tasks/log-level?logger=<name>&level=<LEVEL> | 任意の Logback ロガーを TRACE、DEBUG、INFO、WARN、ERROR、OFF に設定。TRACE はアプリケーションロガーにさらに多くの出力(開発者がログに記録した値を含む)をさせ得る。セキュリティまたはアクセスロガーに対する OFF はログを暗転させる。攻撃者はこの HTTP 経由でログストリームを受け取るのではない。プロセスがディスクまたは stdout に書き込む内容を変更する。ラボのオラクル: ロガー名 SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS を TRACE に。 |
| POST | /tasks/gc | System.gc() を呼び出す。レスポンスは Running GC... / Done!。これは stop-the-world の促しであり、プロセスの死ではない。 |
| POST | /tasks/set-request-logging-enabled?enabled=true | WhisperServerService.run で登録される Signal 独自のタスク。リクエストアクセスログフィルター(RequestLogManager)を有効化する。その後、アプリケーションコネクタへの HTTP が、メソッド、URI、ヘッダー(Authorization Basic を含む)をディスク上のアクセスログに書き込み得る。管理クライアントはそれらの行を受け取らない。message-persister-service / APN / idle-job ワーカーでは、アプリケーションポートに Signal Jersey リソースがないため、このタスクは server で意味を持つ。enabled=false で再び無効化できる。 |
ProcessBuilder なし、Runtime.exec なし。GET /heapdump は 404。sample.yml やバインドアドレスの変更なし。同じ Docker ネットワーク上の兄弟コンテナは http://vuln:8081/ping(200 pong)に到達でき、bindHost が 127.0.0.1 の場合 http://patched:8081/ping には到達できなかった。これがリモートの半分である。
signalapp/Signal-Server v20261007.0.0 をピン留めした。18 回のソース探索。チャット、キー、メッセージ、バックアップ、寄付、通話、MFA、gRPC オムニバス、アウトバウンド HTTP は Critical/High では空だった。ワーカー/管理の探索はそうではなかった。Dropwizard 5.0.2 の HttpConnectorFactory.admin() は依然としてポート 8081 と null のバインドホストを使用する。Signal は adminConnectors を設定しない。Caddy のデフォルト管理は localhost。これはそうではない。
誤った方向: 完全な Signal-Server を起動しようとしたこと。sample.yml は check を通過するが、run には FoundationDB、Dynamo、Redis、シークレットバンドルが必要。残留は、それらの前に ServerCommand が起動するフレームワークコネクタである。ラボは Dropwizard 5.0.2 で、同じ空の server: YAML と Signal の追加タスク名を使用している。
cd lab
./run.sh
ループバック 127.0.0.1:19010。Compose プロジェクト signal-server-dropwizard-admin。ウィットネス SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS。ガジェット YAML には server: ブロックがない。ネガティブ YAML は bindHost: 127.0.0.1 を設定。最終行:
SUCCESS signal-server-dropwizard-admin how=unauth-admin-8081 ping=200 metrics=200 threads=200 healthcheck=200 tasks=200 log-level=TRACE gc=200 set-log=enabled bind=* remote-vuln=200 remote-patched=fail SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS
管理を 127.0.0.1 にバインドするか、adminConnectors: [] を設定するか、管理コンテキストに認証 / mTLS を導入する。アプリケーションコネクタのみを列挙した YAML を出荷し、8081 がオフのままだと仮定しないこと。
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]