Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
signal-server-dropwizard-admin — Signal-Server v20261007.0.0 - Hoch - Remote - Privilegien-Rest - unauth Dropwizard-Admin :8081 | Kitploit
Tools/GitHubGitHub/abraxas/signal-server-dropwizard-admin
DefensivwerkzeugeAufklärungSchwachstellenanalyseKonfigurationsprüfungInformationsbeschaffungWebsicherheitPenetrationstestsFehlkonfiguration

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
GitHub
abraxas/signal-server-dropwizard-admin

signal-server-dropwizard-admin

Signal-Server v20261007.0.0 - Hoch - Remote - Privilegien-Rest - unauth Dropwizard-Admin :8081

Repository anzeigen
724vor 9 TagenNoch nicht geprüft
Teilen

Abraxas Labs - signal-server-dropwizard-admin

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  signal-server-dropwizard-admin

Write-up: https://abraxaslabs.tech/research/signal-server-dropwizard-admin

signal-server-dropwizard-admin

Klasse: Übrig gebliebenes Privileg Reichweite: Remote

Signal-Server v20261007.0.0 (a15d5cd) - Signal Messenger, LLC

Dropwizard 5.0.2 DefaultServerFactory liefert einen HTTP-Admin-Connector auf Port 8081 mit nicht gesetztem bindHost (alle Schnittstellen) und ohne Admin-Authentifizierung. Signal-Server überschreibt das nie. service/config/sample.yml hat keinen server:-Block. Ein YAML, das nur TLS-applicationConnectors auflistet, erbt trotzdem Klartext-8081 auf 0.0.0.0. server plus die drei ServerCommand-Worker starten ihn. ExternalRequestFilter befindet sich nur im Anwendungskontext.

Unauth HTTP auf :8081 ist die operative Admin-Ebene. Kein RCE. Keine Account-Übernahme. Kein Lesen versiegelter Nachrichten.

IDnoch keine CVE
KlasseÜbrig gebliebenes Privileg (nicht authentifizierter Dropwizard-Admin)
ReichweiteRemote (alle Schnittstellen :8081, keine Auth)
CWECWE-306, CWE-1188
CVSSHoch: 7.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
ProduktSignal-Server
Betroffenv20261007.0.0 (a15d5cd) Dropwizard 5.0.2. In-Tree-Beispiel / ausgelassene adminConnectors.
Authkeine am Admin-Connector
LizenzGNU Affero GPL v3.0
Labornur 127.0.0.1

Was ein Angreifer tun kann

Jeder, der TCP zum Admin-Port öffnen kann (Standard 0.0.0.0:8081, keine zusätzliche Konfiguration, kein Authorization-Header), erhält jedes Standard-Dropwizard-5-Admin-Servlet plus Signals zusätzliche Task. Das ist der vollständige Privilegsatz. Nichts in dieser Liste ist RCE, ATO oder ein Lesen versiegelter Nachrichtenkörper.

Recon und Prozessdaten (GET, nicht authentifiziert)

MethodePfadPrivileg
GET/pingBestätigt, dass der Admin-Listener läuft. Body ist pong.
GET/metricsLiest die vollständige Codahale-Registry als JSON: JVM-Heap und Non-Heap, GC-Zähler, Thread-Zähler, Jetty-Connector-Meter, 4xx/5xx-Gauges, Timer. Damit lässt sich der Prozess fingerprinten, die Last schätzen und die Wirkung späterer Tasks beobachten.
GET/threadsVollständiger JVM-Thread-Dump: jeder Thread-Name, jede ID, jeder Zustand und alle Stack-Frames. Im Labor zeigte dies dw-admin-* plus java.base-NIO-Frames. Auf einem Live-Signal-Node kann derselbe Dump Klassennamen, Logger-Namen und jeden String enthalten, der zufällig auf einem Stack liegt (Dateipfade, Hostnamen, in-flight Argument-toString). Es ist kein Heap-Dump und kein Message-Queue-Dump.
GET/healthcheckFührt registrierte Health-Checks aus. Dieser Tree registriert nie Extras, daher ist der Body der Standard-Deadlock-Check (deadlocks.healthy). Ein 200 vs. 500 zeigt, ob die JVM glaubt, in einem Deadlock zu sein.
GET/tasksListet Admin-Tasks auf. Bei diesem Pin: gc, log-level, set-request-logging-enabled.

