Mar 4, 2026·4 min read·12 visits
OpenClaw's Nextcloud Talk webhook handler accepts replayed requests due to missing nonce/ID verification. Attackers can trigger duplicate AI actions. Fixed in v2026.2.25.
A capture-replay vulnerability exists in the Nextcloud Talk integration of the OpenClaw AI platform. The webhook handler properly verifies cryptographic signatures but fails to track processed message identifiers, allowing attackers to re-submit captured valid requests. This results in duplicate processing of AI commands and potential redundant side effects.
OpenClaw acts as a personal AI assistant that integrates with various platforms, including Nextcloud Talk, to receive and process user messages. The integration relies on incoming webhooks to trigger AI responses and execute tool-based commands. A vulnerability was identified in how these webhooks are processed: the system is stateless regarding message history.
While the application implements cryptographic signature verification using x-nextcloud-talk-signature (HMAC), it does not maintain a record of processed request identifiers (nonces or message IDs). This omission allows valid, signed requests to be captured and replayed against the server. The server accepts these replayed requests as new, legitimate events because the signature remains mathematically valid for the payload.
The root cause is a Missing Replay Protection mechanism (CWE-294) within the webhook handler. Secure webhook implementations typically require two components: identity verification (signature) and uniqueness verification (nonce/timestamp caching). OpenClaw implemented the former but neglected the latter.
Specifically, the onMessage handler in the Nextcloud Talk extension accepts HTTP POST requests and verifies headers. However, prior to version 2026.2.25, the handler lacked a deduplication logic or a state store to track the messageId or token of processed requests. Consequently, if an attacker intercepts a request with a valid x-nextcloud-talk-signature, they can resend it indefinitely. The application logic re-processes the payload, triggering the AI agent's logic flow anew for every submission.
The remediation introduced in version 2026.2.25 adds a persistence layer to track processed messages. A new component, NextcloudTalkReplayGuard, was implemented to check incoming message IDs against a local JSON-based deduplication store.
The fix involves two key changes:
replay-dedupe log on disk. If the ID is found and the entry is within the Time-To-Live (TTL) window, the request is rejected.x-nextcloud-talk-backend header to ensure the request originates from the configured Nextcloud instance URL, preventing cross-tenant replays.Fixed Logic (Simplified):
// src/replay-guard.ts
export function createNextcloudTalkReplayGuard(options) {
const persistentDedupe = createPersistentDedupe({
ttlMs: options.ttlMs ?? DEFAULT_REPLAY_TTL_MS,
// Stores IDs in: state/nextcloud-talk/replay-dedupe/<namespace>.json
resolveFilePath: (namespace) => path.join(stateDir, ...),
});
return {
shouldProcessMessage: async ({ accountId, roomToken, messageId }) => {
// Unique key combines token and message ID
const replayKey = `${roomToken}:${messageId}`;
// Returns false if key already exists
return await persistentDedupe.checkAndRecord(replayKey, { namespace: accountId });
},
};
}Exploitation requires an attacker to have network visibility to capture traffic between the Nextcloud instance and the OpenClaw server (e.g., via Man-in-the-Middle or access to a proxy log). No authentication credentials are required to replay the request, as the valid signature is contained within the captured headers.
Attack Steps:
x-nextcloud-talk-signature, x-nextcloud-talk-random, and x-nextcloud-talk-backend.curl or Burp Suite to resend the exact request to the OpenClaw server.The primary impact is integrity violation regarding application state and resource exhaustion.
| Product | Affected Versions | Fixed Version |
|---|---|---|
OpenClaw OpenClaw | < 2026.2.25 | 2026.2.25 |
| Attribute | Detail |
|---|---|
| CWE | CWE-294 |
| Attack Vector | Network |
| Attack Complexity | Low |
| Privileges Required | None |
| Impact | Duplicate Processing |
A capture-replay flaw occurs when a design does not properly validate that a request is unique or fresh, allowing an attacker to resubmit a captured valid request.
The trapster honeypot package is vulnerable to a remote denial of service (DoS) vulnerability due to uncontrolled recursion during the parsing of malformed DNS compression pointers in the decode_labels function.
A critical Use-After-Free (UAF) memory corruption vulnerability exists in the oneringbuf Rust crate prior to version 0.8.0. The vulnerability allows safe Rust code to instantiate and clone reference wrappers that point to heap-allocated ring buffers. Dropping one wrapper prematurely reclaims the backing memory, leading to dangling pointer references and subsequent Use-After-Free or Double Free states.
Januscape (CVE-2026-53359) is a critical Use-After-Free vulnerability in the x86 Shadow MMU component of the Linux Kernel's KVM subsystem. A logic error in shadow page tracking permits unauthorized page reuse without validating architectural execution roles, leading to dangling pointers in reverse mapping (rmap) tracking entries during guest memory teardown.
CVE-2026-48282 is a critical unauthenticated path traversal and arbitrary file write vulnerability in the Remote Development Services (RDS) component of Adobe ColdFusion. The vulnerability allows a remote, unauthenticated attacker to bypass directory boundaries and write arbitrary files, including CFML-based web shells, onto the host server. This flaw is actively exploited in the wild and enables full unauthenticated remote code execution under the privileges of the ColdFusion service account.
An information disclosure vulnerability exists in the web-auth/webauthn-lib PHP library when using the default SimpleFakeCredentialGenerator without a configured secret. This allows unauthenticated remote attackers to determine if a username exists on the target application.
A Stored and Reflected Cross-Site Scripting (XSS) vulnerability was identified in the Rust web service library 'rama' prior to version 0.3.0-rc.1. When serving directories using DirectoryServeMode::HtmlFileList, the library improperly escapes directory names, filenames, and request path components before injecting them into dynamically generated HTML files. This allows attackers to execute malicious scripts inside user browser sessions.