{"items":[{"id":"NVI-00017676","kind":"vulnerability","title":"Nezha's authenticated DDNS webhook configuration allows blind SSRF from the dashboard host","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-6x26-5727-rrm9","CVE-2026-47268"],"plain_summary":"GitHub lists this reviewed advisory for github.com/nezhahq/nezha, github.com/naiba/nezha. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-4218a3b1f81c8aec1301579e86f24de0"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-06-26T21:28:40.000Z","value":"6.4 medium","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-4218a3b1f81c8aec1301579e86f24de0"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-4218a3b1f81c8aec1301579e86f24de0","url":"https://github.com/advisories/GHSA-6x26-5727-rrm9","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-6x26-5727-rrm9","publisher":"GitHub Advisory Database","observed_at":"2026-11-05T19:05:04.022Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-4218a3b1f81c8aec1301579e86f24de0"],"technology":"github.com/nezhahq/nezha","known_exclusions":[],"conditions_summary":"#### Summary\n\nAn authenticated Nezha dashboard user can create or update a DDNS profile with provider `webhook` and configure an arbitrary `webhook_url`, HTTP method, request body, and headers. When DDNS is triggered for a server that uses that profile, the dashboard process sends the configured request with `utils.HttpClient` without the SSRF protections used by notification webhooks.\n\nThis allows a low-privileged authenticated user who controls an owned server/DDNS profile to make the dashboard host issue HTTP requests to loopback or internal network services. The response body is not returned to the attacker in the confirmed path, so this is a blind SSRF / internal state-changing request primitive.\n\n#### Details\n\nThe DDNS API is available to authenticated users, not only administrators:\n\n- `cmd/dashboard/controller/controller.go:137` registers `GET /api/v1/ddns`.\n- `cmd/dashboard/controller/controller.go:139` registers `POST /api/v1/ddns`.\n- `cmd/dashboard/controller/controller.go:140` registers `PATCH /api/v1/ddns/:id`.\n\nThe create and update handlers copy attacker-controlled webhook fields directly from JSON request bodies into `model.DDNSProfile`:\n\n- `cmd/dashboard/controller","public_affected_ranges":[">= 0.20.0, < 2.0.10"]},{"certainty":"source_listed","source_ids":["sr-4218a3b1f81c8aec1301579e86f24de0"],"technology":"github.com/naiba/nezha","known_exclusions":[],"conditions_summary":"#### Summary\n\nAn authenticated Nezha dashboard user can create or update a DDNS profile with provider `webhook` and configure an arbitrary `webhook_url`, HTTP method, request body, and headers. When DDNS is triggered for a server that uses that profile, the dashboard process sends the configured request with `utils.HttpClient` without the SSRF protections used by notification webhooks.\n\nThis allows a low-privileged authenticated user who controls an owned server/DDNS profile to make the dashboard host issue HTTP requests to loopback or internal network services. The response body is not returned to the attacker in the confirmed path, so this is a blind SSRF / internal state-changing request primitive.\n\n#### Details\n\nThe DDNS API is available to authenticated users, not only administrators:\n\n- `cmd/dashboard/controller/controller.go:137` registers `GET /api/v1/ddns`.\n- `cmd/dashboard/controller/controller.go:139` registers `POST /api/v1/ddns`.\n- `cmd/dashboard/controller/controller.go:140` registers `PATCH /api/v1/ddns/:id`.\n\nThe create and update handlers copy attacker-controlled webhook fields directly from JSON request bodies into `model.DDNSProfile`:\n\n- `cmd/dashboard/controller","public_affected_ranges":[">= 0.20.0"]}],"null_published_at":"2026-11-05T19:10:21.449Z","source_updated_at":"2026-06-26T21:28:40.000Z","source_disclosed_at":"2026-05-29T22:10:12.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-11-05T19:05:04.022Z"}],"next_cursor":null,"snapshot_revision":"42594"}