CVE-2026-47671 Overview
CVE-2026-47671 affects the Nhost CLI, an open source Firebase alternative with GraphQL. Versions prior to 1.46.0 expose a hidden nhost configserver process when developers run nhost dev. The configserver publishes the Mimir GraphQL API on localhost with dummy authorization directives and permissive Cross-Origin Resource Sharing (CORS) headers. Any process that can reach the developer's localhost, including a web page loaded from an arbitrary origin, can query configuration and mutate the local .secrets file. The issue maps to Missing Authentication for Critical Function [CWE-306].
Critical Impact
Attackers can read project admin secrets, JSON Web Token (JWT) signing keys, webhook secrets, Grafana credentials, and custom environment variables from a developer's local Nhost project, and write attacker-controlled secrets back to .secrets.
Affected Products
- Nhost CLI versions prior to 1.46.0
- The hidden nhost configserver invoked by nhost dev
- Local development projects consuming the Mimir GraphQL API
Discovery Timeline
- 2026-07-21 - CVE-2026-47671 published to the National Vulnerability Database (NVD)
- 2026-07-23 - Last updated in NVD database
Technical Details for CVE-2026-47671
Vulnerability Analysis
The Nhost CLI spawns a background configserver process to back the nhost dev local environment. This service exposes a Mimir GraphQL endpoint that returns project configuration and secrets. The endpoint enforces authorization through GraphQL directives that are stubbed with dummy values, and it accepts requests from any origin because of permissive CORS. As a result, any HTTP client that can reach the loopback interface, including a browser tab visiting an attacker-controlled site, can issue GraphQL queries and mutations. The GraphQL schema exposes read access to secrets and mutation access to the on-disk .secrets file.
Root Cause
The root cause is missing authentication on a locally bound network service combined with a permissive CORS policy. The dummy authorization directives never validated caller identity, so the configserver treated cross-origin browser requests and arbitrary local processes as trusted. Because the developer's browser session is the initiator, standard same-origin protections do not apply when the server responds with wildcard CORS headers.
Attack Vector
Exploitation requires that a developer running nhost dev browses to an attacker-controlled page. The page issues fetch requests to the localhost configserver GraphQL endpoint, retrieves secrets, and optionally mutates the .secrets file. No prior authentication or privilege is required, but user interaction is needed to load the malicious origin.
// Patch excerpt: cli/clienv/appid.go
// Introduces a persistent per-project app ID used to bind
// configserver requests to the local project, blocking
// cross-origin and exfiltration access.
package clienv
import (
"errors"
"fmt"
"os"
"path/filepath"
"strings"
"github.com/google/uuid"
)
// GetOrCreateAppID returns the app ID stored at path, creating it
// with a fresh random UUIDv4 if the file does not exist.
func GetOrCreateAppID(path string) (string, error) {
b, err := os.ReadFile(path)
if err == nil {
id := strings.TrimSpace(string(b))
if _, err := uuid.Parse(id); err != nil {
return "", fmt.Errorf("app id file %s is malformed: %w", path, err)
}
return id, nil
}
if !errors.Is(err, os.ErrNotExist) {
return "", fmt.Errorf("failed to read app id file %s: %w", path, err)
}
}
Source: Nhost GitHub commit e407511
Detection Methods for CVE-2026-47671
Indicators of Compromise
- Unexpected modifications to the project .secrets file or new entries not authored by the developer.
- Outbound browser or process connections to the configserver's localhost port during a nhost dev session initiated from unrelated web origins.
- GraphQL query or mutation traffic to the Mimir endpoint containing Origin headers from unknown domains.
Detection Strategies
- Inspect running Nhost CLI versions across developer workstations and flag any release earlier than 1.46.0.
- Monitor loopback HTTP traffic for GraphQL requests to the configserver during nhost dev sessions and correlate with browser activity.
- Enable file integrity monitoring on .secrets and .nhost/ directories in developer project workspaces.
Monitoring Recommendations
- Alert on child processes of nhost that bind unexpected localhost ports or receive requests carrying non-local Origin headers.
- Review browser Content Security Policy (CSP) violation reports for outbound fetch requests targeting localhost from untrusted sites.
- Track version telemetry from developer endpoints to confirm upgrade to the patched CLI.
How to Mitigate CVE-2026-47671
Immediate Actions Required
- Upgrade Nhost CLI to version 1.46.0 or later on all developer workstations.
- Rotate any JWT signing keys, webhook secrets, Grafana credentials, and admin secrets that were present in local projects while running vulnerable versions.
- Audit .secrets files for unexpected entries and revert any unauthorized changes.
Patch Information
The fix ships in Nhost CLI 1.46.0. The patch introduces a per-project app ID stored under .nhost/app_id, hardens the configserver against cross-origin requests, and restricts callers to the local project context. Details are documented in GitHub Security Advisory GHSA-64cj-qvx5-m4f3, the pull request discussion, and the CLI 1.46.0 release notes.
Workarounds
- Stop running nhost dev on hosts where the CLI cannot be upgraded immediately.
- Restrict browser sessions on developer machines to trusted origins while nhost dev is active, avoiding untrusted tabs during development.
- Use host firewall rules to block non-local processes from reaching the configserver port until the patched version is deployed.
# Upgrade Nhost CLI to the patched release
nhost version
curl -L https://raw.githubusercontent.com/nhost/cli/main/get.sh | bash
nhost version # confirm 1.46.0 or later
# Rotate secrets after upgrading
nhost secrets list
nhost secrets update JWT_SECRET "$(openssl rand -hex 32)"
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

