Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Primary rating from Vendor (https://github.com/nocodb/nocodb) · only source for this CVE.
CVSS VectorVendor: https://github.com/nocodb/nocodb
Lifecycle Timeline
3DescriptionCVE.org
Summary
The request-filtering-agent SSRF protection was non-functional in the four notification webhook plugins (Slack, Discord, Mattermost, Teams) because httpAgent / httpsAgent were passed as part of the request body rather than the axios config. An authenticated user with hook-creation permission could direct outbound POST requests to arbitrary internal hosts.
Details
axios.post(url, data, config) expects connection agents in the third (config) argument. In all four plugins, the agents were placed in the second (data) argument and serialised as JSON body content:
// packages/nocodb/src/plugins/slack/Slack.ts (and Discord / Mattermost / Teams - identical pattern)
return await axios.post(webhook_url, {
text,
httpAgent: useAgent(webhook_url), // wrong position - serialised, not used
httpsAgent: useAgent(webhook_url),
});The webhook flow: an Editor+ user creates a webhook with notification.payload.channels[].webhook_url pointing to an internal host; on trigger, WebhookInvoker.invoke() calls the plugin's sendMessage() which performs the outbound axios.post with no SSRF filtering applied.
This is distinct from GHSA-xr7v-j379-34v9, which covers a blind SSRF via HEAD in the upload-by-URL path.
Impact
- Authenticated user (Editor+) can reach cloud-metadata endpoints (
169.254.169.254) and internal services. - Combined with verbose hook logging (
NC_AUTOMATION_LOG_LEVEL=ALL), response bodies may be exfiltrated.
Credit
This issue was reported by @ik0z.
AnalysisAI
SSRF protection bypass in NocoDB's notification webhook plugins (Slack, Discord, Mattermost, Teams) allows authenticated Editor-level users to issue outbound POST requests to arbitrary internal hosts, including cloud-metadata endpoints. The root cause is a misplaced axios argument: httpAgent/httpsAgent were serialized into the request body instead of being passed as axios connection config, rendering the request-filtering-agent SSRF guard entirely ineffective across all four plugins. No public exploit has been identified at time of analysis, and this vulnerability is not listed in the CISA KEV catalog.
Technical ContextAI
NocoDB (pkg:npm/nocodb) uses the request-filtering-agent npm library to prevent SSRF by supplying custom HTTP/HTTPS agents to axios. The axios API signature axios.post(url, data, config) requires connection agents in the third config argument; however, all four webhook plugin implementations (Slack.ts, Discord, Mattermost, Teams) place httpAgent and httpsAgent inside the second data argument, causing them to be JSON-serialized into the POST body and completely ignored by axios. This is a CWE-918 (Server-Side Request Forgery) root cause: the application accepts a user-controlled URL and issues a server-side HTTP request without effective filtering. The affected package version is nocodb <= 0.301.3 per the GitHub advisory GHSA-2c5x-4jgf-88mj. This is distinct from the related GHSA-xr7v-j379-34v9, which covers a separate blind SSRF in the upload-by-URL path.
RemediationAI
No vendor-released patch has been identified at time of analysis - the GitHub advisory (GHSA-2c5x-4jgf-88mj) lists fixed version as None. Until a patch is released, defenders should apply the following compensating controls: restrict the Editor+ role to only fully trusted users, since hook-creation permission is the required prerequisite; disable webhook notification functionality entirely via NocoDB's plugin settings if outbound webhooks are not operationally required (note: this disables all Slack/Discord/Mattermost/Teams notifications); apply host-level or network firewall rules blocking outbound requests to the cloud-metadata IMDS range (169.254.169.254) from the NocoDB server process - this prevents the highest-impact credential-theft scenario without disabling webhooks, but does not block access to other internal RFC-1918 hosts; and set NC_AUTOMATION_LOG_LEVEL to a value other than ALL to prevent response body logging, which eliminates the exfiltration amplification pathway described in the advisory. Monitor the upstream GitHub advisory at https://github.com/nocodb/nocodb/security/advisories/GHSA-2c5x-4jgf-88mj for patch availability.
More in Mattermost
View allMattermost versions 10.4.x <= 10.4.1, 9.11.x <= 9.11.7, 10.3.x <= 10.3.2, 10.2.x <= 10.2.2 fail to properly validate boa
Denial of service in linkify-it (npm) through v5.0.0 lets remote unauthenticated attackers wedge a rendering worker by s
A denial-of-service vulnerability in Mattermost allows an authenticated user to crash the server via multiple large auto
Mattermost version 7.1.x and earlier fails to sufficiently process a specifically crafted GIF file when it is uploaded w
A remote code execution vulnerability (CVSS 9.9) that allows authenticated users. Critical severity with potential for s
Mattermost versions 10.4.x <= 10.4.1, 9.11.x <= 9.11.7, 10.3.x <= 10.3.2, 10.2.x <= 10.2.2 fail to properly validate inp
Privilege escalation to full administrative control in Mattermost self-hosted server (versions 11.6.0 and earlier in the
Mattermost versions 11.0.x <= 11.0.2, 10.12.x <= 10.12.1, 10.11.x <= 10.11.4, 10.5.x <= 10.5.12 fail to to verify that t
Mattermost versions 10.12.x <= 10.12.1, 10.11.x <= 10.11.4, 10.5.x <= 10.5.12, 11.0.x <= 11.0.3 fail to properly validat
Mattermost webapp fails to validate route parameters in/<TEAM_NAME>/channels/<CHANNEL_NAME> allowing an attacker to perf
Fleet is an open source osquery manager. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable,
Mattermost versions 10.4.x <= 10.4.1, 9.11.x <= 9.11.7, 10.3.x <= 10.3.2, 10.2.x <= 10.2.2 fail to use prepared statemen
Same weakness CWE-918 – Server-Side Request Forgery (SSRF)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-38587
GHSA-2c5x-4jgf-88mj