CVE-2025-30215
NATS-Server Fails to Authorize Certain Jetstream Admin APIs
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.6
NATS-Server Fails to Authorize Certain Jetstream Admin APIs
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
CVE-2025-30215- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Weakness
- CWE-306, CWE-287
- Updated
- 2026-11-02
EUVDEUVD-2025-11085
9.6
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
EUVD-2025-11085- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-fhg8-qxh5-7q3w
9.6
NATS Server may fail to authorize certain Jetstream admin APIs
Advisory
The management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets.
Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents.
Affected versions
NATS Server:
- Version 2 from v2.2.0 onwards, prior to v2.11.1 or v2.10.27
Original Report
(Lightly edited to confirm some supposition and in the summary to use past tense)
Summary
nats-server did not include authorization checks on 4 separate admin-level JetStream APIs: account purge, server remove, account stream move, and account stream cancel-move.
In all cases, APIs are not properly restricted to system-account users. Instead, any authorized user can execute the APIs, including across account boundaries, as long as the current user merely has permission to publish on $JS.>.
Only the first seems to be of highest severity. All are included in this single report as they seem likely to have the same underlying root cause.
Reproduction of the ACCOUNT.PURGE case is below. The others are like it.
Details & Impact
Issue 1: $JS.API.ACCOUNT.PURGE.*
Any user may perform an account purge of any other account (including their own).
Risk: total destruction of Jetstream configuration and data.
Issue 2: $JS.API.SERVER.REMOVE
Any user may remove servers from Jetstream clusters.
Risk: Loss of data redundancy, reduction of service quality.
Issue 3: $JS.API.ACCOUNT.STREAM.MOVE.*.* and CANCEL_MOVE
Any user may cause streams to be moved between servers.
Risk: loss of control of data provenance, reduced service quality during move, enumeration of account and/or stream names.
Similarly for $JS.API.ACCOUNT.STREAM.CANCEL_MOVE.*.*
Mitigations
It appears that users without permission to publish on $JS.API.ACCOUNT.> or $JS.API.SERVER.> are unable to execute the above APIs.
Unfortunately, in many configurations, an 'admin' user for a single account will be given permissions for $JS.> (or simply >), which allows the improper access to the system APIs above.
Scope of impact
Issues 1 and 3 both cross boundaries between accounts, violating promised account isolation. All 3 allow system level access to non-system account users.
While I cannot speak to what authz configurations are actually found in the wild, per the discussion in Mitigations above, it seems likely that at least some configurations are vulnerable.
Additional notes
It appears that $JS.API.META.LEADER.STEPDOWN does properly restrict to system account users. As such, this may be a pattern for how to properly authorize these other APIs.
PoC
Environment
Tested with: nats-server 2.10.26 (installed via homebrew) nats cli 0.1.6 (installed via homebrew) macOS 13.7.4
Reproduction steps
$ nats-server --version
nats-server: v2.10.26
$ nats --version
0.1.6
$ cat nats-server.conf
listen: '0.0.0.0:4233'
jetstream: {
store_dir: './tmp'
}
accounts: {
'$SYS': {
users: [{user: 'sys', password: 'sys'}]
},
'TEST': {
jetstream: true,
users: [{user: 'a', password: 'a'}]
},
'TEST2': {
jetstream: true,
users: [{user: 'b', password: 'b'}]
}
}
$ nats-server -c ./nats-server.conf
...
[90608] 2025/03/02 11:43:18.494663 [INF] Using configuration file: ./nats-server.conf
...
[90608] 2025/03/02 11:43:18.496395 [INF] Listening for client connections on 0.0.0.0:4233
...
# Authentication is effectively enabled by the server:
$ nats -s nats://localhost:4233 account info
nats: error: setup failed: nats: Authorization Violation
$ nats -s nats://localhost:4233 account info --user sys…
- Record
GHSA-fhg8-qxh5-7q3w- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Weakness
- CWE-285, CWE-287
- Updated
- 2026-11-02
NVD
9.6
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
CVE-2025-30215- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Weakness
- CWE-287, CWE-306
- Updated
- 2026-11-02
OSVALPINE-CVE-2025-30215
9.6
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
ALPINE-CVE-2025-30215- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Updated
- 2026-11-03
OSV
9.6
NATS-Server Fails to Authorize Certain Jetstream Admin APIs
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
CVE-2025-30215- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Weakness
- CWE-287, CWE-306
- Updated
- 2026-11-02
Show 9 moreShow less
OSVDEBIAN-CVE-2025-30215
9.6
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
DEBIAN-CVE-2025-30215- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Updated
- 2026-11-02
OSVGHSA-fhg8-qxh5-7q3w
9.6
NATS Server may fail to authorize certain Jetstream admin APIs
Advisory
The management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets.
Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents.
Affected versions
NATS Server:
- Version 2 from v2.2.0 onwards, prior to v2.11.1 or v2.10.27
Original Report
(Lightly edited to confirm some supposition and in the summary to use past tense)
Summary
nats-server did not include authorization checks on 4 separate admin-level JetStream APIs: account purge, server remove, account stream move, and account stream cancel-move.
In all cases, APIs are not properly restricted to system-account users. Instead, any authorized user can execute the APIs, including across account boundaries, as long as the current user merely has permission to publish on $JS.>.
Only the first seems to be of highest severity. All are included in this single report as they seem likely to have the same underlying root cause.
Reproduction of the ACCOUNT.PURGE case is below. The others are like it.
Details & Impact
Issue 1: $JS.API.ACCOUNT.PURGE.*
Any user may perform an account purge of any other account (including their own).
Risk: total destruction of Jetstream configuration and data.
Issue 2: $JS.API.SERVER.REMOVE
Any user may remove servers from Jetstream clusters.
Risk: Loss of data redundancy, reduction of service quality.
Issue 3: $JS.API.ACCOUNT.STREAM.MOVE.*.* and CANCEL_MOVE
Any user may cause streams to be moved between servers.
Risk: loss of control of data provenance, reduced service quality during move, enumeration of account and/or stream names.
Similarly for $JS.API.ACCOUNT.STREAM.CANCEL_MOVE.*.*
Mitigations
It appears that users without permission to publish on $JS.API.ACCOUNT.> or $JS.API.SERVER.> are unable to execute the above APIs.
Unfortunately, in many configurations, an 'admin' user for a single account will be given permissions for $JS.> (or simply >), which allows the improper access to the system APIs above.
Scope of impact
Issues 1 and 3 both cross boundaries between accounts, violating promised account isolation. All 3 allow system level access to non-system account users.
While I cannot speak to what authz configurations are actually found in the wild, per the discussion in Mitigations above, it seems likely that at least some configurations are vulnerable.
Additional notes
It appears that $JS.API.META.LEADER.STEPDOWN does properly restrict to system account users. As such, this may be a pattern for how to properly authorize these other APIs.
PoC
Environment
Tested with: nats-server 2.10.26 (installed via homebrew) nats cli 0.1.6 (installed via homebrew) macOS 13.7.4
Reproduction steps
$ nats-server --version
nats-server: v2.10.26
$ nats --version
0.1.6
$ cat nats-server.conf
listen: '0.0.0.0:4233'
jetstream: {
store_dir: './tmp'
}
accounts: {
'$SYS': {
users: [{user: 'sys', password: 'sys'}]
},
'TEST': {
jetstream: true,
users: [{user: 'a', password: 'a'}]
},
'TEST2': {
jetstream: true,
users: [{user: 'b', password: 'b'}]
}
}
$ nats-server -c ./nats-server.conf
...
[90608] 2025/03/02 11:43:18.494663 [INF] Using configuration file: ./nats-server.conf
...
[90608] 2025/03/02 11:43:18.496395 [INF] Listening for client connections on 0.0.0.0:4233
...
# Authentication is effectively enabled by the server:
$ nats -s nats://localhost:4233 account info
nats: error: setup failed: nats: Authorization Violation
$ nats -s nats://localhost:4233 account info --user sys…
- Record
GHSA-fhg8-qxh5-7q3w- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Weakness
- CWE-285, CWE-287
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2025-30215
9.6
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
UBUNTU-CVE-2025-30215- CVSS 3.1
- 9.6 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:H - Updated
- 2026-11-02
OSVAZL-60399 No score
CVE-2025-30215 affecting package telegraf for versions less than 1.29.4-15
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
AZL-60399- Updated
- 2026-11-02
OSVAZL-60406 No score
CVE-2025-30215 affecting package telegraf for versions less than 1.31.0-9
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
AZL-60406- Updated
- 2026-11-05
OSVBIT-nats-2025-30215 No score
NATS-Server Fails to Authorize Certain Jetstream Admin APIs
NATS-Server is a High-Performance server for NATS.io, the cloud and edge native messaging system. In versions starting from 2.2.0 but prior to 2.10.27 and 2.11.1, the management of JetStream assets happens with messages in the $JS. subject namespace in the system account; this is partially exposed into regular accounts to allow account holders to manage their assets. Some of the JS API requests were missing access controls, allowing any user with JS management permissions in any account to perform certain administrative actions on any JS asset in any other account. At least one of the unprotected APIs allows for data destruction. None of the affected APIs allow disclosing stream contents. This vulnerability is fixed in v2.11.1 or v2.10.27.
- Record
BIT-nats-2025-30215- Updated
- 2026-11-02
OSVGO-2025-3600 No score
Missing ACLs on JavaScript APIs allowing privilege escalation github.com/nats-io/nats-server
Missing
- Record
GO-2025-3600- Updated
- 2026-11-02
OSVMGASA-2026-0232 No score
Updated nats-server packages fix security vulnerabilities
nats-server and its dependencies are updated to fix CVE-2025-30215 Missing access controls for JS API in multi-tenancy
- Record
MGASA-2026-0232- Updated
- 2026-11-02
OSVopenSUSE-SU-2025:15014-1 No score
govulncheck-vulndb-0.0.20250422T152923-1.1 on GA media
These are all security issues fixed in the govulncheck-vulndb-0.0.20250422T152923-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2025:15014-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
github.com/nats-io/nats-server/v2Go |
2.11.0-RC.1 up to 2.11.1 | 2.11.1 |
github.com/nats-io/nats-server/v2Go |
2.2.0 up to 2.10.27 | 2.10.27 |
nats-serverAlpine:v3.21 |
before 2.10.27-r0 | 2.10.27-r0 |
nats-serverAlpine:v3.22 |
before 2.10.27-r0 | 2.10.27-r0 |
nats-serverAlpine:v3.23 |
before 2.10.27-r0 | 2.10.27-r0 |
nats-serverAlpine:v3.24 |
before 2.10.27-r0 | 2.10.27-r0 |
telegrafAzure Linux:2 |
before 1.29.4-15 | 1.29.4-15 |
telegrafAzure Linux:3 |
before 1.31.0-9 | 1.31.0-9 |
natsBitnami |
2.2.0 up to 2.11.1 | 2.11.1 |
nats-serverDebian:12 |
All versions, plus listed versions 2.10.1-12.10.16-12.10.18-12.10.24-12.10.27-1 Show 9 moreShow less2.10.3-12.10.4-12.10.7-12.12.4-12.12.6-12.14.1-12.14.3-12.9.10-12.9.19-1 |
None known |
Show 12 moreShow less
| Package | Affected | Fixed |
|---|---|---|
nats-serverDebian:13 |
before 2.10.27-1 | 2.10.27-1 |
nats-serverDebian:14 |
before 2.10.27-1 | 2.10.27-1 |
github.com/nats-io/nats-server/v2Go |
2.2.0 up to 2.10.27, 2.11.0 up to 2.11.1 | 2.10.272.11.1 |
nats-serverMageia:9 |
before 2.10.27-1.1.mga9 | 2.10.27-1.1.mga9 |
golang-uber-automaxprocsMageia:9 |
before 1.6.0-1.mga9 | 1.6.0-1.mga9 |
golang-github-nats-ioMageia:9 |
before 1.41.1-1.mga9 | 1.41.1-1.mga9 |
golang-github-nats-io-jwtMageia:9 |
before 2.5.2-1.mga9 | 2.5.2-1.mga9 |
golang-github-nats-io-nkeysMageia:9 |
before 0.4.10-1.mga9 | 0.4.10-1.mga9 |
golang-github-prashantv-gostubMageia:9 |
before 1.1.0-1.mga9 | 1.1.0-1.mga9 |
nats-serverUbuntu:24.04:LTS |
All versions, plus listed versions 2.9.19-1build12.10.3-12.10.4-12.10.7-12.10.7-1ubuntu0.12.10.7-1ubuntu0.22.10.7-1ubuntu0.3 |
None known |
nats-serverUbuntu:25.10 |
All versions, plus listed versions 2.10.24-12.10.27-1 |
None known |
govulncheck-vulndbopenSUSE:Tumbleweed |
before 0.0.20250422T152923-1.1 | 0.0.20250422T152923-1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| facts | OSV | |
| affected, aliases, references | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-30215 is a critical vulnerability (CVSS 9.6) in Nats-io Nats-server, published April 15, 2025. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.60%, the 48th percentile. Fixed in github.com/nats-io/nats-server/v2 2.11.1.
References
github.com/nats-io/nats-server/security/advisories/GHSA-fhg8-qxh5-7q3w
advisories.nats.io/CVE/secnote-2025-01.txt
openwall.com/lists/oss-security/2025/04/08/5
nvd.nist.gov/vuln/detail/CVE-2025-30215
osv.dev/vulnerability/GO-2025-3600
github.com/nats-io/nats-server/commit/3e7e4645a24e829a36b4210f2d7c34dea7f7a424
Show 10 moreShow less
github.com/advisories/GHSA-fhg8-qxh5-7q3w
security.alpinelinux.org/vuln/CVE-2025-30215
github.com/CVEProject/cvelistV5/tree/main/cves/2025/30xxx/CVE-2025-30215.json
security-tracker.debian.org/tracker/CVE-2025-30215
github.com/nats-io/nats-server
advisories.mageia.org/MGASA-2026-0232.html
bugs.mageia.org/show_bug.cgi?id=34184
ubuntu.com/security/CVE-2025-30215
cve.org/CVERecord?id=CVE-2025-30215
suse.com/security/cve/CVE-2025-30215
Left out here: the rest of 2 source descriptions. The JSON record has them.