CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-9Q7V-8MR7-G23P

GHSA-9Q7V-8MR7-G23P: Server-Side Request Forgery (SSRF) in OpenClaw AI Assistant

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 2, 2026·6 min read·39 visits

Executive Summary (TL;DR)

A Server-Side Request Forgery (SSRF) flaw in OpenClaw allows attackers to access internal network resources via unvalidated URL inputs in the Ollama configuration and Marketplace plugin downloader.

OpenClaw versions prior to v2026.3.31 suffer from a high-severity Server-Side Request Forgery (SSRF) vulnerability. The application fails to validate user-supplied URLs in the Ollama extension and Marketplace plugin downloader, allowing unauthenticated or authenticated attackers to perform outbound HTTP requests to arbitrary internal and external resources.

Vulnerability Overview

OpenClaw is a personal AI assistant project that integrates with local and remote machine learning models. A core component of this architecture involves retrieving model metadata and downloading third-party extensions. The application performs these outbound network requests on behalf of the user.

A Server-Side Request Forgery (SSRF) vulnerability, classified as CWE-918, exists in the network request implementation of OpenClaw versions prior to v2026.3.31. The flaw resides in two primary components: the Ollama extension and the Marketplace plugin downloader. Both components accept user-controlled uniform resource identifiers and initiate backend HTTP connections without adequate input sanitization or destination verification.

This vulnerability permits an attacker to coerce the OpenClaw backend server into issuing HTTP requests to arbitrary targets. By manipulating the requested destination, an attacker can target internal systems that are otherwise shielded by firewalls or network address translation. The primary consequence is unauthorized access to sensitive internal application programming interfaces and cloud metadata endpoints.

Root Cause Analysis

The root cause of this SSRF vulnerability is the unconstrained use of the native JavaScript fetch() API for outbound network communication. In the Ollama extension, the application requires a baseUrl configuration to interface with a target model server. During API routes such as /api/tags, /api/show, and /api/pull, the backend directly concatenates the user-supplied baseUrl with the specific endpoint path.

The application fails to implement hostname validation or URL parsing constraints prior to executing the fetch() call. The absence of a dedicated egress filter means the server implicitly trusts the provided destination. Consequently, an attacker can supply a baseUrl pointing to internal IPv4 addresses, loopback interfaces, or local hostnames.

The Marketplace functionality introduces a secondary SSRF vector via the downloadUrlToTempFile function. This function is designed to retrieve compressed plugin archives (.tgz) from remote repositories. Similar to the Ollama vector, the function passes the attacker-controlled URL directly to the fetch() API. The server executes the request and processes the response, creating an avenue for internal network enumeration based on request timing and error state responses.

Code Analysis and Patch Walkthrough

The original implementation of the network request logic relied on direct invocations of the fetch() API. The backend application lacked a centralized mechanism to inspect outbound destinations, allowing user input to directly control the network request target.

Commit 8deb9522f3d2680820588b190adb4a2a52f3670b resolves this flaw by introducing a comprehensive fetchWithSsrFGuard wrapper located in openclaw/plugin-sdk/ssrf-runtime. This architectural shift centralizes egress filtering. For the Ollama extension specifically, the patch introduces buildOllamaBaseUrlSsrFPolicy to enforce strict hostname pinning.

export function buildOllamaBaseUrlSsrFPolicy(baseUrl: string): SsrFPolicy | undefined {
  const parsed = new URL(baseUrl.trim());
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") return undefined;
  return {
    allowedHostnames: [parsed.hostname],
    hostnameAllowlist: [parsed.hostname],
  };
}

The updated architecture mandates an auditContext for every guarded fetch invocation. This ensures that all outbound requests are categorized and logged, facilitating security monitoring. Furthermore, the patch implements a finally block to explicitly release response bodies, neutralizing resource exhaustion attacks that rely on stalled network connections.

Exploitation and Attack Methodology

Exploiting the Ollama configuration vector requires the ability to modify the baseUrl parameter. An attacker with access to the configuration interface can alter this value to target internal endpoints. For example, modifying the baseUrl to http://169.254.169.254/latest/meta-data/iam/security-credentials/ causes the OpenClaw server to query the AWS Instance Metadata Service during subsequent model discovery operations.

