Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as Novu user
-
DeliverySet chat webhook URL to internal target
-
ExploitTrigger notification event
-
ExecutionWorker POSTs to internal service
-
ImpactInternal service performs attacker-directed action
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated Novu account (PR:L) with the ability to supply a chat webhook URL via subscriber credentials.webhookUrl, channel endpoint.url, event payload.webhookUrl, or event overrides.webhookUrl, and to trigger delivery through one of the affected chat providers (Slack, Discord, Mattermost, Microsoft Teams, Grafana On-Call, Ryver, Rocket.Chat, GetStream, or Zulip) - these paths omit normalizeOutboundHttpUrl, assertSafeOutboundUrl, and the DNS-pinned safeOutboundJsonRequest checks. Exploitation further requires that the Novu worker have network reachability to the intended internal target. Limiting factors: valid authentication is mandatory, the primitive is a POST-only, largely blind SSRF (impact bounded to interactions/actions on the internal service, not arbitrary read or code execution), and it is fixed in v3.18.0. |
| Impact | This is a genuine but moderate-severity SSRF (CWE-918). The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:L/SI:L/SA:L = 5.3) indicates a network-reachable, low-complexity flaw requiring authentication (PR:L), with only LOW impact across confidentiality, integrity, and availability on both the vulnerable and subsequent systems - consistent with a largely blind, POST-only SSRF rather than a full read/RCE primitive. No EPSS score, no CISA KEV listing, and no public POC are present in the provided intelligence, so exploitation status is 'no public exploit identified at time of analysis.' The requirement for a valid authenticated Novu account plus the ability to configure a chat-provider webhook URL meaningfully limits the attacker population, and the impact is bounded to internal POST interactions rather than data exfiltration or code execution. Net assessment: a real, patch-worthy issue for organizations running self-hosted Novu with internal network exposure, but not an emergency - no evidence of widespread or automated exploitation. The signals are internally consistent (no CVSS-vs-description conflict); the main missing signals are EPSS/KEV/POC, whose absence is expected for a freshly-disclosed niche-OSS advisory. |
| Exploit ScenarioDerived | An authenticated Novu user configures a chat channel (e.g., Discord, Slack, Microsoft Teams, or Grafana On-Call provider) with a webhook URL pointing at an internal service such as a cloud metadata endpoint or an internal admin API, then triggers a notification event. The Novu worker issues an attacker-directed POST to that internal destination - bypassing the DNS-pinned safeOutboundJsonRequest protections used by the generic webhook providers - causing interactions or actions on services not meant to be reachable externally. No public exploit code was identified, but the attack is straightforward given the documented unprotected endpoint paths. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 22, 2026
Server-side request forgery in Novu prior to 3.18.0 allows an authenticated user to make the notification worker issue attacker-directed POST requests to internal or otherwise restricted network services by supplying a chat webhook URL through subscriber credentials.webhookUrl, channel endpoint.url, event payload.webhookUrl, or event overrides.webhookUrl. The Slack, Discord, Mattermost, Microsoft Teams, Grafana On-Call, Ryver, Rocket.Chat, GetStream, and Zulip chat providers pass that URL straight into raw HTTP requests in send-message-chat.usecase.ts without the normalizeOutboundHttpUrl, assertSafeOutboundUrl, or DNS-pinned safeOutboundJsonRequest guards that protect Novu's generic webhook providers, resulting in a largely blind, POST-only SSRF whose impact is bounded to interactions or actions offered by the reached internal service (CVSS 5.3; assessed CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N). Exploitation requires a valid authenticated account and worker-level network reachability to the intended target; no public exploit code has been identified at time of analysis and there is no confirmation of active exploitation (CISA KEV). The issue is fixed in version 3.18.0.
RemediationAI
Upgrade to Novu 3.18.0 (vendor-released patch; https://github.com/novuhq/novu/releases/tag/v3.18.0), which routes all affected chat providers through resolveSafeChatWebhookUrl and safeChatWebhookJsonRequest so chat webhook destinations receive the same URL normalization, outbound-address assertion, and DNS-pinned request handling as generic webhooks - the corresponding source fix is PR novuhq/novu#11455 (commit dabfd66457c0b98ad46a8186e69f74f570a990c2), and the advisory is GHSA-pg9q-8v57-hqph. Where immediate upgrade is not possible, apply layered compensating controls: enforce egress network policy on the Novu worker so it can only reach approved external chat endpoints and is denied loopback, RFC1918, link-local (169.254.0.0/16), and cloud metadata addresses (trade-off: this may break legitimate self-hosted or on-premises chat webhooks, which must then be allow-listed explicitly); restrict who may create or modify subscriber credentials and chat channel endpoint URLs, and audit existing stored webhookUrl and endpoint.url values for internal addresses before enabling delivery (trade-off: adds administrative overhead and can surface stale configurations that then fail); and disable unused chat integrations such as Ryver, Rocket.Chat, GetStream, Grafana On-Call, and Zulip so their providers cannot be selected as an SSRF path (trade-off: loss of those notification channels). Because the primitive is POST-only and largely blind, restricting worker egress and limiting privileged configuration rights materially reduces impact even without the patch, but upgrading remains the definitive fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Novu is an open-source notification infrastructure platform exposing an API that dispatches messages across email, SMS, push, and chat channels; the affected packages are tracked as cpe:2.3:a:novuhq:novu and cpe:2.3:a:@novu:api-service. The root cause is CWE-918 (Server-Side Request Forgery): the chat provider implementations resolved the destination from user-influenced fields (subscriber credentials.webhookUrl, channel endpoint.url, event payload.webhookUrl, event overrides.webhookUrl) and handed it to a plain axios instance created inside the provider, so the destination never passed through the shared outbound-URL hardening layer (normalizeOutboundHttpUrl, assertSafeOutboundUrl, and DNS-pinned safeOutboundJsonRequest) used by the generic webhook providers. Because the worker process typically sits inside a trusted network segment, a crafted URL can redirect the outbound POST to loopback, RFC1918, link-local, or cloud metadata-style addresses, and the request body/headers are shaped by the provider's transform output, meaning the attacker can partially influence what the internal service receives. The upstream fix (PR novuhq/novu#11455, commit dabfd66457c0b98ad46a8186e69f74f570a990c2) refactors Discord, GetStream, Grafana On-Call and the other affected chat providers onto new helpers, resolveSafeChatWebhookUrl and safeChatWebhookJsonRequest, replacing the per-provider axios instances so all chat webhooks inherit the same URL validation and DNS pinning as generic webhooks; the accompanying spec changes show responses now read from a normalized response object (for example response.body.id / response.body.timestamp and lowercased x-webhook-id headers) rather than raw axios response.data.
Know when Novu 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:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:L/SI:L/SA:L
Network-reachable, low-complexity SSRF requiring an authenticated user (PR:L); blind POST to internal services yields limited confidentiality and integrity (C:L/I:L) and no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Novu provides an API for sending notifications through multiple channels. Prior to 3.18.0, Novu accepts chat webhook URLs from subscriber credentials.webhookUrl, channel endpoint endpoint.url, event payload.webhookUrl, and event overrides.webhookUrl, then passes the selected endpoint.url through send-message-chat.usecase.ts to raw HTTP requests in the Slack, Discord, Mattermost, Microsoft Teams, Grafana On-Call, Ryver, Rocket.Chat, GetStream, and Zulip providers. An authenticated user can supply an internal or otherwise restricted destination because these paths do not apply normalizeOutboundHttpUrl, assertSafeOutboundUrl, or the DNS-pinned safeOutboundJsonRequest protection used by the generic webhook providers. The Novu worker can consequently issue attacker-directed POST requests to internal network services and cause interactions or actions supported by those services. This issue is fixed in version 3.18.0.
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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
Stored cross-site scripting in Novu's in-app notification inbox (all versions prior to 3.18.0) allows an authenticated o
Cross-environment integration tampering in Novu before 3.18.0 lets an authenticated caller who holds an environment-scop
Novu provides an API for sending notifications through multiple channels. Rated medium severity (CVSS 6.1), this vulnera
EUVD-2026-84536
NVD
CVE.org
EPSS
GitHub
Exploit-DB