<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Wed, 11 Nov 2026 17:55:24 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-125114</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-125114</link>
      <description>&lt;p&gt;Novu provides an API for sending notifications through multiple channels. Prior to 3.15.0, the conditions filter webhook in libs/application-generic/src/usecases/conditions-filter/conditions-filter.usecase.ts passes the user-configured child.webhookUrl directly to axios.post without calling validateUrlSsrf. Evaluating a workflow condition can therefore make the worker send a POST request to a private or link-local service and return the response data for condition evaluation. The response is stored in execution details and exposed through GET /execution-details, which can disclose credentials from POST-capable metadata services or data from internal services, although metadata endpoints that require GET are not reachable through this path. This issue is fixed in version 3.15.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Novu provides an API for sending notifications through multiple channels. Prior to 3.15.0, the conditions filter webhook in libs/application-generic/src/usecases/conditions-filter/conditions-filter.usecase.ts passes the user-configured child.webhookUrl directly to axios.post without calling validateUrlSsrf. Evaluating a workflow condition can therefore make the worker send a POST request to a private or link-local service and return the response data for condition evaluation. The response is stored in execution details and exposed through GET /execution-details, which can disclose credentials from POST-capable metadata services or data from internal services, although metadata endpoints that require GET are not reachable through this path. This issue is fixed in version 3.15.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-125114</guid>
    </item>
    <item>
      <title>GHSA-4x48-cgf9-q33f — Novu has SSRF via conditions filter webhook bypasses validateUrlSsrf() protection</title>
      <link>https://db.gcve.eu/vuln/ghsa-4x48-cgf9-q33f</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @novu/api&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The conditions filter webhook at `libs/application-generic/src/usecases/conditions-filter/conditions-filter.usecase.ts` line 261 sends POST requests to user-configured URLs using raw `axios.post()` with no SSRF validation. The HTTP Request workflow step in the same codebase correctly uses `validateUrlSsrf()` which blocks private IP ranges. The conditions webhook was not included in this protection.&lt;/p&gt;
&lt;p&gt;## Root Cause&lt;/p&gt;
&lt;p&gt;`conditions-filter.usecase.ts` line 261:
```typescript
return await axios.post(child.webhookUrl, payload, config).then((response) =&amp;gt; {
  return response.data as Record&amp;lt;string, unknown&amp;gt;;
});
```&lt;/p&gt;
&lt;p&gt;No call to `validateUrlSsrf()`. The `webhookUrl` comes from the workflow condition configuration with zero validation.&lt;/p&gt;
&lt;p&gt;## Protected Code (for contrast)&lt;/p&gt;
&lt;p&gt;`execute-http-request-step.usecase.ts` line 130:
```typescript
const ssrfValidationError = await validateUrlSsrf(url);
if (ssrfValidationError) {
  // blocked
}
```&lt;/p&gt;
&lt;p&gt;This function resolves DNS and checks against private ranges (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16). It exists in the codebase but is not applied to the conditions webhook path.&lt;/p&gt;
&lt;p&gt;## Proof of Concept&lt;/p&gt;
&lt;p&gt;1. Create a workflow with a condition step
2. Configure the condition&amp;#39;s webhook URL to `http://169.254.169.254/latest/meta-data/iam/security-credentials/`
3. Trigger the workflow by sending a notification event
4. The worker evaluates the condition and calls `axios.post()` to the metadata endpoint
5. The response data…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @novu/api&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The conditions filter webhook at `libs/application-generic/src/usecases/conditions-filter/conditions-filter.usecase.ts` line 261 sends POST requests to user-configured URLs using raw `axios.post()` with no SSRF validation. The HTTP Request workflow step in the same codebase correctly uses `validateUrlSsrf()` which blocks private IP ranges. The conditions webhook was not included in this protection.&lt;/p&gt;
&lt;p&gt;## Root Cause&lt;/p&gt;
&lt;p&gt;`conditions-filter.usecase.ts` line 261:
```typescript
return await axios.post(child.webhookUrl, payload, config).then((response) =&amp;gt; {
  return response.data as Record&amp;lt;string, unknown&amp;gt;;
});
```&lt;/p&gt;
&lt;p&gt;No call to `validateUrlSsrf()`. The `webhookUrl` comes from the workflow condition configuration with zero validation.&lt;/p&gt;
&lt;p&gt;## Protected Code (for contrast)&lt;/p&gt;
&lt;p&gt;`execute-http-request-step.usecase.ts` line 130:
```typescript
const ssrfValidationError = await validateUrlSsrf(url);
if (ssrfValidationError) {
  // blocked
}
```&lt;/p&gt;
&lt;p&gt;This function resolves DNS and checks against private ranges (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16). It exists in the codebase but is not applied to the conditions webhook path.&lt;/p&gt;
&lt;p&gt;## Proof of Concept&lt;/p&gt;
&lt;p&gt;1. Create a workflow with a condition step
2. Configure the condition&amp;#39;s webhook URL to `http://169.254.169.254/latest/meta-data/iam/security-credentials/`
3. Trigger the workflow by sending a notification event
4. The worker evaluates the condition and calls `axios.post()` to the metadata endpoint
5. The response data…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-4x48-cgf9-q33f</guid>
    </item>
  </channel>
</rss>
