Skip to content

GHSA-w96v-gf22-crwp CVE-2025-68949

n8n: Webhook Node IP Whitelist Bypass via Partial String Matching

Medium npm
Severity
5.3 / 10
Medium · CVSS 3.1
Exploit chance (EPSS)
0.30%
Chance of exploitation in the next 30 days. Higher than 22.78% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-134 Use of Externally-Controlled Format String
CWE-183 Permissive List of Allowed Inputs
CWE-284 Improper Access Control
Fix
2.2.0
Upgrade n8n to this version or later

Description

Impact

The Webhook node’s IP whitelist validation performed partial string matching instead of exact IP comparison. As a result, an incoming request could be accepted if the source IP address merely contained the configured whitelist entry as a substring.

This issue affected instances where workflow editors relied on IP-based access controls to restrict webhook access. Both IPv4 and IPv6 addresses were impacted. An attacker with a non-whitelisted IP could bypass restrictions if their IP shared a partial prefix with a trusted address, undermining the intended security boundary.

Patches

This issue has been patched in version 2.2.0.

Users are advised to upgrade to v2.2.0 or later, where IP whitelist validation uses strict IP comparison logic rather than partial string matching.

Workarounds

Users unable to upgrade immediately should avoid relying solely on IP whitelisting for webhook security. Recommended mitigations include:

  • Adding authentication mechanisms such as shared secrets, HMAC signatures, or API keys.
  • Avoiding short or prefix-based whitelist entries.
  • Enforcing IP filtering at the network layer (for example, via reverse proxies or firewalls).

Affected versions

npm

PackageVulnerableFixed in
n8n
>= 1.36.0, < 2.2.0
2.2.0

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

n8n npm → 2.2.0

npm
npm install n8n@2.2.0
yarn
yarn add n8n@2.2.0
pnpm
pnpm add n8n@2.2.0

Severity breakdown

CVSS 3.1 5.3

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Weakness

CWE-134: Use of Externally-Controlled Format String

The product uses a function that accepts a format string as an argument, but the format string originates from an external source.

How to prevent it
  • Requirements: Choose a language that is not subject to this flaw.
  • Implementation: Ensure that all format string functions are passed a static string which cannot be controlled by the user, and that the proper number of arguments are always sent to that function as well. If at all possible, use functions that do not support the %n operator in format strings. [REF-116] [REF-117]
  • Build and Compilation: Run compilers and linkers with high warning levels, since they may detect incorrect usage.

CWE-183: Permissive List of Allowed Inputs

The product implements a protection mechanism that relies on a list of inputs (or properties of inputs) that are explicitly allowed by policy because the inputs are assumed to be safe, but the list is too permissive - that is, it allows an input that is unsafe, leading to resultant weaknesses.

CWE-284: Improper Access Control

The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.

How to prevent it
  • Architecture and Design, Operation: Very carefully manage the setting, management, and handling of privileges. Explicitly manage trust zones in the software.
  • Architecture and Design: Compartmentalize the system to have "safe" areas where trust boundaries can be unambiguously drawn. Do not allow sensitive data to go outside of the trust boundary and always be careful when interfacing with a compartment outside of the safe area. Ensure that appropriate compartmentalization is built into the system design, and the compartmentalization allows for and reinforces privilege separation functionality. Architects and designers should rely on the principle of least privilege to decide the appropriate time to use privileges and the time to drop privileges.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-v98v-ff95-f3cp
n8n Vulnerable to Remote Code Execution via Expression Injection
High Known exploited Also affects n8n
GHSA-qgpw-8g46-w95v
n8n: Git Node branch.<name>.remote Config Key Bypasses Sandbox Path Restriction, Enabling Local Git Repository Read
Medium Also affects n8n
GHSA-65xw-2v52-jhxc
n8n: Cross-User Active Workflow ID and Lifecycle Event Disclosure via Missing userId Filter
Medium Also affects n8n
GHSA-pq6c-vh67-xpm3
n8n: Log Streaming Event Destinations Decrypt Generic-Auth Credentials Without Ownership Check
Medium Also affects n8n
GHSA-cqr2-h44g-v75v
n8n: Cross-Tenant Project-Member PII Disclosure via Missing Per-Project Scope Check on Role Assignment Endpoints
Medium Also affects n8n
GHSA-pf83-w3f9-8m37
n8n: Disabled OIDC SSO Endpoints Remain Active and Issue Valid Sessions
Medium Also affects n8n
GHSA-6xcw-7xm6-48c6
n8n: Expression Sandbox Escape via Shared Builtin Tampering and Code-Printer Injection Leads to Code Execution
High Also affects n8n
GHSA-34ff-336r-5q23
n8n: Domain-Restriction Bypass via Unguarded Model-Search Endpoint in OpenAI Chat Model Node
Medium Also affects n8n
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor