Apr 2, 2026·6 min read·33 visits
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.
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.
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.
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.
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"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.
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.
| Product | Affected Versions | Fixed Version |
|---|---|---|
OpenClaw OpenClaw | < v2026.3.31 | v2026.3.31 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-918 |
| Attack Vector | Network |
| CVSS v3.1 Score | 7.6 |
| Impact | High - Confidentiality and Integrity |
| Exploit Status | Proof of Concept Available |
| Affected Components | Ollama Extension, Marketplace Downloader |
The application receives a URL from an upstream component and retrieves the contents of this URL without ensuring that the requested destination is valid.
Netflix Lemur before 1.9.3 contains a missing authorization vulnerability (CWE-862, CWE-639) when handling certificate creation, upload, or modification. Authenticated non-read-only users can manipulate the replaces parameter to silence expiration notifications and hijack certificate rotation tasks for arbitrary targets, leading to unauthorized TLS certificate deployment and traffic interception.
CVE-2026-71317 is a critical Broken Object-Level Authorization (BOLA) / Missing Authorization vulnerability in Netflix Lemur versions prior to 1.9.3. When the self-service authority creation option is enabled (ADMIN_ONLY_AUTHORITY_CREATION = False), Lemur allows authenticated non-read-only users to request the creation of a subordinate Certificate Authority (sub-CA) chained to any internal parent authority, even if the requesting user lacks administrative or usage permissions over that parent CA. This allows attackers to generate subordinate CAs signed by trusted root certificates, exposing private keys and compromising the organizational PKI trust chain.
Netflix Lemur, a TLS/SSL certificate management framework, contains a missing authorization check in its certificate export endpoint. Prior to version 1.9.3, the validation logic verifying whether a user had permission to export a certificate was incorrectly placed inside a block that executed only if the selected plugin required a private key. When an authenticated user attempted to export a certificate using a plugin that did not require the private key, the authorization check was bypassed, allowing unauthorized access to the public portions of the certificate and producing misleading audit logs.
A critical security flaw in LibreNMS allows authenticated administrators to execute arbitrary commands by modifying the configured binary path for snmpget and accessing the About page. This occurs due to insufficient verification of the executable file's identity and integrity prior to executing it with shell_exec.
LibreNMS versions prior to 26.7.0 are vulnerable to a stored Cross-Site Scripting (XSS) vulnerability. An authenticated administrator can inject arbitrary HTML or JavaScript into graph descriptions via specific administrative configuration endpoints. When another authenticated user views the affected graph, the unescaped payload executes within their browser context.
An injection vulnerability in LibreNMS's Oxidized integration component allows administrative or network-positioned attackers to achieve stored cross-site scripting (XSS). By setting a malicious oxidized.url endpoint, the server makes outbound queries and processes returned JSON fields containing malicious HTML or JavaScript. These payloads are outputted directly in the web UI without appropriate output encoding.