Security
- SSRF in alert/Sigma webhook delivery via the legacy delivery path (authenticated) (GHSA-7v53-pw6r-99vj, CWE-918): the 0.9.6 SSRF hardening added the centralized
utils/ssrf-guard.tsguard and wired it into the HTTP/TCP monitors and theWebhookProvider, but the actual alert/Sigma webhook delivery path was left on the old inline filter.sendWebhookNotificationinqueue/jobs/alert-notification.ts(reached by thealert-notificationsBullMQ worker for threshold, rate-of-change and Sigma-rule alerts) still ran a barefetch(webhook_url, …)guarded only by a string-basedisPrivateIP(). That check was bypassable: any non-dotted-quad hostname returnedfalse(no DNS resolution), so a domain whose A record points at127.0.0.1/169.254.169.254/ an internal host passed the filter and the resolved internal address was then connected; the barefetchused the defaultredirect: 'follow', so a public host that302s to an internal URL was followed straight there; and CGNAT (100.64.0.0/10), IPv6, IPv4-mapped IPv6,0.0.0.0/8and198.18.0.0/15were not covered. An authenticated org owner/admin who can create a webhook notification channel could therefore use the backend as a blind SSRF probe against internal services and cloud metadata, with a partial read-back oracle since a non-2xx internal response body was spliced into the alert-history error message. The guarded "Test" button already blocked the same URLs, confirming this as an incomplete-fix sibling-gap. Fix:sendWebhookNotificationnow routes delivery throughsafeFetch(url, init, { allowPrivate: config.MONITOR_ALLOW_PRIVATE_TARGETS }), exactly asWebhookProviderdoes (DNS resolution + per-redirect-hop revalidation + full IPv4/IPv6 private/reserved range coverage), mappingSsrfBlockedErrorto the existing "private/internal addresses are not allowed" error. The inlineisPrivateIP/BLOCKED_HOSTSfilter and the barefetchare removed, and blocked targets are now rejected before the response body is read (closing the read-back oracle). TheMONITOR_ALLOW_PRIVATE_TARGETSopt-in still lets self-hosted deployments target internal endpoints. Reported by tonghuaroot
Full Changelog: v0.9.6...v0.9.7