Integrität von Logging und GC (POST, nicht authentifiziert)

MethodePfadBerechtigung
POST/tasks/log-level?logger=<name>&level=<LEVEL>Setzt jeden Logback-Logger auf TRACE, DEBUG, INFO, WARN, ERROR oder OFF. TRACE kann Anwendungs-Logger dazu bringen, mehr auszugeben (einschließlich Werten, die ein Entwickler geloggt hat). OFF bei einem Security- oder Access-Logger lässt diesen verstummen. Der Angreifer erhält den Log-Stream nicht über dieses HTTP. Er ändert, was der Prozess auf die Festplatte oder nach stdout schreibt. Lab-Oracle: Logger-Name SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS auf TRACE.
POST/tasks/gcRuft System.gc() auf. Die Antwort ist Running GC... / Done!. Das ist ein Stop-the-World-Anstoß, kein Prozessende.
POST/tasks/set-request-logging-enabled?enabled=trueEine reine Signal-Task, registriert in WhisperServerService.run. Aktiviert den Request-Access-Log-Filter (RequestLogManager). Danach kann HTTP an den Anwendungs-Connector Methode, URI und Header (einschließlich Authorization Basic) in das Access-Log auf der Festplatte schreiben. Der Admin-Client bekommt diese Zeilen nicht zurück. Bei message-persister-service / APN / Idle-Job-Workern hat der Anwendungs-Port keine Signal-Jersey-Ressourcen, daher ist diese Task auf server relevant. enabled=false schaltet sie wieder aus.

Was dieser Überrest nicht gewährt

  • Keine Shell, kein ProcessBuilder, kein Runtime.exec.
  • Kein Heap-Dump-Servlet. GET /heapdump ist 404.
  • Kein Lesen von versiegelten Envelopes, Prekeys, SVR-Secrets oder Dynamo/FDB-Zeilen über Admin.
  • Kein Erstellen/Löschen von Konten, kein Device-Link, kein Überspringen der Registrierungssperre.
  • Keine Änderung an sample.yml oder an Bind-Adressen.
  • Das Aktivieren von Request-Logging ist für sich genommen kein Credential-Diebstahl. Der Diebstahl erfordert ein späteres Lesen dieser Log-Dateien (Festplatte, Log-Shipper, TRACE-Logger).

Ein Schwester-Container im selben Docker-Netzwerk erreichte http://vuln:8081/ping (200 pong) und konnte http://patched:8081/ping nicht erreichen, als bindHost auf 127.0.0.1 stand. Das ist die Remote-Hälfte.

Wie ich es gefunden habe

Ich habe signalapp/Signal-Server v20261007.0.0 gepinnt. Achtzehn Quellcode-Suchen. Chat, Keys, Messages, Backups, Donations, Calling, MFA, gRPC-Omnibus und ausgehendes HTTP kamen bei Critical/High leer zurück. Die Worker-/Admin-Suche nicht. Dropwizard 5.0.2 HttpConnectorFactory.admin() verwendet weiterhin Port 8081 und einen Null-Bind-Host. Signal setzt nie adminConnectors. Caddys Standard-Admin ist localhost. Dieser hier nicht.

Fehlversuch: den vollständigen Signal-Server booten zu wollen. sample.yml besteht check und benötigt trotzdem FoundationDB, Dynamo, Redis und ein Secrets-Bundle für run. Der Überrest ist der Framework-Connector, den ServerCommand vor all dem startet. Das Lab ist Dropwizard 5.0.2 mit demselben leeren server:-YAML und Signals zusätzlichem Task-Namen.

Lab

cd lab
./run.sh

Loopback 127.0.0.1:19010. Compose-Projekt signal-server-dropwizard-admin. Witness SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS. Gadget-YAML hat keinen server:-Block. Negatives YAML setzt bindHost: 127.0.0.1. Letzte Zeile:

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

Behebung

Tool herunterladen