The Marketplace vector is exploitable by supplying a malicious plugin URL. An attacker can construct a payload pointing to an internal database service, such as http://internal-db-service:5432/. While the database will not return a valid .tgz archive, the application's response timing and connection error behavior provide an oracle for internal port scanning and service fingerprinting.

The following Nuclei template demonstrates the detection methodology by injecting an out-of-band testing URL into the configuration endpoint to confirm the server processes external outbound requests.

id: openclaw-ssrf-ollama
info:
  name: OpenClaw Ollama Discovery SSRF
  severity: high
  description: Detects SSRF via unvalidated Ollama baseUrl configuration.
http:
  - method: POST
    path: "/api/ollama/configure"
    body: '{"baseUrl": "http://{{interactsh-url}}"}'
    matchers:
      - type: word
        part: interactsh_protocol
        words:
          - "http"

Impact Assessment

The primary impact of this SSRF vulnerability is the circumvention of network perimeters. Attackers leverage the OpenClaw backend server as a proxy to reach internal hosts and services that are otherwise inaccessible from the public internet. This access facilitates internal network reconnaissance and service enumeration.

In cloud environments, the impact escalates significantly. The ability to query the Instance Metadata Service (IMDS) at 169.254.169.254 allows attackers to extract temporary Identity and Access Management (IAM) credentials. Compromise of these credentials typically leads to horizontal escalation across the wider cloud deployment.

Data exfiltration is also a primary concern. The marketplace plugin downloader processes responses from the attacker-defined URLs. If an attacker directs the application to an internal endpoint containing sensitive configuration data or unprotected application interfaces, the application may inadvertently return this data in error messages or application logs.

Remediation and Mitigation Guidance

System administrators must prioritize upgrading OpenClaw to version v2026.3.31 or later. This release incorporates the fetchWithSsrFGuard logic and explicitly mitigates both the Ollama extension and Marketplace SSRF vectors.

Network-level controls provide a secondary layer of defense. Deploy OpenClaw instances within isolated virtual private clouds (VPCs) or demilitarized zones (DMZs). Implement strict egress filtering via firewalls or security groups to deny outbound traffic to RFC1918 internal IP ranges and the local loopback address (127.0.0.0/8).

For cloud deployments, mitigate metadata service abuse by enforcing IMDSv2. Requiring session tokens for metadata queries prevents simple HTTP GET request exploitation inherent in standard SSRF vulnerabilities. Additionally, monitor application and network logs for anomalous outbound connections, particularly those terminating at internal infrastructure or unexpected cloud endpoints.

Official Patches

OpenClawFix commit implementing fetchWithSsrFGuard
OpenClawRelease v2026.3.31

Fix Analysis (1)

Technical Appendix

CVSS Score
7.6/ 10

Affected Systems

OpenClaw AI Assistant BackendOpenClaw Ollama ExtensionOpenClaw Marketplace Plugin Downloader

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenClaw
OpenClaw
< v2026.3.31v2026.3.31
AttributeDetail
CWE IDCWE-918
Attack VectorNetwork
CVSS v3.1 Score7.6
ImpactHigh - Confidentiality and Integrity
Exploit StatusProof of Concept Available
Affected ComponentsOllama Extension, Marketplace Downloader

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1552.005Cloud Instance Metadata API
Credential Access
CWE-918
Server-Side Request Forgery (SSRF)

The application receives a URL from an upstream component and retrieves the contents of this URL without ensuring that the requested destination is valid.

Vulnerability Timeline

Vulnerability identified and patch commit pushed by Jacob Tomlinson
2026-03-30
OpenClaw v2026.3.31 released to mitigate the vulnerability
2026-03-31
Public disclosure published via GitHub Advisory Database
2026-04-02

References & Sources

  • [1]GitHub Advisory: GHSA-9Q7V-8MR7-G23P
  • [2]OpenClaw Project Repository

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 3 hours ago•GHSA-C9XM-49CP-XCR9
6.3

GHSA-C9XM-49CP-XCR9: Server-Side Request Forgery in rmcp OAuth Client

