Get a Demo

Let's Patch It!

Book a short call with one our specialists, we'll walk you through how Endor Patches work, and ask you a few questions about your environment (like your primary programming languages and repository management). We'll also send you an email right after you fill out the form, feel free to reply with any questions you have in advance!

CVE

GHSA-2hp7-65r3-wv54

NornicDB has Improper Network Binding in its Bolt Server, allowing unauthorized remote access
Back to all
CVE

GHSA-2hp7-65r3-wv54

NornicDB has Improper Network Binding in its Bolt Server, allowing unauthorized remote access

Summary

The --address CLI flag (and NORNICDB_ADDRESS / server.host config key) is plumbed through to the HTTP server correctly but never reaches the Bolt server config. The Bolt listener therefore always binds to the wildcard address (all interfaces), regardless of what the user configures.

On a LAN, this exposes the graph database — with its default admin:password credentials — to any device sharing the network.

Version

  • nornicdb v1.0.39
  • Built from commit afe7c9d on main
  • Platform: macOS (darwin 25.4.0, arm64)

Reproduction

$ nornicdb serve --address 127.0.0.1 --bolt-port 7687 --http-port 7474 ...

Output claims Bolt is on localhost:

Bolt server listening on bolt://localhost:7687

But the actual socket:

$ netstat -an -p tcp | grep 7687
tcp46      0      0  *.7687                 *.*                    LISTEN
$ lsof -iTCP:7687 -sTCP:LISTEN -n -P
nornicdb ... IPv6 ... TCP *:7687 (LISTEN)

HTTP port is correctly bound:

tcp4  127.0.0.1.7474   *.*  LISTEN

Reachable from another host on the LAN:

$ nc -z 192.168.x.y 7687
Connection to 192.168.x.y port 7687 [tcp/*] succeeded!

Setting NORNICDBBOLTADDRESS=127.0.0.1 or server.host: "127.0.0.1" in config.yaml has no effect on the Bolt listener.

Root Cause

In pkg/bolt/server.go:774-776:

func (s *Server) ListenAndServe() error {
    addr := fmt.Sprintf(":%d", s.config.Port)
    listener, err := net.Listen("tcp", addr)
    ...
}

bolt.Config (line 474) has no Host/Address/Addr field — only Port. The CLI flag --address is stored in a local variable in cmd/nornicdb/main.go:80 and used to format user-facing log output (line 637–644), but is never copied into boltConfig at line 600–609 when Bolt is initialized.

Since ListenAndServe calls net.Listen("tcp", ":7687") with an empty host, Go binds the wildcard socket on all interfaces.

Suggested Fix

  1. Add a Host string field to bolt.Config (default "127.0.0.1", matching the CLI flag default).
  2. In cmd/nornicdb/main.go around line 601, wire it through:

   ```go

   boltConfig.Host = address

   boltConfig.Port = boltPort

   ```

  1. In pkg/bolt/server.go:775, use the host:

   ```go

   addr := net.JoinHostPort(s.config.Host, strconv.Itoa(s.config.Port))

   ```

Security Impact

  • Default admin:password credentials + wildcard binding = anyone on the same WiFi can issue arbitrary Cypher queries (read, write, delete nodes) against NornicDB instances running with default setup.
  • Users following the README will reasonably assume --address 127.0.0.1 (the documented default) binds both protocols to localhost.
  • Workaround: host-firewall rules (e.g. macOS pf) blocking non-loopback → 7687. Not discoverable from the docs.

Package Versions Affected

Package Version
patch Availability
No items found.

Automatically patch vulnerabilities without upgrading

Fix Without Upgrading
Detect compatible fix
Apply safe remediation
Fix with a single pull request

CVSS Version

Severity
Base Score
CVSS Version
Score Vector
C
H
U
-
C
H
U
0
-
3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
C
H
U
-

Related Resources

No items found.

References

https://github.com/orneryd/NornicDB/security/advisories/GHSA-2hp7-65r3-wv54, https://github.com/orneryd/NornicDB/commit/adce4f9a9fc7b6aada07c0bfa2d737cd7a6efaca, https://github.com/orneryd/NornicDB, https://github.com/orneryd/NornicDB/releases/tag/v1.0.42-hotfix

Severity

9.8

CVSS Score
0
10

Basic Information

Ecosystem
Base CVSS
9.8
EPSS Probability
0%
EPSS Percentile
0%
Introduced Version
0
Fix Available
1.0.42-hotfix

Fix Critical Vulnerabilities Instantly

Secure your app without upgrading.
Fix Without Upgrading