Skip to main content

Nezha EUVDEUVD-2026-88023

| CVE-2026-101088 MEDIUM
Time-of-check Time-of-use (TOCTOU) Race Condition (CWE-367)
2026-09-27 VulnCheck GHSA-fqx6-jcw7-6879
6.0
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as member-role owner of an agent
  2. Delivery
    Issue concurrent POST /api/v1/batch-delete/server on own server
  3. Exploit
    Win TOCTOU race against sentinel worker
  4. Execution
    Worker dereferences missing server-list snapshot entry via stale pointer
  5. Impact
    Unrecovered 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

nezha 2.2.11 <2.3.1

Affected Packages

euvd nezha fix: 2.3.1

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

Vendor (VulnCheck) PRIMARY 6.0 MEDIUM
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
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Sep 27, 2026 - 22:01 EUVD

DescriptionCVE.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

EPSS Score
0.2%
Top 93% exploitable
Prevalence
Low
niche self-hosted open-source monitoring tool, no enterprise footprint
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment CIRCL GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Nezha

View all
CVE-2026-101090 CRITICAL POC
9.3 Sep 27

Host header injection in Nezha 2.2.3's OAuth2 redirect endpoint (/api/v1/oauth2/{provider}) allows an unauthenticated re

CVE-2026-53519 CRITICAL POC
9.1 Jun 12

Unauthenticated path traversal in Nezha Monitoring (nezhahq/nezha) before 2.0.13 allows remote attackers to read arbitra

CVE-2026-53523 MEDIUM POC
6.8 Jun 12

Host header injection in Nezha Monitoring versions 1.0.0 through 2.2.0 allows unauthenticated remote attackers to redire

CVE-2026-53522 MEDIUM POC
6.5 Jun 12

Unbounded WebSocket stream allocation in Nezha Monitoring versions 1.0.0 through 2.1.x allows any authenticated dashboar

CVE-2026-53520 MEDIUM POC
6.5 Jun 12

Nezha Monitoring versions 2.0.14 through 2.1.0 (exclusive) allows any authenticated user to exploit the NAT-based Host c

CVE-2026-62283 CRITICAL
9.9 Aug 21

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

CVE-2026-111384 HIGH
7.1 Oct 16

Nezha monitoring dashboards running versions 1.0.0 through 2.3.14 can be knocked offline by an authenticated user who ho

CVE-2026-111383 HIGH
7.1 Oct 16

Resource exhaustion in Nezha 2.0.13 through 2.3.14 allows an authenticated user to open unbounded concurrent connections

CVE-2026-111387 HIGH
7.1 Oct 16

Cleartext third-party credentials are exposed to any authenticated principal holding DDNS read access in Nezha versions

CVE-2026-105113 HIGH
7.1 Oct 03

Permanent deadlock of the alerting subsystem in Nezha Dashboard 1.8.0 through 2.3.12 allows any authenticated non-admin

CVE-2026-101086 HIGH
7.1 Sep 27

Authenticated privilege escalation in Nezha Dashboard before 2.3.5 lets any account holding the nezha:service:write scop

CVE-2026-101085 HIGH
7.1 Sep 27

Denial of service in the Nezha monitoring dashboard before 2.3.8 lets any authenticated non-administrator account crash

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy