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

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

Abraxas Labs - signal-server-dropwizard-admin

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

signal-server-dropwizard-admin

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

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

Dropwizard 5.0.2 DefaultServerFactory поставляет 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 admin)
ДоступУдалённый (все интерфейсы :8081, без аутентификации)
CWECWE-306, CWE-1188
CVSSHigh: 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. Встроенный sample / отсутствующий 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: heap и non-heap JVM, счётчики GC, количество потоков, метрики коннектора Jetty, датчики 4xx/5xx, таймеры. Используйте это для фингерпринтинга процесса, оценки нагрузки и наблюдения за эффектом последующих задач.
GET/threadsПолный дамп потоков JVM: имя каждого потока, id, состояние и кадры стека. В лаборатории это показало dw-admin-* плюс кадры nio из java.base. На живом узле Signal тот же дамп может содержать имена классов, имена логгеров и любую строку, которая случайно оказалась в стеке (пути к файлам, имена хостов, toString аргументов в полёте). Это не дамп heap и не дамп очереди сообщений.
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Задача только Signal, зарегистрированная в WhisperServerService.run. Включает фильтр журнала доступа к запросам (RequestLogManager). После этого HTTP на прикладной коннектор может записывать метод, URI и заголовки (включая Authorization Basic) в журнал доступа на диске. Клиент администратора не получает эти строки обратно. На воркерах message-persister-service / APN / idle-job у прикладного порта нет ресурсов Signal Jersey, поэтому эта задача важна на server. enabled=false снова отключает её.

Чего эти оставшиеся привилегии не дают

  • Ни shell, ни ProcessBuilder, ни Runtime.exec.
  • Никакого сервлета дампа heap. 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. Gadget 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 остался отключённым.

Контакты

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