Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
signal-server-dropwizard-admin — Signal-Server v20261007.0.0 - Élevé - À distance - Privilège résiduel - admin Dropwizard non authentifié :8081 | Kitploit
Outils/GitHubGitHub/abraxas/signal-server-dropwizard-admin
Outils DéfensifsReconnaissanceAnalyse des VulnérabilitésAudit de ConfigurationCollecte d'InformationsSécurité WebTests d'IntrusionMauvaise Configuration
GitHub
abraxas/signal-server-dropwizard-admin

signal-server-dropwizard-admin

Signal-Server v20261007.0.0 - Élevé - À distance - Privilège résiduel - admin Dropwizard non authentifié :8081

Voir le dépôt
410il y a 4 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - signal-server-dropwizard-admin

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

signal-server-dropwizard-admin

Classe : Privilège résiduel Portée : Distante

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

Dropwizard 5.0.2 DefaultServerFactory embarque un connecteur d'administration HTTP sur le port 8081 avec bindHost non défini (toutes les interfaces) et sans authentification d'administration. Signal-Server ne le surcharge jamais. service/config/sample.yml ne contient aucun bloc server:. Un YAML qui ne liste que des applicationConnectors TLS hérite quand même du 8081 en clair sur 0.0.0.0. server plus les trois workers ServerCommand le démarrent. ExternalRequestFilter n'est présent que sur le contexte applicatif.

Le HTTP non authentifié vers :8081 constitue le plan d'administration opérationnel. Pas de RCE. Pas de prise de contrôle de compte. Pas de lecture de messages scellés.

IDpas encore de CVE
ClassePrivilège résiduel (admin Dropwizard non authentifié)
PortéeDistante (:8081 sur toutes les interfaces, sans auth)
CWECWE-306, CWE-1188
CVSSÉlevé : 7.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
ProduitSignal-Server
Affectév20261007.0.0 (a15d5cd) Dropwizard 5.0.2. Exemple in-tree / adminConnectors omis.
Authaucune sur le connecteur d'administration
LicenceGNU Affero GPL v3.0
Lab127.0.0.1 uniquement

Ce qu'un attaquant peut faire

Quiconque peut ouvrir une connexion TCP vers le port d'administration (par défaut 0.0.0.0:8081, sans configuration supplémentaire, sans en-tête Authorization) obtient tous les servlets d'administration Dropwizard 5 standards plus la tâche supplémentaire de Signal. C'est l'ensemble complet des privilèges. Rien dans cette liste n'est une RCE, une ATO, ou une lecture du corps de messages scellés.

Reconnaissance et données de processus (GET, non authentifié)

MéthodeCheminPrivilège
GET/pingConfirmer que l'écouteur d'administration est actif. Le corps est pong.
GET/metricsLire l'intégralité du registre Codahale en JSON : tas et hors-tas de la JVM, compteurs GC, nombre de threads, compteurs de connecteurs Jetty, jauges 4xx/5xx, timers. À utiliser pour identifier le processus, estimer la charge et observer l'effet des tâches ultérieures.
GET/threadsVidage complet des threads de la JVM : nom, id, état et frames de pile de chaque thread. En lab, cela montrait dw-admin-* plus des frames nio de java.base. Sur un nœud Signal en production, le même vidage peut inclure des noms de classes, des noms de loggers et toute chaîne se trouvant sur une pile (chemins de fichiers, noms d'hôtes, toString d'arguments en cours). Ce n'est pas un vidage de tas et ce n'est pas un vidage de file de messages.
GET/healthcheckExécuter les contrôles de santé enregistrés. Cet arbre n'enregistre jamais d'extras, donc le corps est le contrôle de deadlock par défaut (deadlocks.healthy). Un 200 vs 500 vous indique si la JVM pense être en deadlock.
GET/tasksLister les tâches d'administration. Sur ce pin : gc, log-level, set-request-logging-enabled.

Intégrité du logging et du GC (POST, non authentifié)

MéthodeCheminPrivilège
POST/tasks/log-level?logger=<name>&level=<LEVEL>Définir n'importe quel logger Logback sur TRACE, DEBUG, INFO, WARN, ERROR ou OFF. TRACE peut faire imprimer davantage aux loggers applicatifs (y compris des valeurs journalisées par un développeur). OFF sur un logger de sécurité ou d'accès l'éteint. L'attaquant ne reçoit pas le flux de logs via ce HTTP. Il modifie ce que le processus écrit sur disque ou sur stdout. Oracle de lab : nom de logger SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS sur TRACE.
POST/tasks/gcAppeler System.gc(). La réponse est Running GC... / Done!. C'est une incitation stop-the-world, pas une mort du processus.
POST/tasks/set-request-logging-enabled?enabled=trueTâche propre à Signal enregistrée dans WhisperServerService.run. Active le filtre de journal d'accès aux requêtes (RequestLogManager). Après cela, le HTTP vers le connecteur applicatif peut écrire la méthode, l'URI et les en-têtes (y compris Authorization Basic) dans le journal d'accès sur disque. Le client d'administration ne récupère pas ces lignes. Sur les workers message-persister-service / APN / idle-job, le port applicatif n'a pas de ressources Signal Jersey, donc cette tâche compte sur server. enabled=false la désactive à nouveau.

Ce que ce résidu n'accorde pas

  • Pas de shell, pas de ProcessBuilder, pas de Runtime.exec.
  • Pas de servlet de vidage de tas. GET /heapdump renvoie 404.
  • Pas de lecture des enveloppes scellées, des prekeys, des secrets SVR ou des lignes Dynamo/FDB via l'admin.
  • Pas de création/suppression de compte, de liaison d'appareil ou de contournement du verrou d'enregistrement.
  • Pas de modification de sample.yml ni des adresses de bind.
  • L'activation du logging des requêtes n'est pas en soi un vol d'identifiants. Le vol nécessite une lecture ultérieure de ces fichiers de logs (disque, expéditeur de logs, logger TRACE).

Un conteneur frère sur le même réseau Docker atteignait http://vuln:8081/ping (200 pong) et ne pouvait pas atteindre http://patched:8081/ping lorsque bindHost valait 127.0.0.1. C'est la moitié « Distante ».

Comment je l'ai trouvé

J'ai épinglé signalapp/Signal-Server v20261007.0.0. Dix-huit recherches dans le code source. Chat, clés, messages, sauvegardes, dons, appels, MFA, omnibus gRPC et HTTP sortant sont revenus vides en Critique/Élevé. La recherche workers/admin, non. Dropwizard 5.0.2 HttpConnectorFactory.admin() utilise toujours le port 8081 et un bind host nul. Signal ne définit jamais adminConnectors. L'admin par défaut de Caddy est sur localhost. Celui-ci ne l'est pas.

Fausse piste : tenter de démarrer le Signal-Server complet. sample.yml passe check et nécessite quand même FoundationDB, Dynamo, Redis et un bundle de secrets pour run. Le résidu est le connecteur du framework que ServerCommand démarre avant tout cela. Le lab est Dropwizard 5.0.2 avec le même YAML server: vide et le nom de tâche supplémentaire de Signal.

Lab

cd lab
./run.sh

Loopback 127.0.0.1:19010. Projet Compose signal-server-dropwizard-admin. Témoin SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS. Le YAML gadget n'a pas de bloc server:. Le YAML négatif définit bindHost: 127.0.0.1. Dernière ligne :

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

Correctif

Télécharger l’outil