Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
🐹 Go

GHSA-6h3m-36w8-hv68

MEDIUM

GHSA-6h3m-36w8-hv68 is a medium-severity (CVSS 6.5) Path Traversal vulnerability in github.com/nats-io/nats-server/v2. O3 Security confirms whether GHSA-6h3m-36w8-hv68 is actually reachable in your code before you act, and blocks exploitation at runtime until you patch.

Arbitrary file write in nats-server

Also known asBIT-nats-2022-26652CVE-2022-26652GO-2022-0351
Published
Mar 10, 2022
Updated
Jul 8, 2026
Affected
2 pkgs
Patched
2 / 2
Exploits
None indexed

Blast Radius

2 pkgs affected
🐹github.com/nats-io/nats-server/v2🐹github.com/nats-io/nats-streaming-server

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.

Description

(This document is canonically: https://advisories.nats.io/CVE/CVE-2022-26652.txt)

Background

NATS.io is a high performance open source pub-sub distributed communication technology, built for the cloud, on-premise, IoT, and edge computing.

JetStream is the optional RAFT-based resilient persistent feature of NATS.

Problem Description

The JetStream streams can be backed up and restored via NATS. The backup format is a tar archive file. Inadequate checks on the filenames within the archive file permit a so-called "Zip Slip" attack in the stream restore.

NATS nats-server through 2022-03-09 (fixed in release 2.7.4) did not correctly sanitize elements of the archive file, thus a user of NATS could cause the NATS server to write arbitrary content to an attacker-controlled filename.

Affected versions

NATS Server:

  • 2.2.0 up to and including 2.7.3.
    • Introduced with JetStream Restore functionality
  • Fixed with nats-io/nats-server: 2.7.4
  • Docker image: nats https://hub.docker.com/_/nats
  • NB users of OS package files from our releases: a change in goreleaser defaults, discovered late in the release process, moved the install directory from /usr/local/bin to /usr/bin; we are evaluating the correct solution for subsequent releases, but not recutting this release.

NATS Streaming Server

  • 0.15.0 up to and including 0.24.2
  • Fixed with nats-io/nats-streaming-server: 0.24.3
  • Embeds a nats-server, but this server is the old approach which JetStream replaces, so unlikely (but not impossible) to be configured with JS support

Workarounds

  • Disable JetStream for untrusted users.
  • If only one NATS account uses JetStream, such that cross-user attacks are not an issue, and any user in that account with access to the JetStream API is fully trusted anyway, then appropriate sandboxing techniques will prevent exploit.
    • Eg, with systemd, the supplied util/nats-server-hardened.service example configuration demonstrates that NATS runs fine as an unprivileged user under ProtectSystem=strict and PrivateTmp=true restrictions; by only opening a ReadWritePaths hole for the JetStream storage area, the impact of this vulnerability is limited.

Solution

Upgrade the NATS server to at least 2.7.4.

We fully support the util/nats-server-hardened.service configuration for running a NATS server and encourage this approach.

Credits

This issue was reported (on 2022-03-07) to the NATS Maintainers by Yiming Xiang, TIANJI LAB of NSFOCUS.
Thank you / 谢谢你!

Affected Packages

2 total 2 fixed
EcosystemPackageVulnerable rangeFix
🐹Gogithub.com/nats-io/nats-server/v22.2.0&&< 2.7.42.7.4
🐹Gogithub.com/nats-io/nats-streaming-server0.15.0&&< 0.24.30.24.3

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/nats-io/nats-server/v2. O3's reachability analysis confirms whether the vulnerable code path is actually invoked in your application, so you act on real exposure instead of every transitive match.

  2. Fix

    Update github.com/nats-io/nats-server/v2 to 2.7.4 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-6h3m-36w8-hv68 is resolved across your whole dependency graph.

  3. Workarounds

    If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.

  4. How O3 protects you

    O3 pinpoints whether GHSA-6h3m-36w8-hv68 is reachable in your code and exactly where to fix it, then blocks exploitation in production at runtime until the patched version is deployed.

Tailored to GHSA-6h3m-36w8-hv68. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.

Frequently Asked Questions

(This document is canonically: <https://advisories.nats.io/CVE/CVE-2022-26652.txt>) ## Background NATS.io is a high performance open source pub-sub distributed communication technology, built for the cloud, on-premise, IoT, and edge computing. JetStream is the optional RAFT-based resilient persistent feature of NATS. ## Problem Description The JetStream streams can be backed up and restored via NATS. The backup format is a tar archive file. Inadequate checks on the filenames within the archive file permit a so-called "Zip Slip" attack in the stream restore. NATS nats-server through 202
O3 Security · Impact-Aware SCA

Is GHSA-6h3m-36w8-hv68 in your dependencies?

O3 detects GHSA-6h3m-36w8-hv68 across Go dependencies and uses function-level reachability to confirm whether the vulnerable code path is actually reachable — not just present. No false positives.