Server-side request forgery (SSRF) In @nocobase/plugin-workflow-request

Description

NocoBase has SSRF in Workflow HTTP Request and Custom Request Plugins

Summary

NocoBase's workflow HTTP request plugin and custom request action plugin make server-side HTTP requests to user-provided URLs without any SSRF protection. An authenticated user can access internal network services, cloud metadata endpoints, and localhost.

Vulnerable Code

1. Workflow HTTP Request Plugin

packages/plugins/@nocobase/plugin-workflow-request/src/server/RequestInstruction.ts lines 117-128:

return axios.request({
  url: trim(url),  // User-controlled, no validation
  method,
  headers,
  params,
  timeout,
  ...(method.toLowerCase() !== 'get' && data != null
    ? { data: transformer ? await transformer(data) : data }...

The url at line 98 comes directly from user workflow configuration with only whitespace trimming.

2. Custom Request Action Plugin

packages/plugins/@nocobase/plugin-action-custom-request/src/server/actions/send.ts lines 172-198:

const axiosRequestConfig = {
  baseURL: ctx.origin,
  ...options,
  url: getParsedValue(url, variables),  // User-controlled via template
  headers: { ... },
  params: getParsedValue(arrayToObject(params), variables),
  data: getParsedValue(toJSON(data), variables),
};...

Missing Protections

    No request-filtering-agent or SSRF library (confirmed via grep across entire codebase)

    No private IP range filtering

    No cloud metadata endpoint blocking

    No URL scheme validation

    No DNS rebinding protection

Attack Scenario

    Authenticated user creates a workflow with HTTP Request node

    Sets URL to http://169.254.169.254/latest/meta-data/iam/security-credentials/

    Triggers the workflow

    Server fetches AWS metadata and returns IAM credentials in workflow execution logs

Alternatively via Custom Request action:

    Create custom request with URL http://127.0.0.1:5432 or http://10.0.0.1:8080/admin

    Execute the action

    Server makes request to internal service

Impact

    Cloud metadata theft: AWS/GCP/Azure credentials via metadata endpoints

    Internal network access: Scan and interact with services on private IP ranges

    Database access: Connect to localhost databases (PostgreSQL, Redis, etc.)

    Authentication required: Yes (authenticated user), but any workspace member can create workflows

Mitigation

Update Impact

Minimal update. May introduce new vulnerabilities or breaking changes.

Ecosystem
Package
Affected version
Patched versions