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.
Nezha before 2.3.1 Denial of Service via Concurrent Server Delete
Problem type
Affected products
nezhahq
< 2.3.1 - AFFECTED
2.3.1 - UNAFFECTED
References
https://github.com/nezhahq/nezha/security/advisories/GHSA-jx78-55p5-rwv5
https://www.vulncheck.com/advisories/nezha-before-2.3.1-denial-of-service-via-concurrent-server-delete
GitHub Security Advisories
GHSA-fqx6-jcw7-6879
Nezha is a server and website monitoring tool. In versions >= 2.2.11 and < 2.3.1, the service...
https://github.com/advisories/GHSA-fqx6-jcw7-6879Nezha 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.
https://github.com/nezhahq/nezha/security/advisories/GHSA-jx78-55p5-rwv5
https://nvd.nist.gov/vuln/detail/CVE-2026-101088
https://www.vulncheck.com/advisories/nezha-before-2.3.1-denial-of-service-via-concurrent-server-delete
https://github.com/advisories/GHSA-fqx6-jcw7-6879
JSON source
https://cveawg.mitre.org/api/cve/CVE-2026-101088Click to expand
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-101088",
"assignerOrgId": "83251b91-4cc7-4094-a5c7-464a1b83ea10",
"assignerShortName": "VulnCheck",
"dateUpdated": "2026-09-27T20:49:59.487Z",
"dateReserved": "2026-09-27T20:29:07.432Z",
"datePublished": "2026-09-27T20:49:59.487Z",
"state": "PUBLISHED"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "83251b91-4cc7-4094-a5c7-464a1b83ea10",
"shortName": "VulnCheck",
"dateUpdated": "2026-09-27T20:49:59.487Z"
},
"datePublic": "2026-08-01T00:00:00.000Z",
"title": "Nezha before 2.3.1 Denial of Service via Concurrent Server Delete",
"descriptions": [
{
"lang": "en",
"value": "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."
}
],
"affected": [
{
"vendor": "nezhahq",
"product": "nezha",
"defaultStatus": "unaffected",
"versions": [
{
"version": "2.2.11",
"status": "affected",
"versionType": "semver",
"lessThan": "2.3.1"
},
{
"version": "2.3.1",
"status": "unaffected",
"versionType": "semver"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"lang": "en",
"description": "Time-of-check Time-of-use (TOCTOU) Race Condition",
"cweId": "CWE-367",
"type": "CWE"
}
]
}
],
"references": [
{
"url": "https://github.com/nezhahq/nezha/security/advisories/GHSA-jx78-55p5-rwv5",
"name": "GitHub Security Advisory (GHSA-jx78-55p5-rwv5)",
"tags": [
"vendor-advisory"
]
},
{
"url": "https://www.vulncheck.com/advisories/nezha-before-2.3.1-denial-of-service-via-concurrent-server-delete",
"name": "VulnCheck Advisory: Nezha before 2.3.1 Denial of Service via Concurrent Server Delete",
"tags": [
"third-party-advisory"
]
}
],
"metrics": [
{
"format": "CVSS"
},
{
"format": "CVSS",
"cvssV3_1": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H",
"attackVector": "NETWORK",
"attackComplexity": "HIGH",
"privilegesRequired": "LOW",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"availabilityImpact": "HIGH",
"baseScore": 5.3,
"baseSeverity": "MEDIUM"
}
}
],
"credits": [
{
"lang": "en",
"value": "arpitjain099",
"type": "reporter"
}
]
}
}
}