A Server-Side Request Forgery (SSRF) vulnerability exists in the rmcp OAuth client, which is part of the Model Context Protocol (MCP) Rust SDK. The vulnerability arises from insecure processing of the resource_metadata parameter in WWW-Authenticate headers returned by a malicious or compromised MCP server. The client parses and fetches absolute URLs from this header without validation of scheme, origin, or network routing, allowing remote attackers to initiate HTTP GET requests to local network interfaces, RFC 1918 private subnets, or cloud metadata endpoints.

Alon Barad
Alon Barad
4 views•6 min read
•about 8 hours ago•CVE-2026-92945
4.2

CVE-2026-92945: Sandbox Escape and Module Allowlist Bypass via Path Prefix Matching in vm2

A module allowlist bypass vulnerability (CVE-2026-92945 / GHSA-7q3f-wx44-378m) was identified in the vm2 sandboxing library prior to version 3.11.7. This flaw permits unauthenticated or untrusted code running within the sandbox environment to bypass explicit module restrictions. When the transitive resolution option is disabled, the system fails to validate file system path boundaries, allowing prefix-sharing sibling directories to be resolved and loaded, thereby escaping intended sandbox restrictions.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 9 hours ago•CVE-2026-92941
10.0

CVE-2026-92941: Sandbox Escape and Process-Wide TLS Trust Store Manipulation in vm2

CVE-2026-92941 is a critical sandbox-escape and trust-manipulation vulnerability in the vm2 library (versions 3.11.3 to 3.11.6). This security flaw allows untrusted code executing within a NodeVM sandbox environment to compromise the global TLS trust store of the host Node.js process. By leveraging a design flaw where the host's native 'tls.setDefaultCACertificates' can be executed via a proxy wrapper, combined with a bridge unwrapping bypass in the 'url' module, an attacker can modify the process-wide default root Certificate Authorities. Consequently, all subsequent outbound TLS/HTTPS clients running on the host thread are forced to trust attacker-signed certificates, facilitating transparent Man-in-the-Middle (MitM) attacks. The vulnerability was resolved in version 3.11.7 of vm2 by introducing built-in member-level sanitization before applying read-only proxy wrappers.

Amit Schendel
Amit Schendel
5 views•10 min read
•about 10 hours ago•CVE-2026-92944
9.8

CVE-2026-92944: Sandbox Escape in vm2 via Stale V8 PromiseThenLookupChain Protector

A critical engine-level reachability failure in Node.js 26 running V8 14.6 allows attackers to escape the vm2 sandbox environment. When consecutive prototype properties are modified using sequential assignments, a V8 optimization bug fails to invalidate the PromiseThenLookupChain protector. By calling Promise.prototype.finally, the attacker bypasses the vm2 wrappers, hijacks the promise reaction using a custom constructor, triggers a calibrated stack overflow to capture a host-realm RangeError, and executes arbitrary shell commands on the host.

Alon Barad
Alon Barad
7 views•8 min read
•about 11 hours ago•CVE-2026-92939
9.9

CVE-2026-92939: Critical Sandbox Escape via Host Crypto setEngine Native Code Execution in vm2

A critical sandbox escape vulnerability in the vm2 library allows sandboxed JavaScript code to bypass containment and execute arbitrary native code on the host process. This occurs when the host's builtin crypto module is exposed to the NodeVM environment. Although vm2 implements a read-only proxy layer to restrict direct modifications to host properties, it does not prevent invocation of host-level functions. By calling the crypto.setEngine API with a path to a malicious native library on disk, an attacker can trigger OpenSSL's dynamic module loader. The host's operating system loader immediately runs the dynamic library's initializers/constructors before verifying engine compatibility, leading to remote code execution in the context of the host process.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 12 hours ago•CVE-2026-92938
9.9

CVE-2026-92938: Remote Code Execution in vm2 via node:sqlite DatabaseSync Sandbox Escape

CVE-2026-92938 is a critical sandbox escape vulnerability in the vm2 library (versions 3.11.3 through 3.11.6) that allows arbitrary native code execution on the host when the node:sqlite built-in module is loaded inside a sandboxed NodeVM environment.

Amit Schendel
Amit Schendel
8 views•8 min read