Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
signal-server-dropwizard-admin — Signal-Server v20261007.0.0 - Alta - Remoto - Privilegio residual - admin de Dropwizard sin autenticación :8081 | Kitploit
Herramientas/GitHubGitHub/abraxas/signal-server-dropwizard-admin
Herramientas DefensivasReconocimientoAnálisis de VulnerabilidadesAuditoría de ConfiguraciónRecopilación de InformaciónSeguridad WebPruebas de PenetraciónMala Configuración

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
GitHubabraxas/signal-server-dropwizard-admin

signal-server-dropwizard-admin

Signal-Server v20261007.0.0 - Alta - Remoto - Privilegio residual - admin de Dropwizard sin autenticación :8081

Ver Repositorio
410hace 4 díasAún no revisado
Compartir

Abraxas Labs - signal-server-dropwizard-admin

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

signal-server-dropwizard-admin

Clase: Privilegio residual Alcance: Remoto

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

Dropwizard 5.0.2 DefaultServerFactory incluye un conector de administración HTTP en el puerto 8081 con bindHost sin establecer (todas las interfaces) y sin autenticación de administración. Signal-Server nunca lo sobrescribe. service/config/sample.yml no tiene bloque server:. Un YAML que solo lista applicationConnectors TLS igualmente hereda el 8081 en texto plano sobre 0.0.0.0. server más los tres workers de ServerCommand lo inician. ExternalRequestFilter está solo en el contexto de la aplicación.

HTTP sin autenticación a :8081 es el plano de administración operativo. No es RCE. No es toma de control de cuentas. No es lectura de mensajes sellados.

IDaún sin CVE
ClasePrivilegio residual (administración Dropwizard sin autenticación)
AlcanceRemoto (:8081 en todas las interfaces, sin autenticación)
CWECWE-306, CWE-1188
CVSSAlto: 7.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
ProductoSignal-Server
Afectadov20261007.0.0 (a15d5cd) Dropwizard 5.0.2. Ejemplo en el árbol / adminConnectors omitido.
Autenticaciónninguna en el conector de administración
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1

Qué puede hacer un atacante

Cualquiera que pueda abrir TCP al puerto de administración (por defecto 0.0.0.0:8081, sin configuración adicional, sin cabecera Authorization) obtiene todos los servlets de administración estándar de Dropwizard 5 más la tarea extra de Signal. Ese es el conjunto completo de privilegios. Nada en esta lista es RCE, ATO ni una lectura de cuerpos de mensajes sellados.

Reconocimiento y datos del proceso (GET, sin autenticación)

MétodoRutaPrivilegio
GET/pingConfirmar que el listener de administración está activo. El cuerpo es pong.
GET/metricsLeer el registro completo de Codahale como JSON: heap y non-heap de la JVM, conteos de GC, conteos de hilos, medidores del conector Jetty, gauges 4xx/5xx, timers. Úsalo para hacer fingerprint del proceso, estimar la carga y observar el efecto de tareas posteriores.
GET/threadsVolcado completo de hilos de la JVM: nombre de cada hilo, id, estado y marcos de pila. En el laboratorio esto mostró dw-admin-* más marcos nio de java.base. En un nodo Signal en producción el mismo volcado puede incluir nombres de clases, nombres de loggers y cualquier cadena que esté en una pila (rutas de archivos, hostnames, toString de argumentos en vuelo). No es un volcado de heap y no es un volcado de cola de mensajes.
GET/healthcheckEjecutar las comprobaciones de salud registradas. Este árbol nunca registra extras, así que el cuerpo es la comprobación de deadlock por defecto (deadlocks.healthy). Un 200 frente a un 500 te dice si la JVM cree que está en deadlock.
GET/tasksListar las tareas de administración. En este pin: gc, log-level, set-request-logging-enabled.

Integridad del logging y del GC (POST, sin autenticación)

MétodoRutaPrivilegio
POST/tasks/log-level?logger=<name>&level=<LEVEL>Establecer cualquier logger de Logback a TRACE, DEBUG, INFO, WARN, ERROR u OFF. TRACE puede hacer que los loggers de la aplicación impriman más (incluidos valores que un desarrollador registró). OFF sobre un logger de seguridad o de acceso lo deja a oscuras. El atacante no recibe el flujo de logs por este HTTP. Cambian lo que el proceso escribe en disco o stdout. Oráculo del laboratorio: nombre de logger SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS a TRACE.
POST/tasks/gcLlamar a System.gc(). La respuesta es Running GC... / Done!. Eso es un empujón stop-the-world, no la muerte del proceso.
POST/tasks/set-request-logging-enabled?enabled=trueTarea exclusiva de Signal registrada en WhisperServerService.run. Habilita el filtro de log de acceso de peticiones (RequestLogManager). Después de eso, el HTTP al conector de aplicación puede escribir método, URI y cabeceras (incluida Authorization Basic) en el log de acceso en disco. El cliente de administración no recibe esas líneas de vuelta. En los workers message-persister-service / APN / idle-job el puerto de aplicación no tiene recursos Jersey de Signal, así que esta tarea importa en server. enabled=false la vuelve a desactivar.

Qué no concede este residuo

  • Ni shell, ni ProcessBuilder, ni Runtime.exec.
  • Ni servlet de volcado de heap. GET /heapdump es 404.
  • Ni lectura de sobres sellados, prekeys, secretos de SVR o filas de Dynamo/FDB a través de la administración.
  • Ni creación/eliminación de cuentas, vinculación de dispositivos ni omisión del bloqueo de registro.
  • Ni cambio de sample.yml ni de las direcciones de bind.
  • Habilitar el logging de peticiones no es por sí mismo robo de credenciales. El robo requiere una lectura posterior de esos archivos de log (disco, log shipper, logger TRACE).

Un contenedor hermano en la misma red Docker alcanzó http://vuln:8081/ping (200 pong) y no pudo alcanzar http://patched:8081/ping cuando bindHost era 127.0.0.1. Esa es la mitad Remota.

Cómo lo encontré

Fijé signalapp/Signal-Server v20261007.0.0. Dieciocho búsquedas en el código fuente. Chat, claves, mensajes, copias de seguridad, donaciones, llamadas, MFA, el ómnibus gRPC y el HTTP saliente volvieron vacíos en Critical/High. La búsqueda de workers/administración no. Dropwizard 5.0.2 HttpConnectorFactory.admin() sigue usando el puerto 8081 y un bind host nulo. Signal nunca establece adminConnectors. La administración por defecto de Caddy es localhost. Esta no.

Camino equivocado: intentar arrancar el Signal-Server completo. sample.yml pasa check y aún necesita FoundationDB, Dynamo, Redis y un paquete de secretos para run. El residuo es el conector del framework que ServerCommand inicia antes de todo eso. El laboratorio es Dropwizard 5.0.2 con el mismo YAML con server: vacío y el nombre de la tarea extra de Signal.

Laboratorio

cd lab
./run.sh

Loopback 127.0.0.1:19010. Proyecto de Compose signal-server-dropwizard-admin. Witness SIGNAL-SERVER-DROPWIZARD-ADMIN-WITNESS. El YAML del gadget no tiene bloque server:. El YAML negativo establece bindHost: 127.0.0.1. Última línea:

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

Solución

Descargar herramienta