Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as member-role owner of an agent
-
DeliveryIssue concurrent POST /api/v1/batch-delete/server on own server
-
ExploitWin TOCTOU race against sentinel worker
-
ExecutionWorker dereferences missing server-list snapshot entry via stale pointer
-
ImpactUnrecovered panic crashes entire instance
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture TOCTOU prevention
|
| Exploitation Conditions | Requires an authenticated account with the member role that OWNS at least one monitored agent/server (PR:L) - not achievable by unauthenticated or non-owning users. Exploitation depends on winning a narrow TOCTOU race: the attacker must issue a concurrent server-delete via POST /api/v1/batch-delete/server for their own server exactly during the sentinel worker's processing window (hence AC:H/AT:P), which may require repeated attempts. Affected only in Nezha versions >= 2.2.11 and < 2.3.1; the amplifying condition is the absence of any recover()/gRPC recovery interceptor, which turns a localized nil dereference into a full-instance crash. No user interaction from a victim is required. |
| Impact | This is a moderate-severity, availability-only denial-of-service issue. The vendor/VulnCheck CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H, score 6.0) is internally consistent with the description: network-reachable but requiring an authenticated member-role account, a race-condition attack (AC:H) with a specific timing precondition (AT:P), and impact limited strictly to availability (VA:H; no confidentiality or integrity impact). CWE-367 (TOCTOU race) matches the described concurrent-delete window. No EPSS score, no CISA KEV listing, and no public POC were provided, so there is no signal of active or automatable exploitation - this is a real but self-inflicted-scope reliability bug rather than an urgent priority. The one aggravating factor is blast radius: a single crafted delete crashes the ENTIRE instance because there is no recover()/recovery interceptor, so a low-privileged tenant can take down monitoring for all users. Overall this is a legitimate hardening priority for multi-tenant Nezha operators but not a widespread-exploitation emergency; the high attack complexity (winning a concurrency race) further limits reliability of exploitation. |
| Exploit ScenarioDerived | An authenticated user with the member role who owns at least one monitored agent issues a POST /api/v1/batch-delete/server for their own server precisely while a service sentinel worker is processing that server, winning the race window. The worker then dereferences a now-missing entry in the server-list snapshot using a stale reporter pointer, and because no recover() or gRPC recovery interceptor exists, the unrecovered panic crashes the whole Nezha instance and downs monitoring for every tenant. No public exploit code was identified at time of analysis, and the race (AC:H) may require multiple attempts to trigger. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 27, 2026
Denial of service in Nezha, the server and website monitoring tool, affects versions 2.2.11 through 2.3.0, where an authenticated user holding the member role and owning at least one agent can crash the entire instance. The attacker issues a concurrent server-delete request (POST /api/v1/batch-delete/server) against their own server to win a narrow TOCTOU race inside the sentinel worker, which then dereferences a missing entry in its server-list snapshot; because the sentinel workers and the gRPC server lack any recover()/recovery interceptor, the resulting panic is unrecovered and brings down the whole process. This is an availability-only flaw (no confidentiality or integrity impact) rated 6.0 under CVSS 4.0 and 5.9 (AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H) in our independent assessment, with no public exploit code identified at time of analysis and a fix available in 2.3.1.
RemediationAI
Upgrade Nezha to version 2.3.1, which is the vendor-released fix for this issue; see the GitHub advisory GHSA-jx78-55p5-rwv5 and the VulnCheck advisory for confirmation. Note that the earlier patch associated with GHSA-qjpp-gffx-2wm9 is insufficient because it leaves the stale reporter pointer and ServerShared race intact, so any deployment on 2.2.11 through 2.3.0 must be treated as vulnerable even if the prior advisory appears addressed. Until upgrading is possible, compensating controls should target the prerequisite: the attacker must be an authenticated member-role user who owns an agent and must invoke POST /api/v1/batch-delete/server. Restrict the member role from being able to own agents, or gate server self-deletion behind an administrative role, accepting that this reduces the self-service functionality members rely on; alternatively, front the Nezha API with a reverse proxy ACL that blocks POST /api/v1/batch-delete/server for member-role credentials, which is effective but must be maintained as a separate policy layer and can break legitimate member workflows. Because exploitation depends on winning a narrow TOCTOU window and may need repeated attempts, rate-limiting the delete endpoint limits the attacker's number of race attempts at the cost of added latency for legitimate deletes. As a detection and resilience measure, monitor Nezha process restarts and panic output from sentinel workers and the gRPC server, and run the instance under a supervisor that restarts it automatically, understanding that this only shortens the outage rather than preventing it. No vendor-released workaround that fully eliminates the race was provided in the available input data.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is a time-of-check-time-of-use (TOCTOU) race condition (CWE-367) in the service sentinel worker at service/singleton/servicesentinel.go. The 2026-07-21 patch that was meant to address an earlier nil dereference DoS (GHSA-qjpp-gffx-2wm9) only partially corrected the problem: it re-validated the service lifecycle under serviceResponseDataStoreLock but continued to reuse an already-captured, now-stale reporter pointer and never re-validated the server object. Critically, that lock does not guard ServerShared, so a concurrent server deletion can still race against the worker's read of the server list. When the delete wins the race window, the worker dereferences a missing entry and panics. The design compounds the fault because neither the sentinel worker goroutines nor the gRPC server install any recover()/recovery interceptor, so a localized nil pointer dereference escalates into an unhandled panic that terminates the entire Nezha instance rather than a single worker. The issue is tracked against the NezhaHQ Nezha project (CPE cpe:2.3:a:nezhahq:nezha:*:*:*:*:*:*:*:*) and classified under tags Denial Of Service, Nezha, NezhaHQ.
Know when Nezha gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Network-reachable API but requires an authenticated member owning a server (PR:L) and winning a timing race (AC:H); impact is a full-instance crash so A:H with no C/I impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
1DescriptionCVE.org
Nezha is a server and website monitoring tool. In versions >= 2.2.11 and < 2.3.1, the service sentinel worker (service/singleton/servicesentinel.go) contains an incomplete fix for a previously reported nil dereference denial of service (GHSA-qjpp-gffx-2wm9). The 2026-07-21 fix re-validated the service lifecycle under serviceResponseDataStoreLock but reused an already-captured, now stale reporter pointer and never re-validated the server, and that lock does not guard ServerShared. An authenticated user with the member role who owns an agent can issue a concurrent server delete (POST /api/v1/batch-delete/server) for their own server to win the race window, causing the worker to dereference a missing entry in the server list snapshot. Because the sentinel workers and the gRPC server have no recover()/recovery interceptor, the resulting panic is unrecovered and crashes the entire instance. This is fixed in version 2.3.1.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Host header injection in Nezha 2.2.3's OAuth2 redirect endpoint (/api/v1/oauth2/{provider}) allows an unauthenticated re
Unauthenticated path traversal in Nezha Monitoring (nezhahq/nezha) before 2.0.13 allows remote attackers to read arbitra
Host header injection in Nezha Monitoring versions 1.0.0 through 2.2.0 allows unauthenticated remote attackers to redire
Unbounded WebSocket stream allocation in Nezha Monitoring versions 1.0.0 through 2.1.x allows any authenticated dashboar
Nezha Monitoring versions 2.0.14 through 2.1.0 (exclusive) allows any authenticated user to exploit the NAT-based Host c
Cross-tenant session hijacking in Nezha Monitoring (v1.14.13-1.14.14 and v2.0.0-2.0.9) lets any authenticated low-privil
Nezha monitoring dashboards running versions 1.0.0 through 2.3.14 can be knocked offline by an authenticated user who ho
Resource exhaustion in Nezha 2.0.13 through 2.3.14 allows an authenticated user to open unbounded concurrent connections
Cleartext third-party credentials are exposed to any authenticated principal holding DDNS read access in Nezha versions
Permanent deadlock of the alerting subsystem in Nezha Dashboard 1.8.0 through 2.3.12 allows any authenticated non-admin
Authenticated privilege escalation in Nezha Dashboard before 2.3.5 lets any account holding the nezha:service:write scop
Denial of service in the Nezha monitoring dashboard before 2.3.8 lets any authenticated non-administrator account crash
EUVD-2026-88023
GHSA-fqx6-jcw7-6879
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB