Budibase: SSRF in Automation Steps - Webhook, Zapier, N8N, Slack, Discord Bypass IP Blacklist
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 BLACKLIST_IPS 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:
const response = await fetch(url, request) // No blacklist check
packages/server/src/automations/steps/zapier.ts line 34:
response = await fetch(url, {method: "post", ...}) // No blacklist check
packages/server/src/automations/steps/n8n.ts line 53:
response = await fetch(url, request) // No blacklist check
packages/server/src/automations/steps/slack.ts line 20:
response = await fetch(url, {method: "post", ...}) // No blacklist check
packages/server/src/automations/steps/discord.ts line 29:
response = await fetch(url, {method: "post", ...}) // No blacklist check
REST API Integration (Empty Default Blacklist)
packages/server/src/integrations/rest.ts line 684:
if (await blacklist.isBlacklisted(url)) {
throw new Error("Cannot connect to URL.")
}
But BLACKLIST_IPS env var defaults to undefined, so the blacklist is empty:
packages/backend-core/src/blacklist/blacklist.ts lines 39-45:
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 BLACKLIST_IPS 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
- Apply blacklist checks to ALL outbound HTTP requests, including automation steps
- 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)
- Use a centralized HTTP client wrapper instead of direct
fetch()calls - SSRF protection should be on by default, not opt-in via environment variable
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| npm package | @budibase/server | < 3.41.3 | 3.41.3 |
References
- CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N- Weakness (CWE)
CWE-918- Platform
- npm
- Package
@budibase/server- Disclosed
- 14.08.2026
- Updated
- 11.10.2026 10:22
Sources and licenses
OSV / GitHub Advisory Database - GHSA-5fpj-28rv-84r7 - CC BY 4.0
Vulnerability history: @budibase/server
All published vulnerabilities of this package (npm package), newest first. Shows whether this is a one-off slip or a package that needs watching.
- Total entries
- 42
- First → latest
- 03.2024 08.2026
- Without a fix
- 19
- Exploited in attacks
- 0
Severity breakdown
- Critical 8
- High 27
- Medium 7
Disclosures per year
- 2024: 1
- 2025: 0
- 2026: 41
-
Budibase: SSRF in Automation Steps - Webhook, Zapier, N8N, Slack, Discord Bypass IP Blacklist this entry
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.