Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
signal-server-dropwizard-admin — Signal-Server v20261007.0.0 - Высокий - Удалённый - Остаточные привилегии - unauth Dropwizard admin :8081 | Kitploit
Инструменты/GitHubGitHub/abraxas/signal-server-dropwizard-admin
Оборонительные ИнструментыРазведкаАнализ уязвимостейАудит конфигурацииСбор информацииВеб-безопасностьТестирование на ПроникновениеНеправильная Конфигурация

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
GitHub
abraxas/signal-server-dropwizard-admin

signal-server-dropwizard-admin

Signal-Server v20261007.0.0 - Высокий - Удалённый - Остаточные привилегии - unauth Dropwizard admin :8081

Репозиторий
7249 дней назадЕщё не проверено
Поделиться

Abraxas Labs - signal-server-dropwizard-admin

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

Разбор: https://abraxaslabs.tech/research/signal-server-dropwizard-admin

signal-server-dropwizard-admin

Класс: Остаточные привилегии Доступ: Удалённый

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

DefaultServerFactory из Dropwizard 5.0.2 поставляет HTTP-коннектор администратора на порту 8081 с незаданным bindHost (все интерфейсы) и без аутентификации администратора. Signal-Server это никогда не переопределяет. В service/config/sample.yml нет блока server:. YAML, в котором перечислены только TLS applicationConnectors, всё равно наследует открытый 8081 на 0.0.0.0. server вместе с тремя воркерами ServerCommand запускает его. ExternalRequestFilter присутствует только в контексте приложения.

Неаутентифицированный HTTP к :8081 — это операционная плоскость администрирования. Не RCE. Не захват аккаунта. Не чтение запечатанных сообщений.

IDCVE пока нет
КлассОстаточные привилегии (неаутентифицированный администратор Dropwizard)
ДоступУдалённый (все интерфейсы :8081, без аутентификации)
CWECWE-306, CWE-1188
CVSSВысокий: 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

Что может сделать атакующий

Любой, кто может открыть TCP-соединение к порту администратора (по умолчанию 0.0.0.0:8081, без дополнительной конфигурации, без заголовка Authorization), получает все стандартные сервлеты администратора Dropwizard 5 плюс дополнительную задачу Signal. Это полный набор привилегий. Ничего в этом списке не является RCE, ATO или чтением тел запечатанных сообщений.

Разведка и данные процесса (GET, без аутентификации)

МетодПутьПривилегия
GET/pingПодтвердить, что слушатель администратора работает. Тело — pong.
GET/metricsПрочитать весь реестр Codahale в формате JSON: куча и не-куча JVM, счётчики GC, количество потоков, метры коннектора Jetty, датчики 4xx/5xx, таймеры. Используйте это для фингерпринтинга процесса, оценки нагрузки и наблюдения за эффектом последующих задач.
GET/threadsПолный дамп потоков JVM: имя, id, состояние и кадры стека каждого потока. В лаборатории это показало dw-admin-* плюс кадры nio из java.base. На живом узле Signal тот же дамп может содержать имена классов, имена логгеров и любую строку, случайно оказавшуюся в стеке (пути к файлам, имена хостов, toString аргументов в обработке). Это не дамп кучи и не дамп очереди сообщений.
GET/healthcheckЗапустить зарегистрированные проверки работоспособности. Это дерево никогда не регистрирует дополнительные проверки, поэтому тело — проверка взаимоблокировок по умолчанию (deadlocks.healthy). Ответ 200 или 500 говорит о том, считает ли JVM, что она во взаимоблокировке.
GET/tasksСписок задач администратора. На этой фиксации: gc, log-level, set-request-logging-enabled.

Целостность логирования и GC (POST, без аутентификации)

МетодПутьПривилегия
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. Включает фильтр access-log запросов (RequestLogManager). После этого HTTP к коннектору приложения может записывать метод, URI и заголовки (включая Authorization Basic) в access-log на диске. Админ-клиент не получает эти строки обратно. На message-persister-service / APN / idle-job воркерах у порта приложения нет ресурсов Signal Jersey, поэтому эта задача важна на server. enabled=false снова отключает её.

Чего этот остаток не даёт

  • Ни shell, ни ProcessBuilder, ни Runtime.exec.
  • Никакого сервлета для дампа кучи. GET /heapdump возвращает 404.
  • Никакого чтения запечатанных конвертов, prekeys, секретов SVR или строк Dynamo/FDB через админку.
  • Никакого создания/удаления аккаунта, привязки устройства или пропуска блокировки регистрации.
  • Никаких изменений в sample.yml или в адресах привязки.
  • Включение логирования запросов само по себе не является кражей учётных данных. Для кражи нужно последующее чтение этих файлов логов (диск, log shipper, логгер TRACE).

Соседний контейнер в той же сети Docker достучался до http://vuln:8081/ping (200 pong) и не смог достучаться до http://patched:8081/ping, когда bindHost был 127.0.0.1. Это и есть удалённая половина.

Как я это нашёл

Я зафиксировал signalapp/Signal-Server v20261007.0.0. Восемнадцать поисков по исходникам. Чат, ключи, сообщения, резервные копии, пожертвования, звонки, MFA, gRPC-омнибус и исходящий HTTP вернулись пустыми на уровне Critical/High. Поиск по воркерам/админке — нет. Dropwizard 5.0.2 HttpConnectorFactory.admin() по-прежнему использует порт 8081 и null bind host. Signal никогда не задаёт adminConnectors. Админ Caddy по умолчанию — localhost. Этот — нет.

Неверный поворот: попытка загрузить полный Signal-Server. sample.yml проходит check и всё равно требует FoundationDB, Dynamo, Redis и пакет секретов для run. Остаток — это коннектор фреймворка, который ServerCommand запускает до всего этого. Лаборатория — Dropwizard 5.0.2 с тем же пустым YAML server: и дополнительным именем задачи Signal.

Лаборатория

cd lab
./run.sh

Loopback 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

Исправление

Скачать инструмент