GitHub Advisoryadvisory · Go

GHSA-xv8g-fj9h-6gmv Linkdave Missing Authentication on REST and WebSocket endpoints

CRITICAL Published 2026-03-10 Modified 2026-03-10 Official page ↗
Ecosystem
Go
Packages
github.com/shi-gg/linkdave
Severity
Critical
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Weaknesses
CWE-306
Reviewed
2026-03-10

Affected packages

• Go github.com/shi-gg/linkdave: < 0.1.5 → fixed in 0.1.5

Description

The `linkdave` server does not enforce authentication on its REST and WebSocket routes in versions prior to `0.1.5`. Impact An attacker with network access to the server port can: • Connect to the WebSocket endpoint (`/ws`) and receive a valid `session_id` in the `OpReady` response. • Use that session to invoke all REST player controls on any guild corresponding to their session id[1]. • Enumerate server statistics and runtime information via the unauthenticated `/stats` endpoint (still public after the fix). [1] If on `>=0.1.0`, attackers are restricted to creating, controlling and deleting players created within their own session ID. Vulnerable Routes The following routes were entirely unauthenticated in `>= 0.0.1, = 0.1.5`. Server configuration (e.g. `compose.yml`): ```sh environment: LINKDAVE_PASSWORD: ${LINKDAVE_PASSWORD} ``` ```sh echo "LINKDAVE_PASSWORD=$(openssl rand -hex 16)" >> .env ``` To restart the stack, run ```sh docker compose up -d ``` TypeScript client (`0.1.5+`): The client automatically handles authentication. Pass the password when constructing the client: ```ts const linkdave = new LinkDaveClient({ nodes: [ { name: "main", url: process.env.LINKDAVE_URI, password: process.env.LINKDAVE_PASSWORD } ] }); ``` Workarounds If upgrading is not immediately possible, restrict network access to the server's port using a firewall so it is only accessible from trusted internal IP addresses.

Related

Weakness · CWE (1)

  • CWE-306 Missing Authentication for Critical Functionality weakness

References