NATS
v2.12.14Networking & MessagingNATS v2.12.14 is a maintenance release fixing two authentication vulnerabilities (TLS verify_and_map bypass with blank passwords, and no_auth_user with auth callouts skipping checks), correcting queue subscription permission enforcement, and addressing dozens of JetStream and MQTT bugs affecting clustering, replication, MQTT QoS, JWT validation, and filestore operations. Performance gains include faster AVL operations and better block cache memory recycling.
securityTLS verify_and_map authentication bypass with blank passwords fixed
Users authenticating via TLS verify_and_map must ensure passwords are set; a blank password now fails authentication. This fix ships in v2.12.14 and applies where TLS verify_and_map is used.
securityno_auth_user with auth callouts no longer skips authentication checks
When no_auth_user is combined with auth callouts, the server previously skipped authentication checks if no CONNECT message arrived; this no longer occurs. The fix ships in v2.12.14 and applies to deployments combining no_auth_user with external auth callouts.
breakingQueue subscription permission enforcement corrected
Several code paths that enforce queue subscription permissions previously treated the entire permission as a subject literal, allowing unintended matches. This is corrected in v2.12.14.
enhancementDisk concurrency semaphore increased; max_concurrent_io option added
The disk concurrency semaphore default is now 4096 slots, raised from the previous CPU-scaled value. This can be tuned via the max_concurrent_io option in the jetstream config block.
Key changes (10)
- TLS verify_and_map authentication bypass with blank passwords fixed
- no_auth_user combined with auth callouts no longer skips authentication checks
- Queue subscription permission enforcement corrected to avoid literal interpretation
- Disk concurrency semaphore raised to 4096; new max_concurrent_io JetStream config option for tuning
- JWT validation crash on whitespace-only permissions fixed
- JetStream and MQTT endpoints now guard against null JSON values, preventing crashes
- healthz no longer reports on expired JWT accounts; varz now reflects JetStream limits after config reload
- MQTT QoS1/QoS2 packet IDs now issued by monotonic counter, preventing reuse; QoS2 messages on resumed sessions retain ID and level
- Numerous JetStream cluster and filestore fixes: Raft election handling, block cache memory efficiency, replicated stream recreation, consumer type updates; plus MQTT QoS downgrade leak plugging
- Go bumped to 1.25.12
A weekly email arrives when a release needs action. Like the security patches and breaking changes in this release.