GHSA-5fpj-28rv-84r7: SSRF

Published Aug 14, 2026
·
Updated

Summary

Budibase automation steps (outgoing webhook, Zapier, n8n, Slack, Discord, Make.com) make server-side HTTP requests to user-provided URLs using node-fetch directly, completely bypassing the IP blacklist protection that exists in the REST API integration. Additionally, the REST API blacklist itself defaults to empty when BLACKLISTIPS is not configured.

Vulnerable Code

Automation Steps (No Blacklist)

All automation steps use fetch() directly without any IP validation:

packages/server/src/automations/steps/outgoingWebhook.ts line 69: typescript const response = await fetch(url, request) // No blacklist check

packages/server/src/automations/steps/zapier.ts line 34: typescript response = await fetch(url, {method: "post", ...}) // No blacklist check

packages/server/src/automations/steps/n8n.ts line 53: typescript response = await fetch(url, request) // No blacklist check

packages/server/src/automations/steps/slack.ts line 20: typescript response = await fetch(url, {method: "post", ...}) // No blacklist check

packages/server/src/automations/steps/discord.ts line 29: typescript response = await fetch(url, {method: "post", ...}) // No blacklist check

REST API Integration (Empty Default Blacklist)

packages/server/src/integrations/rest.ts line 684: typescript if (await blacklist.isBlacklisted(url)) { throw new Error("Cannot connect to URL.") }

But BLACKLISTIPS env var defaults to undefined, so the blacklist is empty:

packages/backend-core/src/blacklist/blacklist.ts lines 39-45: typescript if (blackListArray?.length === 0) { return false // Always passes when no IPs configured }

Impact

- Automation steps: ANY user can create automations with webhook/Zapier/n8n/Slack/Discord steps pointing to internal IPs. These completely bypass the blacklist module - REST API: Even when BLACKLISTIPS is configured, it only blocks listed IPs. Default deployments have no protection. - Cloud metadata: http://169.254.169.254/latest/meta-data/ accessible via any automation step - Internal services: Access databases, admin panels, Kubernetes API on private IPs

Remediation

1. Apply blacklist checks to ALL outbound HTTP requests, including automation steps 2. Add hardcoded default private IP 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) 3. Use a centralized HTTP client wrapper instead of direct fetch() calls 4. SSRF protection should be on by default, not opt-in via environment variable

Affected Software

1 affected componentFixes available
npm/@budibase/server<3.41.3
3.41.3

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade npm/@budibase/server to a version that resolves this vulnerability.

    Fixed in 3.41.3
  2. Configuration

    Set BLACKLIST_IPS to a default non-empty value when the environment variable is not configured, so the REST API IP blacklist is not empty by default.

    Budibase REST API / blacklist (BLACKLIST_IPS) BLACKLIST_IPS default = non-empty (enable SSRF protection by default)
  3. Configuration

    Add hardcoded default private IP 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) to the blacklist so automation steps cannot reach private/internal targets.

    Budibase SSRF blacklist Default private IP 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
  4. Configuration

    Apply blacklist checks to ALL outbound HTTP requests by replacing direct fetch()/node-fetch calls in automation steps (outgoingWebhook, Zapier, n8n, Slack, Discord, Make.com) with a centralized HTTP client wrapper that enforces blacklist validation.

    Budibase automation outbound HTTP requests (outgoingWebhook/Zapier/n8n/Slack/Discord/Make.com) HTTP client usage = use centralized blacklist-aware HTTP client wrapper for ALL outbound requests
  5. Compensating control

    Block/deny outbound server network access from the Budibase instance to internal/private IP ranges and cloud metadata address (169.254.0.0/16 and 169.254.169.254) at the network layer (firewall/egress rules), so SSRF attempts via automation steps cannot reach internal services even if application-level checks fail.

Event History

Aug 14, 2026
Advisory Published
via GitHub·07:18 PM
Data Sourced
via GitHub·07:18 PM
DescriptionWeaknessAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of GHSA-5fpj-28rv-84r7?

The severity of GHSA-5fpj-28rv-84r7 is rated at 78, indicating a high risk vulnerability.

2

How do I fix GHSA-5fpj-28rv-84r7?

To fix GHSA-5fpj-28rv-84r7, update to Budibase version 3.41.3 or later where this issue has been addressed.

3

What type of vulnerability is GHSA-5fpj-28rv-84r7?

GHSA-5fpj-28rv-84r7 is classified as a Server-Side Request Forgery (SSRF) vulnerability.

4

What impact does GHSA-5fpj-28rv-84r7 have on Budibase?

GHSA-5fpj-28rv-84r7 allows automation steps to make server-side HTTP requests to user-provided URLs, bypassing IP blacklist protections.

5

Who is affected by GHSA-5fpj-28rv-84r7?

All users of Budibase who utilize the automation steps that involve outgoing webhooks may be affected by GHSA-5fpj-28rv-84r7.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203